编辑
2023-11-07
学习记录
00
请注意,本文编写于 512 天前,最后修改于 512 天前,其中某些信息可能已经过时。

目录

前提
依赖
代码

前提

由于业务需要得为从ftp读取到的pdf加上水印,采用itextpdf依赖的功能

依赖

xml
<dependency> <groupId>com.itextpdf</groupId> <artifactId>itextpdf</artifactId> <version>5.5.11</version> </dependency> <!-- PDF文件字体 防止中文乱码 --> <dependency> <groupId>com.itextpdf</groupId> <artifactId>itext-asian</artifactId> <version>5.2.0</version> </dependency>

代码

我是写在pdf工具类中

java
public static byte[] PDFAddWatermark(byte[] pdfbyte, String waterMarkName) throws Exception { // 每页水印行数 int row = 7; // 每行水印个数 int col = 3; // 旋转角度 float rotation = 30f; byte[] decodeBuffer = pdfbyte; // 读取PDF PdfReader reader = new PdfReader(decodeBuffer); //创建字节数组输出流 ByteArrayOutputStream ous =new ByteArrayOutputStream(); // 创建字节缓冲输出流 BufferedOutputStream bos = new BufferedOutputStream(ous); // 输出的PDF文件内容 PdfStamper stamper = new PdfStamper(reader, bos); BaseFont base = BaseFont.createFont("STSong-Light", "UniGB-UCS2-H", BaseFont.EMBEDDED); PdfGState gs = new PdfGState(); gs.setFillOpacity(0.2f);//改透明度 gs.setStrokeOpacity(0.4f);//设置笔触字体不透明度 PdfContentByte content; int total = reader.getNumberOfPages();//pdf文件页数 for (int i=0; i<total; i++) { // 在内容上方加水印 content = stamper.getOverContent(i+1); // 在内容下方加水印 // content = stamper.getUnderContent(i+1); //开始写入 content.beginText(); content.setGState(gs); //字体大小 content.setFontAndSize(base, 20); //每页7行,一行3个 for (int j=0; j<col; j++) { for (int k=0; k<row; k++) { float x = reader.getPageSize(i+1).getWidth() / col * j + 90; float y = reader.getPageSize(i+1).getHeight() / row * k; //showTextAligned 方法的参数(文字对齐方式,位置内容,输出水印X轴位置,Y轴位置,旋转角度) content.showTextAligned(Element.ALIGN_CENTER, waterMarkName, x, y, rotation); } } // 添加水印文字 content.endText(); } stamper.close(); //添加水印后pdf的base64 byte[] bytes = ous.toByteArray(); ous.close(); bos.close(); reader.close(); return bytes; }

本文作者:Weee

本文链接:

版权声明:本博客所有文章除特别声明外,均采用 BY-NC-SA 许可协议。转载请注明出处!