由于业务需要得为从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 许可协议。转载请注明出处!