public ByteArrayOutputStream markPdf(ByteArrayInputStream inputStream, String waterMarkContent) {
ByteArrayOutputStream outputStream = new ByteArrayOutputStream();
try {
// 水印的高和宽
int waterMarkHeight = 30;
int watermarkWeight = 60;
// 水印间隔距离
int waterMarkInterval = 100;
// 读取PDF文件流
PdfReader pdfReader = new PdfReader(inputStream);
PdfDocument pdfDocument = new PdfDocument();
// 创建PDF文件的模板,可以对模板的内容修改,重新生成新PDF文件
PdfStamper pdfStamper = new PdfStamper(pdfReader, outputStream);
//添加PDF自定义属性
HashMap<String, String> info = pdfReader.getInfo();
if (StrUtil.isEmpty(info.get("Title"))) {
info.put("Title", waterMarkContent);
}
pdfStamper.setMoreInfo(info);
// 设置水印字体
BaseFont baseFont = BaseFont.createFont("STSong-Light", "UniGB-UCS2-H", BaseFont.EMBEDDED);
// BaseFont baseFont = BaseFont.createFont(“STSong-Light”, “UniGB-UCS2-H”, BaseFont.EMBEDDED);
// 设置PDF内容的Graphic State 图形状态
PdfGState pdfGraPhicState = new PdfGState();
// 填充透明度
pdfGraPhicState.setFillOpacity(0.1f);
// 轮廓不透明度
pdfGraPhicState.setStrokeOpacity(0.1f);
// PDF页数
int pdfPageNum = pdfReader.getNumberOfPages() + 1;
// PDF文件内容字节
PdfContentByte pdfContent;
// PDF页面矩形区域
Rectangle pageRectangle;
for (int i = 1; i < pdfPageNum; i++) {
// 获取当前页面矩形区域
pageRectangle = pdfReader.getPageSizeWithRotation(i);
// 获取当前页内容,getOverContent表示之后会在页面内容的上方加水印
pdfContent = pdfStamper.getOverContent(i);
// 获取当前页内容,getOverContent表示之后会在页面内容的下方加水印
// pdfContent = pdfStamper.getUnderContent(i);
pdfContent.saveState();
// 设置水印透明度
pdfContent.setGState(pdfGraPhicState);
// 开启写入文本
pdfContent.beginText();
// 设置字体
pdfContent.setFontAndSize(baseFont, 20);
// 在高度和宽度维度每隔waterMarkInterval距离添加一个水印
for (int height = waterMarkHeight; height < pageRectangle.getHeight(); height = height + waterMarkInterval) {
for (int width = watermarkWeight; width < pageRectangle.getWidth() + watermarkWeight;
width = width + waterMarkInterval) {
// 添加水印文字并旋转30度角
// pdfContent.showTextAligned(Element.ALIGN_LEFT, waterMarkContent, width - watermarkWeight,
// height - waterMarkHeight, 30);
// URL url=new URL(“http://xxxx.com/1.png”);
Image image = Image.getInstance("C:\\Users\\le\\Desktop\\1111\\1.png");
image.setAbsolutePosition(width - watermarkWeight, height - waterMarkHeight);
// 设置旋转角度
image.setRotationDegrees(45);
pdfContent.addImage(image);
}
}
// 停止写入文本
pdfContent.endText();
}
pdfStamper.close();
pdfReader.close();
} catch (Exception e) {
e.printStackTrace();
}
return outputStream;
}
解决PDF添加水印报错iText: Font ‘STSong-Light’ with ‘UniGB-UCS2-H’ is not recognized
添加依赖
com.itextpdf itext-asian 5.2.0