/src/test/java/com/eastrobot/doc/samples/WatermarkPdfTests.java

https://github.com/ekoz/kbase-doc · Java · 120 lines · 85 code · 6 blank · 29 comment · 6 complexity · 99b59259c0ddee4f394f3489f530dbb8 MD5 · raw file

  1. /*
  2. * Power by www.xiaoi.com
  3. */
  4. package com.eastrobot.doc.samples;
  5. import java.io.File;
  6. import java.io.FileInputStream;
  7. import java.io.FileNotFoundException;
  8. import java.io.FileOutputStream;
  9. import java.io.IOException;
  10. import com.eastrobot.doc.util.BaseTests;
  11. import org.junit.Test;
  12. import com.itextpdf.text.DocumentException;
  13. import com.itextpdf.text.Element;
  14. import com.itextpdf.text.Font;
  15. import com.itextpdf.text.Font.FontFamily;
  16. import com.itextpdf.text.Image;
  17. import com.itextpdf.text.Phrase;
  18. import com.itextpdf.text.Rectangle;
  19. import com.itextpdf.text.pdf.ColumnText;
  20. import com.itextpdf.text.pdf.PdfContentByte;
  21. import com.itextpdf.text.pdf.PdfGState;
  22. import com.itextpdf.text.pdf.PdfReader;
  23. import com.itextpdf.text.pdf.PdfStamper;
  24. /**
  25. * @author <a href="mailto:eko.z@outlook.com">eko.zhan</a>
  26. * @date 2018年8月31日 下午1:41:38
  27. * @version 1.0
  28. */
  29. public class WatermarkPdfTests extends BaseTests {
  30. /**
  31. * pdf 用文字加水印,存在问题,如何支持中文
  32. * @author eko.zhan at 2018年9月2日 下午1:44:40
  33. * @throws FileNotFoundException
  34. * @throws IOException
  35. * @throws DocumentException
  36. */
  37. @Test
  38. public void testVisioAsPdfWithText() throws FileNotFoundException, IOException, DocumentException{
  39. File inputFile = new File("E:/ConvertTester/TestFiles/I_am_a_vsdx.vsdx");
  40. File outputFile = new File("E:/ConvertTester/TestFiles/I_am_a_vsdx_libreoffice.pdf");
  41. if (!outputFile.exists()) {
  42. convert(inputFile, outputFile);
  43. }
  44. File destFile = new File("E:/ConvertTester/TestFiles/I_am_a_vsdx_libreoffice_watermark.pdf");
  45. //转换成 pdf 后利用 itext 加水印
  46. PdfReader reader = new PdfReader(new FileInputStream(outputFile));
  47. PdfStamper stamper = new PdfStamper(reader, new FileOutputStream(destFile));
  48. int pageNo = reader.getNumberOfPages();
  49. Font f = new Font(FontFamily.HELVETICA, 28);
  50. Phrase p = new Phrase("Xiaoi Robot", f);
  51. for (int i=1;i<=pageNo;i++) {
  52. PdfContentByte over = stamper.getOverContent(i);
  53. over.saveState();
  54. PdfGState gs1 = new PdfGState();
  55. gs1.setFillOpacity(0.5f);
  56. over.setGState(gs1);
  57. ColumnText.showTextAligned(over, Element.ALIGN_CENTER, p, 297, 450, 0);
  58. over.restoreState();
  59. }
  60. stamper.close();
  61. reader.close();
  62. }
  63. /**
  64. * pdf 用图片加水印
  65. * @author eko.zhan at 2018年9月2日 下午1:44:58
  66. * @throws FileNotFoundException
  67. * @throws IOException
  68. * @throws DocumentException
  69. */
  70. @Test
  71. public void testVisioAsPdfWithImg() throws FileNotFoundException, IOException, DocumentException{
  72. File inputFile = new File("E:/ConvertTester/TestFiles/I_am_a_vsdx.vsdx");
  73. File outputFile = new File("E:/ConvertTester/TestFiles/I_am_a_vsdx_libreoffice.pdf");
  74. if (!outputFile.exists()) {
  75. convert(inputFile, outputFile);
  76. }
  77. File destFile = new File("E:/ConvertTester/TestFiles/I_am_a_vsdx_libreoffice_watermark.pdf");
  78. final String IMG = "D:\\Xiaoi\\logo\\logo.png";
  79. //转换成 pdf 后利用 itext 加水印
  80. PdfReader reader = new PdfReader(new FileInputStream(outputFile));
  81. PdfStamper stamper = new PdfStamper(reader, new FileOutputStream(destFile));
  82. int pageNo = reader.getNumberOfPages();
  83. // text watermark
  84. Font f = new Font(FontFamily.HELVETICA, 30);
  85. Phrase p = new Phrase("Xiaoi Robot Image", f);
  86. // image watermark
  87. Image img = Image.getInstance(IMG);
  88. float w = img.getScaledWidth();
  89. float h = img.getScaledHeight();
  90. // transparency
  91. PdfGState gs1 = new PdfGState();
  92. gs1.setFillOpacity(0.5f);
  93. // properties
  94. PdfContentByte over;
  95. Rectangle pagesize;
  96. float x, y;
  97. // loop over every page
  98. for (int i = 1; i <= pageNo; i++) {
  99. pagesize = reader.getPageSizeWithRotation(i);
  100. x = (pagesize.getLeft() + pagesize.getRight()) / 2;
  101. y = (pagesize.getTop() + pagesize.getBottom()) / 2;
  102. over = stamper.getOverContent(i);
  103. over.saveState();
  104. over.setGState(gs1);
  105. if (i % 2 == 1)
  106. ColumnText.showTextAligned(over, Element.ALIGN_CENTER, p, x, y, 0);
  107. else
  108. over.addImage(img, w, 0, 0, h, x - (w / 2), y - (h / 2));
  109. over.restoreState();
  110. }
  111. stamper.close();
  112. reader.close();
  113. }
  114. }