package com.test;
import com.itextpdf.text.BaseColor;
import com.itextpdf.text.Font;
import com.itextpdf.text.Image;
import com.itextpdf.text.pdf.*;
import org.junit.Test;
import java.io.FileOutputStream;
/**
*編輯PDF
*/
public class PDFTest {
@Test
public void testPDF(){
generatePDF("D:/1.pdf","D:/2.pdf","D:1.png");
}
/**
* 生成新的PDF
* @param pdfPath 要編輯的PDF路徑
* @param newPDFPath 生成新的PDF路徑
* @param imagePath 插入圖片路徑
*/
public void generatePDF(String pdfPath,String newPDFPath,String imagePath){
PdfReader reader = null;
PdfStamper stamper = null;
try{
//創建一個pdf讀入流
reader = new PdfReader(pdfPath);
//根據一個pdfreader創建一個pdfStamper.用來生成新的pdf.
stamper = new PdfStamper(reader,new FileOutputStream(newPDFPath));
//這個字體是itext-asian.jar中自帶的 所以不用考慮操作系統環境問題.
BaseFont bf = BaseFont.createFont("STSong-Light", "UniGB-UCS2-H", BaseFont.NOT_EMBEDDED);
//baseFont不支持字體樣式設定.但是font字體要求操作系統支持此字體會帶來移植問題.
Font font = new Font(bf,10);
font.setStyle(Font.BOLD);
font.getBaseFont();
PdfContentByte over;
//頁數是從1開始的
for (int i=1; i<=reader.getNumberOfPages(); i++){
//獲得pdfstamper在當前頁的上層打印內容.也就是說 這些內容會覆蓋在原先的pdf內容之上.
over = stamper.getOverContent(i);
//當前頁的下層打印內容 按自己需求選擇
//over = stamper.getUnderContent(i);
//用pdfreader獲得當前頁字典對象.包含了該頁的一些數據.比如該頁的坐標軸信息.
PdfDictionary p = reader.getPageN(i);
//拿到mediaBox 里面放着該頁pdf的大小信息.
PdfObject po = p.get(new PdfName("MediaBox"));
//po是一個數組對象.里面包含了該頁pdf的坐標軸范圍.
PdfArray pa = (PdfArray) po;
//開始寫入文本
over.beginText();
//設置字體和大小
over.setFontAndSize(font.getBaseFont(), 90);
//設置字體顏色
over.setColorFill(new BaseColor(0,110,107,100));
com.itextpdf.text.pdf.PdfGState gState = new PdfGState();
gState.setStrokeOpacity(0.1f);
over.setGState(gState);
//要輸出的text 對齊方式 寫的字 設置字體的輸出位置 字體是否旋轉
over.showTextAligned(0,"HELLO WORLD",0,100,100);
over.endText();
//創建一個image對象.
Image image = Image.getInstance(imagePath);
//設置image對象的輸出位置pa.getAsNumber(pa.size()-1).floatValue() 是該頁pdf坐標軸的y軸的最大值 0, 0, 841.92, 595.32
image.setAbsolutePosition(0,pa.getAsNumber(pa.size()-1).floatValue());
//設置插入的圖片大小
image.scaleToFit(50,50);
over.addImage(image);
//畫一個圈.
over.setRGBColorStroke(0xFF, 0x00, 0x00);
over.setLineWidth(5f);
over.ellipse(250, 450, 350, 550);
over.stroke();
}
stamper.close();
}catch (Exception e){
e.printStackTrace();
}
finally {
try {
if (null != is)
is.close();
} catch (Exception e) {
e.printStackTrace();
}
try {
if (null != os)
os.close();
} catch (Exception e) {
e.printStackTrace();
}
}
} }
PDF開發包下載地址:http://pdfbox.apache.org/