Itext5常用操作
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();
//}
}
![微信公众号二维码](https://images.cnblogs.com/cnblogs_com/aeolian/1679458/o_wechat_gzh_qrcode.jpg)