Bläddra i källkod

添加pdf图片水印方法

M墨鱼—_mo 5 år sedan
förälder
incheckning
5d71ce9a49

+ 6 - 1
picc-admin-server/src/main/java/com/jpsoft/picc/modules/pub/controller/PolicyPdfController.java

@@ -9,6 +9,7 @@ import com.jpsoft.picc.modules.business.service.InsuranceApplicationService;
 import com.jpsoft.picc.modules.business.service.InsurancePolicyMemberService;
 import com.jpsoft.picc.modules.common.config.PdfConfig;
 import com.jpsoft.picc.modules.common.utils.ItextPDFUtil;
+import com.jpsoft.picc.modules.common.utils.Watermark;
 import io.swagger.annotations.Api;
 import io.swagger.annotations.ApiImplicitParam;
 import io.swagger.annotations.ApiImplicitParams;
@@ -23,6 +24,7 @@ import org.springframework.http.ResponseEntity;
 import org.springframework.stereotype.Controller;
 import org.springframework.web.bind.annotation.RequestMapping;
 import org.springframework.web.bind.annotation.RequestMethod;
+
 import java.io.File;
 import java.util.ArrayList;
 import java.util.HashMap;
@@ -87,7 +89,10 @@ public class PolicyPdfController {
 
             String filePath = folder + File.separator + DateTime.now().toString("yyyyMMddHHmmssSSS") + ".pdf";
 
-            ItextPDFUtil.createPdf(insuranceApplication, mapList, list, logoUrl,filePath);
+            ItextPDFUtil.createPdf(insuranceApplication, mapList, list, logoUrl,"C:\\Users\\Administrator\\Desktop\\投保单.pdf");
+
+            //pdf文档添加图片水印
+            Watermark.imageWatermark("C:\\Users\\Administrator\\Desktop\\投保单.pdf",filePath,pdfConfig.getImageWaterMarkUrl());
 
             byte[] buffer = FileUtil.readBytes(filePath);
 

+ 1 - 0
picc-admin-server/src/main/resources/application.yml

@@ -104,4 +104,5 @@ oss:
 
 pdf:
   logoUrl: C:/Users/Administrator/Desktop/picc/logo.png
+  imageWaterMarkUrl: C:/Users/Administrator/Desktop/picc/logo.png
   downloadFilePath: C:/Users/Administrator/Desktop/投保单.pdf

+ 1 - 0
picc-common/src/main/java/com/jpsoft/picc/modules/common/config/PdfConfig.java

@@ -13,5 +13,6 @@ import org.springframework.stereotype.Component;
 @Data
 public class PdfConfig {
     private String logoUrl;
+    private String imageWaterMarkUrl;
 //    private String downloadFilePath;
 }

+ 1 - 1
picc-common/src/main/java/com/jpsoft/picc/modules/common/utils/ItextPDFUtil.java

@@ -114,7 +114,7 @@ public class ItextPDFUtil {
         PdfWriter writer = PdfWriter.getInstance(document, new FileOutputStream(file));
 
 
-        writer.setPageEvent(new Watermark("PICC"));
+    //    writer.setPageEvent(new Watermark("PICC"));
 
 
         // 页眉/页脚

+ 61 - 8
picc-common/src/main/java/com/jpsoft/picc/modules/common/utils/Watermark.java

@@ -1,13 +1,9 @@
 package com.jpsoft.picc.modules.common.utils;
 
-import com.itextpdf.text.Document;
-import com.itextpdf.text.Element;
-import com.itextpdf.text.Font;
-import com.itextpdf.text.Phrase;
-import com.itextpdf.text.pdf.ColumnText;
-import com.itextpdf.text.pdf.GrayColor;
-import com.itextpdf.text.pdf.PdfPageEventHelper;
-import com.itextpdf.text.pdf.PdfWriter;
+import com.itextpdf.text.*;
+import com.itextpdf.text.pdf.*;
+
+import java.io.FileOutputStream;
 
 /**
  * @author 墨鱼_mo
@@ -17,6 +13,8 @@ import com.itextpdf.text.pdf.PdfWriter;
 public class Watermark extends PdfPageEventHelper {
 
 
+
+
     Font FONT = new Font(Font.FontFamily.HELVETICA, 30, Font.BOLD, new GrayColor(0.95f));
     private String waterCont;//水印内容
 
@@ -40,4 +38,59 @@ public class Watermark extends PdfPageEventHelper {
         }
     }
 
+
+
+
+    public static void imageWatermark(String inputPath, String outputPath,String images) throws Exception{
+
+        try{
+            PdfReader reader = new PdfReader(inputPath);
+            PdfStamper stamper = new PdfStamper(reader, new FileOutputStream(outputPath));
+            PdfGState gs1 = new PdfGState();
+            gs1.setFillOpacity(0.1f);
+
+            Image image = Image.getInstance(images);
+            int n = reader.getNumberOfPages();
+            PdfContentByte under;
+            for (int i = 1; i <= n; i++) {
+                PdfContentByte pdfContentByte = stamper.getOverContent(i);
+                // 获得PDF最顶层
+                under = stamper.getOverContent(i);
+                pdfContentByte.setGState(gs1);
+
+                for (int y = 0; y < 8; y++) {
+                    for (int x = 0; x < 6; x++) {
+                        // 水印文字成45度角倾斜
+                        image.setRotation(30);// 旋转 弧度
+                        // 设置旋转角度
+                        image.setRotationDegrees(-45);// 旋转 角度
+                        // 设置等比缩放
+                        under.setColorFill(BaseColor.GRAY);
+                        image.scaleToFit(80,120);
+                        image.setRotation(45);
+                        image.setAbsolutePosition(70 + 140 * x, 125 * y);
+                        pdfContentByte.addImage(image);
+                    }
+                }
+            }
+            stamper.close();
+            reader.close();
+        }catch (Exception e){
+            e.printStackTrace();
+        }
+    }
+
+
+    public static void main(String[] args) {
+        try {
+            Watermark.imageWatermark("C:\\Users\\Administrator\\Desktop\\投保单.pdf","C:\\Users\\Administrator\\Desktop\\test.pdf","C:\\Users\\Administrator\\Desktop\\picc\\logo2.png");
+        } catch (Exception e) {
+            e.printStackTrace();
+        }
+        System.out.println("done");
+
+    }
 }
+
+
+