给PDF中的每一页都加上水印
需导入的jar包:itext-pdfa-5.5.6.jar、itext-xtra-5.5.6.jar、itext-5.5.6.jar、itext-asian.jar
思路:
1. 先生成不带水印的PDF,假设名为a.pdf
2. 遍历a.pdf,加上水印图片
3. 保存为最终b.pdf
/**
* 插入水印
* @param writer PDF流
* @param tmpName 旧名称
* @param finalName 新名称
* @param pdfAddrss 生成pdf报告地址
* @param imageLocalAddr 水印图片当地地址
* @throws IOException
* @throws DocumentException
*/
public static void insertWaterImage(PdfWriter writer, String tmpName, String finalName, String pdfAddrss, String imageLocalAddr) throws IOException, DocumentException {
//假如PDF有4页,endPDFPage值为5
int endPdfPage = writer.getPageNumber();
PdfReader reader = null;
//pdf名称
String pdfName = finalName;
reader = new PdfReader(pdfAddrss + "\\" + tmpName);
String root = pdfAddrss;
if (!new File(root).exists())
new File(root).mkdirs();
File deskFile = new File(root, pdfName);
PdfStamper stamp = new PdfStamper(reader, new FileOutputStream(deskFile));
for (int i = 1; i < endPdfPage; i++) {
PdfContentByte under = stamp.getUnderContent(i);
//插入另一组水印
Image img = Image.getInstance(imageLocalAddr + "watermark1.png");
//设置图片缩放比例
img.scalePercent(78);
//设置图片绝对宽度
img.scaleAbsoluteWidth(596);
//设置图片绝对位置
img.setAbsolutePosition(0, 0);
under.addImage(img);
}
stamp.close();
reader.close();
//删除生成旧的PDF
File file = new File(pdfAddrss + "\\" + tmpName);
if (file.exists()) {
System.out.println("是否删掉旧的" + tmpName + ".pdf文件: " + file.delete());
}
}