浏览代码

针对水印可能下载失败,做预处理。

tomatozq 5 年之前
父节点
当前提交
01db9e14c3

+ 27 - 5
picc-admin-server/src/main/java/com/jpsoft/picc/modules/base/controller/AttachmentController.java

@@ -38,6 +38,7 @@ import javax.servlet.http.HttpServletRequest;
 import javax.servlet.http.HttpServletResponse;
 import java.io.File;
 import java.io.OutputStream;
+import java.net.URLEncoder;
 import java.util.ArrayList;
 import java.util.HashMap;
 import java.util.List;
@@ -153,18 +154,39 @@ public class AttachmentController {
             //将编码加到http头信息中
             headers.setContentDispositionFormData("attachment", downloadFileName);
 
-            String folder=System.getProperty("java.io.tmpdir");
+            String folderPath = pdfConfig.getOutputPath();
 
-            String filePath = folder + File.separator + DateTime.now().toString("yyyyMMddHHmmssSSS") + ".pdf";
+            File folder = new File(folderPath);
+
+            if (!folder.exists()){
+                folder.mkdirs();
+            }
+
+            String filePath = folderPath + File.separator + DateTime.now().toString("yyyyMMddHHmmssSSS") + ".pdf";
+
+            log.warn("生成PDF文档:" + filePath);
 
             ItextPDFUtil.createPdf(insuranceApplication, mapList, list, logoUrl,filePath);
 
-            String outputPath = folder + File.separator + DateTime.now().toString("yyyyMMddHHmmssSSS") + "-watermark.pdf";
+            String watermarkFilePath = folderPath + File.separator + DateTime.now().toString("yyyyMMddHHmmssSSS") + "-watermark.pdf";
 
             //pdf文档添加图片水印
             if (StringUtils.isNotEmpty(company.getCompanyStampFile())) {
-                Watermark.imageWatermark(filePath, outputPath, company.getCompanyStampFile());
-                filePath = outputPath;
+                String ext = company.getCompanyStampFile().substring(company.getCompanyStampFile().lastIndexOf("."));
+                String watermarkLogoPath =  folderPath + File.separator + DateTime.now().toString("yyyyMMddHHmmssSSS") + ext;
+
+                //下载水印图片
+                boolean success = OSSUtil.download(company.getCompanyStampFile(),watermarkLogoPath);
+
+                if(success) {
+                    try {
+                        Watermark.imageWatermark(filePath, watermarkFilePath, watermarkLogoPath);
+                        filePath = watermarkFilePath;
+                    }
+                    catch (Exception e){
+                        log.error(e.getMessage(),e);
+                    }
+                }
             }
 
             byte[] buffer = FileUtil.readBytes(filePath);

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

@@ -14,6 +14,7 @@ logger:
 
 pdf:
   logoUrl: C:\\picc\\logo.png
+  outputPath: C:\\picc\\pdf
 
 weixin:
   appId: wxc0ddd6a415c535d9

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

@@ -19,6 +19,7 @@ springfox:
 
 pdf:
   logoUrl: C:\\picc\\logo.png
+  outputPath: C:\\picc\\pdf
 
 weixin:
   appId: wxc0ddd6a415c535d9

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

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

+ 32 - 4
picc-common/src/main/java/com/jpsoft/picc/modules/common/utils/OSSUtil.java

@@ -13,10 +13,7 @@ import lombok.extern.slf4j.Slf4j;
 import net.sf.jsqlparser.expression.DateTimeLiteralExpression;
 import org.apache.commons.lang3.StringUtils;
 
-import java.io.BufferedInputStream;
-import java.io.IOException;
-import java.io.InputStream;
-import java.io.OutputStream;
+import java.io.*;
 import java.net.URL;
 import java.net.URLConnection;
 import java.util.*;
@@ -64,6 +61,37 @@ public class OSSUtil {
         return ossConfig.getUrlPrefix() + "/" + retFileUrl;
     }
 
+    public static boolean download(String fileUrl,String filePath){
+        boolean result;
+
+        try {
+            FileOutputStream output = new FileOutputStream(filePath);
+
+            URL url = new URL(fileUrl);
+            URLConnection conn = url.openConnection();
+            InputStream input = conn.getInputStream();
+
+            byte[] buffs = new byte[1024 * 10];
+
+            BufferedInputStream bis = new BufferedInputStream(input, 1024 * 10);
+
+            int read;
+            while ((read = bis.read(buffs, 0, 1024 * 10)) != -1) {
+                output.write(buffs, 0, read);
+            }
+
+            input.close();
+            output.close();
+
+            result = true;
+        } catch (Exception e) {
+            result = false;
+            log.error(e.getMessage(),e);
+        }
+
+        return result;
+    }
+
     public static void batchDownload(List<Map<String,String>> fileList, OutputStream output){
         try{
             ZipOutputStream zos = new ZipOutputStream(output);

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

@@ -2,6 +2,7 @@ package com.jpsoft.picc.modules.common.utils;
 
 import com.itextpdf.text.*;
 import com.itextpdf.text.pdf.*;
+import lombok.extern.slf4j.Slf4j;
 
 import java.io.FileOutputStream;
 
@@ -10,11 +11,8 @@ import java.io.FileOutputStream;
  * @date 2020-2-5 13:30
  * 水印
  */
+@Slf4j
 public class Watermark extends PdfPageEventHelper {
-
-
-
-
     Font FONT = new Font(Font.FontFamily.HELVETICA, 30, Font.BOLD, new GrayColor(0.95f));
     private String waterCont;//水印内容
 
@@ -38,9 +36,6 @@ public class Watermark extends PdfPageEventHelper {
         }
     }
 
-
-
-
     public static void imageWatermark(String inputPath, String outputPath,String images) throws Exception{
 
         try{
@@ -86,7 +81,7 @@ public class Watermark extends PdfPageEventHelper {
             stamper.close();
             reader.close();
         }catch (Exception e){
-            e.printStackTrace();
+            log.error(e.getMessage(),e);
         }
     }