| 12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061 |
- package com.gz;
- import org.apache.pdfbox.pdmodel.PDDocument;
- import org.apache.pdfbox.pdmodel.PDPage;
- import org.apache.pdfbox.pdmodel.PDPageContentStream;
- import org.apache.pdfbox.pdmodel.PDResources;
- import org.apache.pdfbox.pdmodel.font.PDFont;
- import org.apache.pdfbox.pdmodel.font.PDType0Font;
- import org.apache.pdfbox.pdmodel.graphics.state.PDExtendedGraphicsState;
- import org.apache.pdfbox.util.Matrix;
- import java.io.File;
- import java.io.FileInputStream;
- import java.io.IOException;
- public class WatermarkPdf {
- public static void main(String[] args) throws IOException {
- File pdfFile = new File("F:\\错误\\5179-WS2020-001-0000-1145.pdf");
- //打开pdf文件
- PDDocument pdf = PDDocument.load(pdfFile);
- pdf.setAllSecurityToBeRemoved(true);
- for (PDPage page : pdf.getPages()) {
- PDPageContentStream cs = new PDPageContentStream(pdf, page, PDPageContentStream.AppendMode.APPEND, true, true);
- String ts = "刘长兰";
- //引入字体文件 解决中文汉字乱码问题
- PDFont font = PDType0Font.load(pdf, new FileInputStream("C:\\Windows\\Fonts\\STLITI.TTF"), true);
- float fontSize = 26;
- PDResources resources = page.getResources();
- PDExtendedGraphicsState r0 = new PDExtendedGraphicsState();
- // 水印透明度
- r0.setNonStrokingAlphaConstant(0.2f);
- r0.setAlphaSourceFlag(true);
- cs.setGraphicsStateParameters(r0);
- //水印颜色
- cs.setNonStrokingColor(153, 153, 153);
- cs.beginText();
- cs.setFont(font, fontSize);
- //根据水印文字大小长度计算横向坐标需要渲染几次水印
- float h = ts.length() * fontSize;
- for (int i = 0; i <= 5; i++) {
- // 获取旋转实例
- cs.setTextMatrix(Matrix.getRotateInstance(-150, i * 220, 0));
- cs.showText(ts);
- for (int j = 0; j < 10; j++) {
- cs.setTextMatrix(Matrix.getRotateInstance(-150, i * 220, j * h * 2));
- cs.showText(ts);
- }
- }
- cs.endText();
- cs.restoreGraphicsState();
- cs.close();
- pdf.save("F:\\Watermark.pdf");
- }
- }
- }
|