Itext
Maven坐標
<properties>
<itextpdf.version>5.5.6</itextpdf.version>
</properties>
<dependencies>
<dependency>
<groupId>com.itextpdf</groupId>
<artifactId>itextpdf</artifactId>
<version>${itextpdf.version}</version>
</dependency>
<dependency>
<groupId>com.itextpdf.tool</groupId>
<artifactId>xmlworker</artifactId>
<version>${itextpdf.version}</version>
</dependency>
<!--中文支持-->
<dependency>
<groupId>com.itextpdf</groupId>
<artifactId>itext-asian</artifactId>
<version>5.2.0</version>
</dependency>
</dependencies>
Java代碼
常用
塊、短語、段落、圖片、超鏈接等對象
[官網](https://itextpdf.com/en)
## Maven坐標
```xml
<properties>
<itextpdf.version>5.5.6</itextpdf.version>
</properties>
<dependencies>
<dependency>
<groupId>com.itextpdf</groupId>
<artifactId>itextpdf</artifactId>
<version>${itextpdf.version}</version>
</dependency>
<dependency>
<groupId>com.itextpdf.tool</groupId>
<artifactId>xmlworker</artifactId>
<version>${itextpdf.version}</version>
</dependency>
<!--中文支持-->
<dependency>
<groupId>com.itextpdf</groupId>
<artifactId>itext-asian</artifactId>
<version>5.2.0</version>
</dependency>
</dependencies>
Java代碼
常用
塊、短語、段落、圖片、超鏈接等對象
//new一個Document對象,設置紙張大小
Document document = new Document(PageSize.A4);
//解析器
PdfWriter writer= PdfWriter.getInstance(document, new FileOutputStream("D://pdfText.pdf"));
//添加PDF屬性
/*document.addAuthor("作者");
document.addTitle("標題");
document.addSubject("主題");
document.addKeywords("關鍵字");*/
/*頁邊距*/
document.setMargins(10, 20, 30, 40);
//打開document
document.open();
/***添加新段落***/
document.add(new Paragraph("Hello world")); //英文段落添加成功
//字體的設置,如顏色,字體,大小等
Font titlefontChinese = new Font(bfChinese, 22, Font.BOLD, BaseColor.BLACK);
Paragraph title_hmc = new Paragraph("添加中文段落",titlefontChinese);
title_hmc.setAlignment(Element.ALIGN_CENTER);
title_hmc.setSpacingBefore(30f);
title_hmc.setSpacingAfter(20f);
document.add(title_hmc); //中文段落添加成功
//添加新的空白頁
document.newPage();
writer.setPageEmpty(true); //顯示空白頁
/*Chunk:塊對象,可配置字符間距、字符+背景色、背景色的矩形大小可任意調整*/
document.newPage();
document.add(new Chunk("中文輸出: ", getChineseFont()));
Chunk tChunk2 = new Chunk("輸出的內容", getChineseFont());
tChunk2.setBackground(BaseColor.CYAN, 1f, 0.5f, 1f, 1.5f); // 設置背景色
tChunk2.setTextRise(6); // 上浮
tChunk2.setUnderline(0.2f, -2f); // 下划線
document.add(tChunk2);
document.add(Chunk.NEWLINE); // 新建一行
/*Phrase:短語可配置行間距、不會另起一行*/
document.newPage();
document.add(new Phrase("Phrase: "));
Phrase tPhrase = new Phrase();
Chunk name = new Chunk("Chunk1");
name.setUnderline(0.2f, -2f);
tPhrase.add(name);
tPhrase.add(Chunk.NEWLINE);// 放在容器中好用
tPhrase.add(new Chunk("換行Chunk: ", getChineseFont()));
tPhrase.add(new Chunk("Chunk2"));
tPhrase.setLeading(14f);// 行間距
document.add(tPhrase);
/*Paragraph:段落*/
document.newPage();
Paragraph info = new Paragraph("New page");
info.setLeading(20f); //設置行距
info.setSpacingBefore(5f);// 設置段落上空白
info.setSpacingAfter(10f);// 設置段落下空白
info.setFirstLineIndent(24);// 首行縮進
info.setIndentationLeft(12);// 左縮進
info.setIndentationRight(12);// 右縮進
info.setAlignment(Element.ALIGN_CENTER); //設置居中
document.add(info);
/*Image:圖片,繼承自Rectangle,scaleToFit設置大小,setAbsolutePosition設置絕對位置*/
document.newPage();
Image img = Image.getInstance("C:\\Users\\Administrator\\Pictures\\img10B6-36.jpg");
img.setAlignment(Image.LEFT); //對齊方式
img.setBorder(Image.BOX); //邊框
img.setBorderWidth(10); //邊框寬度
img.setBorderColor(BaseColor.WHITE); //邊框顏色
img.scaleToFit(800, 600);// 大小
img.setRotationDegrees(-3);// 旋轉
document.add(img);
/*Anchor:超鏈接和錨點對象*/
document.newPage();
Paragraph paragraph = new Paragraph();
Anchor anchor = new Anchor("錨點文字", getChineseFont());
anchor.setName("achorName"); // 設置錨點的名字
anchor.setReference("http://www.baidu.com");// 連接
paragraph.add(anchor);
paragraph.add(String.format(": %d sites", 10000));
document.add(paragraph);
//關閉document
document.close();
表格
Document document = new Document(PageSize.A4.rotate());
//解析器
PdfWriter writer= PdfWriter.getInstance(document, new FileOutputStream("D://pdftable.pdf"));
/*頁邊距*/
document.setMargins(10, 20, 30, 40);
//打開document
document.open();
/*table:表格*/
document.newPage();
//中文字體
BaseFont bfChinese = BaseFont.createFont("STSongStd-Light", "UniGB-UCS2-H", BaseFont.NOT_EMBEDDED);
Font fontChinese = new Font(bfChinese, 12, Font.NORMAL);
int colNumber = 6;
// 創建有6列的表格
PdfPTable datatable = new PdfPTable(colNumber);
// 定義表格的寬度
int[] cellsWidth = { 1, 1, 1, 1, 1, 1 };
datatable.setWidths(cellsWidth);// 單元格寬度
//datatable.setTotalWidth(300f);//表格的總寬度
//datatable.setWidthPercentage(100);// 表格的寬度百分比
datatable.getDefaultCell().setPadding(2);// 單元格的間隔
datatable.getDefaultCell().setBorderWidth(2);// 邊框寬度
//設置表格的底色
datatable.getDefaultCell().setBackgroundColor(BaseColor.GREEN);
datatable.getDefaultCell().setHorizontalAlignment(Element.ALIGN_CENTER);
//跨行跨列表格
PdfPCell pdfPCell; // 單元格
/*跨列*/
pdfPCell = new PdfPCell(new Phrase("大標題--跨6列", getChineseFont()));
pdfPCell.setHorizontalAlignment(Element.ALIGN_CENTER); //水平居中
pdfPCell.setColspan(6);// 跨3列
datatable.addCell(pdfPCell);
/*跨行*/
pdfPCell = new PdfPCell(new Phrase("標題一跨2行", getChineseFont()));
pdfPCell.setHorizontalAlignment(Element.ALIGN_CENTER); //水平居中
pdfPCell.setVerticalAlignment(Element.ALIGN_MIDDLE); //垂直居中
pdfPCell.setRowspan(2);// 跨2行
datatable.addCell(pdfPCell);
pdfPCell = new PdfPCell(new Phrase("標題二跨2行", getChineseFont()));
pdfPCell.setHorizontalAlignment(Element.ALIGN_CENTER); //水平居中
pdfPCell.setVerticalAlignment(Element.ALIGN_MIDDLE); //垂直居中
pdfPCell.setRowspan(2);// 跨2行
datatable.addCell(pdfPCell);
pdfPCell = new PdfPCell(new Phrase("標題三跨2行", getChineseFont()));
pdfPCell.setHorizontalAlignment(Element.ALIGN_CENTER); //居中
pdfPCell.setVerticalAlignment(Element.ALIGN_MIDDLE); //垂直居中
pdfPCell.setColspan(2);// 跨3列
pdfPCell.setRowspan(1);// 跨2行
datatable.addCell(pdfPCell);
pdfPCell = new PdfPCell(new Phrase("標題四跨2行", getChineseFont()));
pdfPCell.setHorizontalAlignment(Element.ALIGN_CENTER); //居中
pdfPCell.setVerticalAlignment(Element.ALIGN_MIDDLE); //垂直居中
pdfPCell.setRowspan(2);// 跨2行
datatable.addCell(pdfPCell);
pdfPCell = new PdfPCell(new Phrase("標題五跨2行", getChineseFont()));
pdfPCell.setHorizontalAlignment(Element.ALIGN_CENTER); //居中
pdfPCell.setVerticalAlignment(Element.ALIGN_MIDDLE); //垂直居中
pdfPCell.setRowspan(2);// 跨2行
datatable.addCell(pdfPCell);
pdfPCell = new PdfPCell(new Phrase("3子標題", getChineseFont()));
pdfPCell.setHorizontalAlignment(Element.ALIGN_CENTER); //居中
datatable.addCell(pdfPCell);
datatable.addCell(pdfPCell);
// 添加表頭元素
for (int i = 0; i < colNumber; i++) {
datatable.addCell(new Paragraph("中文內容"+i, fontChinese));
}
// 添加表格的內容
for (int i = 0; i < colNumber; i++) {
datatable.addCell(new Paragraph("Content"+i, fontChinese));
}
// 空白表格
for (int i = 0; i < colNumber; i++) {
PdfPCell cell = new PdfPCell(new Paragraph("")); //設置內容為空的表格
cell.setFixedHeight(10);// 單元格高度
datatable.addCell(cell); //添加到表格
}
datatable.setSpacingAfter(40f);// 設置表格下面空白行
document.add(datatable);// 把表格加入文檔
//關閉document
document.close();
獲取默認字體
/**
* 獲取中國字體
* @return
*/
public static Font getChineseFont() {
BaseFont bfChinese; //確認支持中文
Font fontChinese = null; //字體的設置,如顏色,字體,大小等
try {
bfChinese = BaseFont.createFont("STSongStd-Light", "UniGB-UCS2-H", BaseFont.NOT_EMBEDDED);
// fontChinese = new Font(bfChinese, 12, Font.NORMAL);
fontChinese = new Font(bfChinese, 12, Font.NORMAL, BaseColor.BLACK);
} catch (DocumentException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}
return fontChinese;
}
合並PDF
/** 合並pdf文件
* @param files 要合並文件數組(絕對路勁{ "D:\\a1.pdf", "D:\\a2.pdf" })
* @param savepath 合並后新產生的文件絕對路徑如D:\\a.pdf
*/
public static void mergePdfFiles(String[] files, String savepath){
try {
//創建一個與a.pdf相同紙張大小的document
/*PdfReader pdfReader = new PdfReader(files[0]);
Rectangle pageSize = pdfReader.getPageSize(1);
pdfReader.close(); //關閉流,不然會一直占用*/
//創建A4大小的document
Document document = new Document(PageSize.A4);
PdfCopy copy = new PdfCopy(document, new FileOutputStream(savepath));
document.open();
for (int i = 0; i < files.length; i++) { //遍歷文件路徑集合
//一個一個的遍歷現有的PDF
PdfReader reader = null; //獲取文件
try {
reader = new PdfReader(files[i]);
} catch (IOException e) {
continue; //如果文件不存在,則繼續合並下一個文件
}
int n = reader.getNumberOfPages(); //獲取文件總頁數
for (int j = 1; j <= n; j++) { //遍歷頁數,放入document
document.newPage(); //新頁
PdfImportedPage page = copy.getImportedPage(reader, j); //從文件中的指定頁碼拿出page
copy.addPage(page); //將page放入PdfCopy
}
reader.close(); //關閉流
}
document.close();
}catch (DocumentException e) {
e.printStackTrace();
} catch (FileNotFoundException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}
}
添加水印
/**
* 給pdf文件添加水印
* @param InPdfFile 要加水印的原pdf文件路徑
* @param outPdfFile 加了水印后要輸出的路徑
* @param textMark 水印文字
* @param textWidth 文字橫坐標
* @param textHeight 文字縱坐標
* @throws Exception
*/
public static void addPdfTextMark(String InPdfFile, String outPdfFile, String textMark,int textWidth,
int textHeight) throws Exception {
PdfReader reader = new PdfReader(InPdfFile, "PDF".getBytes());
PdfStamper stamp = new PdfStamper(reader, new FileOutputStream(new File(outPdfFile)));
PdfContentByte under;
BaseFont font = BaseFont.createFont("C:/WINDOWS/Fonts/SIMSUN.TTC,1", "Identity-H", true);// 使用系統字體
int pageSize = reader.getNumberOfPages();// 原pdf文件的總頁數
for(int i = 1; i <= pageSize; i++) {
under = stamp.getUnderContent(i);// 水印在之前文本下
// under = stamp.getOverContent(i);//水印在之前文本上
under.beginText();
under.setColorFill(BaseColor.GRAY);// 文字水印 顏色
under.setFontAndSize(font, 38);// 文字水印 字體及字號
under.setTextMatrix(textWidth, textHeight);// 文字水印 起始位置
under.showTextAligned(Element.ALIGN_CENTER, textMark, textWidth, textHeight, 45);
under.endText();
}
stamp.close();// 關閉
}
/**
* 給pdf文件添加圖片水印
* @param InPdfFile 要加水印的原pdf文件路徑
* @param outPdfFile 加了水印后要輸出的路徑
* @param markImagePath 水印圖片路徑
* @param imgWidth 圖片橫坐標
* @param imgHeight 圖片縱坐標
* @throws Exception
*/
public static void addPdfImgMark(String InPdfFile, String outPdfFile, String markImagePath,int imgWidth, int imgHeight) throws Exception {
PdfReader reader = new PdfReader(InPdfFile, "PDF".getBytes());
PdfStamper stamp = new PdfStamper(reader, new FileOutputStream(new File(outPdfFile)));
PdfContentByte under;
PdfGState gs1 = new PdfGState();
gs1.setFillOpacity(0.3f);// 透明度設置
Image img = Image.getInstance(markImagePath);// 插入圖片水印
img.setAbsolutePosition(imgWidth, imgHeight); // 坐標
img.setRotation(-20);// 旋轉 弧度
img.setRotationDegrees(45);// 旋轉 角度
// img.scaleAbsolute(200,100);//自定義大小
// img.scalePercent(50);//依照比例縮放
int pageSize = reader.getNumberOfPages();// 原pdf文件的總頁數
for(int i = 1; i <= pageSize; i++) {
under = stamp.getUnderContent(i);// 水印在之前文本下
// under = stamp.getOverContent(i);//水印在之前文本上
under.setGState(gs1);// 圖片水印 透明度
under.addImage(img);// 圖片水印
}
stamp.close();// 關閉
// // 刪除不帶水印文件
//File tempfile = new File(InPdfFile);
// if(tempfile.exists()) {
// tempfile.delete();
//}
}
//new一個Document對象,設置紙張大小
Document document = new Document(PageSize.A4);
//解析器
PdfWriter writer= PdfWriter.getInstance(document, new FileOutputStream("D://pdfText.pdf"));
//添加PDF屬性
/document.addAuthor("作者");
document.addTitle("標題");
document.addSubject("主題");
document.addKeywords("關鍵字");/
/頁邊距/
document.setMargins(10, 20, 30, 40);
//打開document
document.open();
//添加新段落
document.add(new Paragraph("Hello world"));
//添加新的空白頁
document.newPage();
writer.setPageEmpty(true); //顯示空白頁
/Chunk:塊對象,可配置字符間距、字符+背景色、背景色的矩形大小可任意調整/
document.newPage();
document.add(new Chunk("中文輸出: ", getChineseFont()));
Chunk tChunk2 = new Chunk("輸出的內容", getChineseFont());
tChunk2.setBackground(BaseColor.CYAN, 1f, 0.5f, 1f, 1.5f); // 設置背景色
tChunk2.setTextRise(6); // 上浮
tChunk2.setUnderline(0.2f, -2f); // 下划線
document.add(tChunk2);
document.add(Chunk.NEWLINE); // 新建一行
/Phrase:短語可配置行間距、不會另起一行/
document.newPage();
document.add(new Phrase("Phrase: "));
Phrase tPhrase = new Phrase();
Chunk name = new Chunk("Chunk1");
name.setUnderline(0.2f, -2f);
tPhrase.add(name);
tPhrase.add(Chunk.NEWLINE);// 放在容器中好用
tPhrase.add(new Chunk("換行Chunk: ", getChineseFont()));
tPhrase.add(new Chunk("Chunk2"));
tPhrase.setLeading(14f);// 行間距
document.add(tPhrase);
/Paragraph:段落/
document.newPage();
Paragraph info = new Paragraph("New page");
info.setLeading(20f); //設置行距
info.setSpacingBefore(5f);// 設置段落上空白
info.setSpacingAfter(10f);// 設置段落下空白
info.setFirstLineIndent(24);// 首行縮進
info.setIndentationLeft(12);// 左縮進
info.setIndentationRight(12);// 右縮進
info.setAlignment(Element.ALIGN_CENTER); //設置居中
document.add(info);
/Image:圖片,繼承自Rectangle,scaleToFit設置大小,setAbsolutePosition設置絕對位置/
document.newPage();
Image img = Image.getInstance("C:\Users\Administrator\Pictures\img10B6-36.jpg");
img.setAlignment(Image.LEFT); //對齊方式
img.setBorder(Image.BOX); //邊框
img.setBorderWidth(10); //邊框寬度
img.setBorderColor(BaseColor.WHITE); //邊框顏色
img.scaleToFit(800, 600);// 大小
img.setRotationDegrees(-3);// 旋轉
document.add(img);
/Anchor:超鏈接和錨點對象/
document.newPage();
Paragraph paragraph = new Paragraph();
Anchor anchor = new Anchor("錨點文字", getChineseFont());
anchor.setName("achorName"); // 設置錨點的名字
anchor.setReference("http://www.baidu.com");// 連接
paragraph.add(anchor);
paragraph.add(String.format(": %d sites", 10000));
document.add(paragraph);
//關閉document
document.close();
### 表格
```java
Document document = new Document(PageSize.A4.rotate());
//解析器
PdfWriter writer= PdfWriter.getInstance(document, new FileOutputStream("D://pdftable.pdf"));
/*頁邊距*/
document.setMargins(10, 20, 30, 40);
//打開document
document.open();
/*table:表格*/
document.newPage();
//中文字體
BaseFont bfChinese = BaseFont.createFont("STSongStd-Light", "UniGB-UCS2-H", BaseFont.NOT_EMBEDDED);
Font fontChinese = new Font(bfChinese, 12, Font.NORMAL);
int colNumber = 6;
// 創建有6列的表格
PdfPTable datatable = new PdfPTable(colNumber);
// 定義表格的寬度
int[] cellsWidth = { 1, 1, 1, 1, 1, 1 };
datatable.setWidths(cellsWidth);// 單元格寬度
//datatable.setTotalWidth(300f);//表格的總寬度
//datatable.setWidthPercentage(100);// 表格的寬度百分比
datatable.getDefaultCell().setPadding(2);// 單元格的間隔
datatable.getDefaultCell().setBorderWidth(2);// 邊框寬度
//設置表格的底色
datatable.getDefaultCell().setBackgroundColor(BaseColor.GREEN);
datatable.getDefaultCell().setHorizontalAlignment(Element.ALIGN_CENTER);
//跨行跨列表格
PdfPCell pdfPCell; // 單元格
/*跨列*/
pdfPCell = new PdfPCell(new Phrase("大標題--跨6列", getChineseFont()));
pdfPCell.setHorizontalAlignment(Element.ALIGN_CENTER); //水平居中
pdfPCell.setColspan(6);// 跨3列
datatable.addCell(pdfPCell);
/*跨行*/
pdfPCell = new PdfPCell(new Phrase("標題一跨2行", getChineseFont()));
pdfPCell.setHorizontalAlignment(Element.ALIGN_CENTER); //水平居中
pdfPCell.setVerticalAlignment(Element.ALIGN_MIDDLE); //垂直居中
pdfPCell.setRowspan(2);// 跨2行
datatable.addCell(pdfPCell);
pdfPCell = new PdfPCell(new Phrase("標題二跨2行", getChineseFont()));
pdfPCell.setHorizontalAlignment(Element.ALIGN_CENTER); //水平居中
pdfPCell.setVerticalAlignment(Element.ALIGN_MIDDLE); //垂直居中
pdfPCell.setRowspan(2);// 跨2行
datatable.addCell(pdfPCell);
pdfPCell = new PdfPCell(new Phrase("標題三跨2行", getChineseFont()));
pdfPCell.setHorizontalAlignment(Element.ALIGN_CENTER); //居中
pdfPCell.setVerticalAlignment(Element.ALIGN_MIDDLE); //垂直居中
pdfPCell.setColspan(2);// 跨3列
pdfPCell.setRowspan(1);// 跨2行
datatable.addCell(pdfPCell);
pdfPCell = new PdfPCell(new Phrase("標題四跨2行", getChineseFont()));
pdfPCell.setHorizontalAlignment(Element.ALIGN_CENTER); //居中
pdfPCell.setVerticalAlignment(Element.ALIGN_MIDDLE); //垂直居中
pdfPCell.setRowspan(2);// 跨2行
datatable.addCell(pdfPCell);
pdfPCell = new PdfPCell(new Phrase("標題五跨2行", getChineseFont()));
pdfPCell.setHorizontalAlignment(Element.ALIGN_CENTER); //居中
pdfPCell.setVerticalAlignment(Element.ALIGN_MIDDLE); //垂直居中
pdfPCell.setRowspan(2);// 跨2行
datatable.addCell(pdfPCell);
pdfPCell = new PdfPCell(new Phrase("3子標題", getChineseFont()));
pdfPCell.setHorizontalAlignment(Element.ALIGN_CENTER); //居中
datatable.addCell(pdfPCell);
datatable.addCell(pdfPCell);
// 添加表頭元素
for (int i = 0; i < colNumber; i++) {
datatable.addCell(new Paragraph("中文內容"+i, fontChinese));
}
// 添加表格的內容
for (int i = 0; i < colNumber; i++) {
datatable.addCell(new Paragraph("Content"+i, fontChinese));
}
// 空白表格
for (int i = 0; i < colNumber; i++) {
PdfPCell cell = new PdfPCell(new Paragraph("")); //設置內容為空的表格
cell.setFixedHeight(10);// 單元格高度
datatable.addCell(cell); //添加到表格
}
datatable.setSpacingAfter(40f);// 設置表格下面空白行
document.add(datatable);// 把表格加入文檔
//關閉document
document.close();
獲取默認字體
/**
* 獲取中國字體
* @return
*/
public static Font getChineseFont() {
BaseFont bfChinese; //確認支持中文
Font fontChinese = null; //字體的設置,如顏色,字體,大小等
try {
bfChinese = BaseFont.createFont("STSongStd-Light", "UniGB-UCS2-H", BaseFont.NOT_EMBEDDED);
// fontChinese = new Font(bfChinese, 12, Font.NORMAL);
fontChinese = new Font(bfChinese, 12, Font.NORMAL, BaseColor.BLACK);
} catch (DocumentException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}
return fontChinese;
}
合並PDF
/** 合並pdf文件
* @param files 要合並文件數組(絕對路勁{ "D:\\a1.pdf", "D:\\a2.pdf" })
* @param savepath 合並后新產生的文件絕對路徑如D:\\a.pdf
*/
public static void mergePdfFiles(String[] files, String savepath) throws Exception{
try {
//創建一個與a.pdf相同紙張大小的document
/*PdfReader pdfReader = new PdfReader(files[0]);
Rectangle pageSize = pdfReader.getPageSize(1);
pdfReader.close(); //關閉流,不然會一直占用*/
//創建A4大小的document
Document document = new Document(PageSize.A4);
PdfCopy copy = new PdfCopy(document, new FileOutputStream(savepath));
document.open();
for (int i = 0; i < files.length; i++) { //遍歷文件路徑集合
//一個一個的遍歷現有的PDF
PdfReader reader = new PdfReader(files[i]); //獲取文件
int n = reader.getNumberOfPages(); //獲取文件總頁數
for (int j = 1; j <= n; j++) { //遍歷頁數,放入document
document.newPage(); //新頁
PdfImportedPage page = copy.getImportedPage(reader, j); //從文件中的指定頁碼拿出page
copy.addPage(page); //將page放入PdfCopy
}
reader.close(); //關閉流
}
document.close();
} catch (IOException e) {
e.printStackTrace();
} catch (DocumentException e) {
e.printStackTrace();
}
}
添加水印
/**
* 給pdf文件添加水印
* @param InPdfFile 要加水印的原pdf文件路徑
* @param outPdfFile 加了水印后要輸出的路徑
* @param textMark 水印文字
* @param textWidth 文字橫坐標
* @param textHeight 文字縱坐標
* @throws Exception
*/
public static void addPdfTextMark(String InPdfFile, String outPdfFile, String textMark,int textWidth,
int textHeight) throws Exception {
PdfReader reader = new PdfReader(InPdfFile, "PDF".getBytes());
PdfStamper stamp = new PdfStamper(reader, new FileOutputStream(new File(outPdfFile)));
PdfContentByte under;
BaseFont font = BaseFont.createFont("C:/WINDOWS/Fonts/SIMSUN.TTC,1", "Identity-H", true);// 使用系統字體
int pageSize = reader.getNumberOfPages();// 原pdf文件的總頁數
for(int i = 1; i <= pageSize; i++) {
under = stamp.getUnderContent(i);// 水印在之前文本下
// under = stamp.getOverContent(i);//水印在之前文本上
under.beginText();
under.setColorFill(BaseColor.GRAY);// 文字水印 顏色
under.setFontAndSize(font, 38);// 文字水印 字體及字號
under.setTextMatrix(textWidth, textHeight);// 文字水印 起始位置
under.showTextAligned(Element.ALIGN_CENTER, textMark, textWidth, textHeight, 45);
under.endText();
}
stamp.close();// 關閉
}
/**
* 給pdf文件添加圖片水印
* @param InPdfFile 要加水印的原pdf文件路徑
* @param outPdfFile 加了水印后要輸出的路徑
* @param markImagePath 水印圖片路徑
* @param imgWidth 圖片橫坐標
* @param imgHeight 圖片縱坐標
* @throws Exception
*/
public static void addPdfImgMark(String InPdfFile, String outPdfFile, String markImagePath,int imgWidth, int imgHeight) throws Exception {
PdfReader reader = new PdfReader(InPdfFile, "PDF".getBytes());
PdfStamper stamp = new PdfStamper(reader, new FileOutputStream(new File(outPdfFile)));
PdfContentByte under;
PdfGState gs1 = new PdfGState();
gs1.setFillOpacity(0.3f);// 透明度設置
Image img = Image.getInstance(markImagePath);// 插入圖片水印
img.setAbsolutePosition(imgWidth, imgHeight); // 坐標
img.setRotation(-20);// 旋轉 弧度
img.setRotationDegrees(45);// 旋轉 角度
// img.scaleAbsolute(200,100);//自定義大小
// img.scalePercent(50);//依照比例縮放
int pageSize = reader.getNumberOfPages();// 原pdf文件的總頁數
for(int i = 1; i <= pageSize; i++) {
under = stamp.getUnderContent(i);// 水印在之前文本下
// under = stamp.getOverContent(i);//水印在之前文本上
under.setGState(gs1);// 圖片水印 透明度
under.addImage(img);// 圖片水印
}
stamp.close();// 關閉
// // 刪除不帶水印文件
//File tempfile = new File(InPdfFile);
// if(tempfile.exists()) {
// tempfile.delete();
//}
}