Browse Source

:new: pdf增加水印

刘嘉伟 4 years ago
parent
commit
c67109b508
2 changed files with 86 additions and 11 deletions
  1. 16 11
      pom.xml
  2. 70 0
      src/test/java/com/gz/WatermarkPdf.java

+ 16 - 11
pom.xml

@@ -149,11 +149,16 @@
             <artifactId>bboss-elasticsearch-spring-boot-starter</artifactId>
             <artifactId>bboss-elasticsearch-spring-boot-starter</artifactId>
             <version>${bboss.elasticsearch.version}</version>
             <version>${bboss.elasticsearch.version}</version>
         </dependency>
         </dependency>
-<!--        <dependency>-->
-<!--            <groupId>org.springframework.boot</groupId>-->
-<!--            <artifactId>spring-boot-devtools</artifactId>-->
-<!--            <optional>true</optional>-->
-<!--        </dependency>-->
+        <!--        <dependency>-->
+        <!--            <groupId>org.springframework.boot</groupId>-->
+        <!--            <artifactId>spring-boot-devtools</artifactId>-->
+        <!--            <optional>true</optional>-->
+        <!--        </dependency>-->
+        <dependency>
+            <groupId>e-iceblue</groupId>
+            <artifactId>spire.pdf.free</artifactId>
+            <version>3.9.0</version>
+        </dependency>
     </dependencies>
     </dependencies>
 
 
     <build>
     <build>
@@ -192,7 +197,8 @@
                     <!--driver-->
                     <!--driver-->
                     <driverClassName>com.mysql.cj.jdbc.Driver</driverClassName>
                     <driverClassName>com.mysql.cj.jdbc.Driver</driverClassName>
                     <!--jdbc url-->
                     <!--jdbc url-->
-                    <jdbcUrl><![CDATA[jdbc:mysql://115.159.38.225:3306/cmsga?autoReconnect=true&useUnicode=true&characterEncoding=utf8&zeroDateTimeBehavior=CONVERT_TO_NULL&useSSL=false&serverTimezone=GMT%2B8]]></jdbcUrl>
+                    <jdbcUrl>
+                        <![CDATA[jdbc:mysql://115.159.38.225:3306/cmsga?autoReconnect=true&useUnicode=true&characterEncoding=utf8&zeroDateTimeBehavior=CONVERT_TO_NULL&useSSL=false&serverTimezone=GMT%2B8]]></jdbcUrl>
                     <!--生成文件类型-->
                     <!--生成文件类型-->
                     <fileType>WORD</fileType>
                     <fileType>WORD</fileType>
                     <!--打开文件输出目录-->
                     <!--打开文件输出目录-->
@@ -200,7 +206,7 @@
                     <!--生成模板-->
                     <!--生成模板-->
                     <produceType>freemarker</produceType>
                     <produceType>freemarker</produceType>
                     <!--文档名称 为空时:将采用[数据库名称-描述-版本号]作为文档名称-->
                     <!--文档名称 为空时:将采用[数据库名称-描述-版本号]作为文档名称-->
-<!--                    <fileName>111</fileName>-->
+                    <!--                    <fileName>111</fileName>-->
                     <!--描述-->
                     <!--描述-->
                     <description>数据库文档生成</description>
                     <description>数据库文档生成</description>
                     <!--版本-->
                     <!--版本-->
@@ -211,9 +217,9 @@
                 <executions>
                 <executions>
                     <execution>
                     <execution>
                         <phase>compile</phase>
                         <phase>compile</phase>
-<!--                        <goals>-->
-<!--                            <goal>run</goal>-->
-<!--                        </goals>-->
+                        <!--                        <goals>-->
+                        <!--                            <goal>run</goal>-->
+                        <!--                        </goals>-->
                     </execution>
                     </execution>
                 </executions>
                 </executions>
             </plugin>
             </plugin>
@@ -221,5 +227,4 @@
     </build>
     </build>
 
 
 
 
-
 </project>
 </project>

+ 70 - 0
src/test/java/com/gz/WatermarkPdf.java

@@ -0,0 +1,70 @@
+package com.gz;
+
+import com.spire.pdf.PdfDocument;
+import com.spire.pdf.PdfPageBase;
+import com.spire.pdf.graphics.*;
+
+import java.awt.*;
+import java.awt.geom.Dimension2D;
+import java.awt.geom.Point2D;
+import java.awt.geom.Rectangle2D;
+
+public class WatermarkPdf {
+
+
+    public static void main(String[] args)
+    {
+        //加载PDF文档
+        PdfDocument pdf = new PdfDocument();
+        pdf.loadFromFile("D:\\Program Files (x86)\\Tencent\\WeChat\\WeChat_DATA\\WeChat Files\\wxid_p52tn1dpq62f22\\FileStorage\\File\\2021-11\\自检情况报告(南苑街道).pdf");
+
+        //调用AddImageWatermark方法给PDF第一页添加图片水印
+//        AddImageWatermark(pdf.getPages().get(0), "H:\\Pictures\\20210615105005_4d1f0.jpg");
+
+        //调用AddTextWatermark方法给PDF第二页添加文字水印
+        AddTextWatermark(pdf.getPages().get(0), "测试水印");
+
+        //保存
+        pdf.saveToFile("H:\\Desktop\\Watermark.pdf");
+        //关闭
+        pdf.close();
+    }
+    /**
+     * @param page
+     * 要添加水印的页面
+     * @param imageFile
+     * 水印图片路径
+     */
+    static void AddImageWatermark(PdfPageBase page, String imageFile)
+    {
+        page.setBackgroundImage(imageFile);
+        Rectangle2D rect = new Rectangle2D.Float();
+        rect.setFrame(page.getClientSize().getWidth()/2 - 100, page.getClientSize().getHeight()/2 - 100, 200, 200);
+        page.setBackgroundRegion(rect);
+    }
+
+    /**
+     * @param page
+     * 要添加水印的页面
+     * @param textWatermark
+     * 水印文字
+     */
+    static void AddTextWatermark(PdfPageBase page, String textWatermark)
+    {
+        Dimension2D dimension2D = new Dimension();
+        dimension2D.setSize(page.getCanvas().getClientSize().getWidth() / 2, page.getCanvas().getClientSize().getHeight() / 3);
+        PdfTilingBrush brush = new PdfTilingBrush(dimension2D);
+        brush.getGraphics().setTransparency(0.3F);
+        brush.getGraphics().save();
+        brush.getGraphics().translateTransform((float) brush.getSize().getWidth() / 2, (float) brush.getSize().getHeight() / 2);
+        brush.getGraphics().rotateTransform(-45);
+        brush.getGraphics().drawString(textWatermark, new PdfTrueTypeFont(new Font("宋体",Font.PLAIN,30),true), PdfBrushes.getRed(), 0, 0, new PdfStringFormat(PdfTextAlignment.Center));
+        brush.getGraphics().restore();
+        brush.getGraphics().setTransparency(1);
+        Rectangle2D loRect = new Rectangle2D.Float();
+        loRect.setFrame(new Point2D.Float(0, 0), page.getCanvas().getClientSize());
+        page.getCanvas().drawRectangle(brush, loRect);
+    }
+
+
+}