WatermarkPdf.java 2.3 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061
  1. package com.gz;
  2. import org.apache.pdfbox.pdmodel.PDDocument;
  3. import org.apache.pdfbox.pdmodel.PDPage;
  4. import org.apache.pdfbox.pdmodel.PDPageContentStream;
  5. import org.apache.pdfbox.pdmodel.PDResources;
  6. import org.apache.pdfbox.pdmodel.font.PDFont;
  7. import org.apache.pdfbox.pdmodel.font.PDType0Font;
  8. import org.apache.pdfbox.pdmodel.graphics.state.PDExtendedGraphicsState;
  9. import org.apache.pdfbox.util.Matrix;
  10. import java.io.File;
  11. import java.io.FileInputStream;
  12. import java.io.IOException;
  13. public class WatermarkPdf {
  14. public static void main(String[] args) throws IOException {
  15. File pdfFile = new File("F:\\错误\\5179-WS2020-001-0000-1145.pdf");
  16. //打开pdf文件
  17. PDDocument pdf = PDDocument.load(pdfFile);
  18. pdf.setAllSecurityToBeRemoved(true);
  19. for (PDPage page : pdf.getPages()) {
  20. PDPageContentStream cs = new PDPageContentStream(pdf, page, PDPageContentStream.AppendMode.APPEND, true, true);
  21. String ts = "刘长兰";
  22. //引入字体文件 解决中文汉字乱码问题
  23. PDFont font = PDType0Font.load(pdf, new FileInputStream("C:\\Windows\\Fonts\\STLITI.TTF"), true);
  24. float fontSize = 26;
  25. PDResources resources = page.getResources();
  26. PDExtendedGraphicsState r0 = new PDExtendedGraphicsState();
  27. // 水印透明度
  28. r0.setNonStrokingAlphaConstant(0.2f);
  29. r0.setAlphaSourceFlag(true);
  30. cs.setGraphicsStateParameters(r0);
  31. //水印颜色
  32. cs.setNonStrokingColor(153, 153, 153);
  33. cs.beginText();
  34. cs.setFont(font, fontSize);
  35. //根据水印文字大小长度计算横向坐标需要渲染几次水印
  36. float h = ts.length() * fontSize;
  37. for (int i = 0; i <= 5; i++) {
  38. // 获取旋转实例
  39. cs.setTextMatrix(Matrix.getRotateInstance(-150, i * 220, 0));
  40. cs.showText(ts);
  41. for (int j = 0; j < 10; j++) {
  42. cs.setTextMatrix(Matrix.getRotateInstance(-150, i * 220, j * h * 2));
  43. cs.showText(ts);
  44. }
  45. }
  46. cs.endText();
  47. cs.restoreGraphicsState();
  48. cs.close();
  49. pdf.save("F:\\Watermark.pdf");
  50. }
  51. }
  52. }