/**
* pdf加水印
*
* @param decode 文件byte数组
* @param fontPath 字体样式
* @param fontSize 字体大小
* @param color 颜色rgb
* @param waterMark 水印内容
* @param response 响应流
*/
public static void pdfWaterMark(byte[] decode, InputStream fontPath, Integer fontSize, int[] color, String waterMark, HttpServletResponse response) {
try {
PDDocument document = PDDocument.load(decode);
//加载水印字体
PDFont font = PDType0Font.load(document, fontPath, true);
for (PDPage page : document.getPages()) {
PDPageContentStream stream = new PDPageContentStream(document, page, PDPageContentStream.AppendMode.APPEND, true, true);
PDExtendedGraphicsState r = new PDExtendedGraphicsState();
//设置透明度
r.setNonStrokingAlphaConstant(0.4f);
r.setAlphaSourceFlag(true);
stream.setGraphicsStateParameters(r);
//设置水印字体颜色
stream.setNonStrokingColor(color[0], color[1], color[2]);
stream.beginText();
//字体大小
stream.setFont(font, fontSize);
stream.newLineAtOffset(0, -15);
//获取PDF页面大小
float pageHeight = page.getMediaBox().getHeight();
float pageWidth = page.getMediaBox().getWidth();
//根据纸张大小添加水印,45度倾斜
stream.setTextMatrix(Matrix.getRotateInstance(0.6, pageWidth / 5, pageHeight / 3));
stream.showText(waterMark);
//结束渲染,关闭流
stream.endText();
stream.restoreGraphicsState();
stream.close();
}
document.save(response.getOutputStream());
document.close();
} catch (IOException e) {
throw new RuntimeException(e);
}
}
代码中用的是 org.apache.pdfbox 包中的类。