lining пре 6 година
родитељ
комит
e661e62f81

+ 41 - 9
src/main/java/com/common/workflow/service/util/Word2Pdf.java

@@ -6,9 +6,7 @@ import com.aspose.words.Shape;
 
 import javax.servlet.http.HttpServletResponse;
 import java.awt.*;
-import java.io.ByteArrayInputStream;
-import java.io.InputStream;
-import java.io.OutputStream;
+import java.io.*;
 import java.net.HttpURLConnection;
 import java.net.URL;
 
@@ -74,7 +72,9 @@ public class Word2Pdf {
             //lo.setEncoding(Encoding.getUTF8());
             Document doc = new Document(inputStream);// 原始excel路径
             removeWatermark(doc);
-            insertWatermarkText(doc, watermark);
+            insertWatermarkText(doc, watermark, 0, 0);
+            insertWatermarkText(doc, watermark, 200, 0);
+            insertWatermarkText(doc, watermark, 400, 0);
 
             /*PdfSaveOptions pdfSaveOptions = new PdfSaveOptions(SaveFormat.PDF);
             pdfSaveOptions.setOnePagePerSheet(true);
@@ -93,6 +93,36 @@ public class Word2Pdf {
         }
     }
 
+    public static void wordWatermark(String watermark, OutputStream outputStream, HttpServletResponse response) {
+        try {
+//            URL url = new URL(Address);
+//            HttpURLConnection conn = (HttpURLConnection)url.openConnection();
+//            //得到输入流
+//            InputStream inputStream = conn.getInputStream();
+//
+//            //TxtLoadOptions lo = new TxtLoadOptions();
+//            //lo.setEncoding(Encoding.getUTF8());
+            ByteArrayOutputStream   baos=new   ByteArrayOutputStream();
+            baos=(ByteArrayOutputStream) outputStream;
+            ByteArrayInputStream swapStream = new ByteArrayInputStream(baos.toByteArray());
+
+//            BufferedOutputStream bos = new BufferedOutputStream(outputStream);
+//            ByteArrayInputStream swapStream = new ByteArrayInputStream(bos..getBytes());
+            Document doc = new Document(swapStream);// 原始excel路径
+            removeWatermark(doc);
+            insertWatermarkText(doc, watermark, 0, 0);
+            insertWatermarkText(doc, watermark, 200, 0);
+            insertWatermarkText(doc, watermark, 400, 0);
+            OutputStream output = response.getOutputStream();
+//            output.write(swapStream);
+//            output.flush();
+            doc.save(output, SaveFormat.DOCX);
+//            inputStream.close();
+        }catch (Exception e) {
+            e.printStackTrace();
+        }
+    }
+
     /**
      *
      * Inserts a watermark into a document.
@@ -101,7 +131,7 @@ public class Word2Pdf {
      * @param watermarkText Text of the watermark.
      *
      */
-    private static void insertWatermarkText(Document doc, String watermarkText) throws Exception {
+    private static void insertWatermarkText(Document doc, String watermarkText, double top, double left) throws Exception {
         // Create a watermark shape. This will be a WordArt shape.
         // You are free to try other shape types as watermarks.
         Shape watermark = new Shape(doc, ShapeType.TEXT_PLAIN_TEXT);
@@ -116,11 +146,13 @@ public class Word2Pdf {
         watermark.getFill().setColor(Color.lightGray); // Try LightGray to get more Word-style watermark
         watermark.setStrokeColor(Color.lightGray); // Try LightGray to get more Word-style watermark
         // Place the watermark in the page center.
-        watermark.setRelativeHorizontalPosition(RelativeHorizontalPosition.PAGE);
-        watermark.setRelativeVerticalPosition(RelativeVerticalPosition.PAGE);
+//        watermark.setRelativeHorizontalPosition(RelativeHorizontalPosition.PAGE);
+//        watermark.setRelativeVerticalPosition(RelativeVerticalPosition.PAGE);
         watermark.setWrapType(WrapType.NONE);
-        watermark.setVerticalAlignment(VerticalAlignment.CENTER);
-        watermark.setHorizontalAlignment(HorizontalAlignment.CENTER);
+//        watermark.setVerticalAlignment(VerticalAlignment.CENTER);
+//        watermark.setHorizontalAlignment(HorizontalAlignment.CENTER);
+        watermark.setTop(top);
+        watermark.setLeft(left);
         // Create a new paragraph and append the watermark to this paragraph.
         Paragraph watermarkPara = new Paragraph(doc);
         watermarkPara.appendChild(watermark);

+ 3 - 0
src/main/java/com/common/workflow/service/util/WordTemplate.java

@@ -3,6 +3,7 @@ package com.common.workflow.service.util;
 import com.deepoove.poi.XWPFTemplate;
 import com.deepoove.poi.config.Configure;
 
+import javax.servlet.http.HttpServletResponse;
 import java.io.File;
 import java.lang.reflect.Field;
 import java.util.ArrayList;
@@ -20,7 +21,9 @@ public class WordTemplate {
      * @throws Exception
      */
     public XWPFTemplate exportWordTemplate (Map<String, Object> datas, String templateUrl, String fileName) throws Exception {
+
         String fullFileName = FileUtils.getExcelTemplatePath() + "/" + fileName;
+//        Word2Pdf.wordWatermark("卡尔西法", fullFileName);
         File file = new File(fullFileName);
         if (file.exists()) {
             file.delete(); //清除历史文件

+ 30 - 0
src/main/java/com/common/workflow/web/rest/WordResource.java

@@ -1,5 +1,6 @@
 package com.common.workflow.web.rest;
 
+import com.common.workflow.service.util.Word2Pdf;
 import com.common.workflow.service.util.WordTemplate;
 import com.common.workflow.web.rest.vm.WordTemplateVM;
 import com.deepoove.poi.XWPFTemplate;
@@ -12,7 +13,11 @@ import org.springframework.web.bind.annotation.RestController;
 
 import javax.servlet.http.HttpServletResponse;
 import javax.validation.Valid;
+import java.io.BufferedOutputStream;
+import java.io.ByteArrayInputStream;
+import java.io.ByteArrayOutputStream;
 import java.io.OutputStream;
+import java.nio.Buffer;
 
 
 /**
@@ -44,4 +49,29 @@ public class WordResource {
         template.close();
     }
 
+
+    @PostMapping("/fill-word-watermark")
+    public void fillWordTemplateWatermark(@Valid @RequestBody WordTemplateVM wordTemplateVM, HttpServletResponse response) throws Exception {
+        response.reset();
+        response.setContentType("multipart/form-data;charset=utf-8");
+        response.setHeader("content-disposition", "attachment;filename=" + wordTemplateVM.getFileName());
+        response.setHeader("Pragma","No-cache");
+        response.setHeader ( "Cache-Control", "no-store");
+        response.setHeader("Access-Control-Allow-Origin", "*");
+        response.setHeader("Access-Control-Allow-Headers", "*");
+        OutputStream outputStream = response.getOutputStream();
+
+        OutputStream tmpOutput = new ByteArrayOutputStream(20*1024*1024);
+        WordTemplate wordTemplate = new WordTemplate();
+        XWPFTemplate template = wordTemplate.exportWordTemplate(wordTemplateVM.getDatas(), wordTemplateVM.getTemplateUrl(), wordTemplateVM.getFileName());
+
+        template.write(tmpOutput);
+        Word2Pdf.wordWatermark(wordTemplateVM.getWatermark(),tmpOutput, response);
+
+        outputStream.flush();
+        outputStream.close();
+        template.close();
+    }
+
+
 }

+ 10 - 1
src/main/java/com/common/workflow/web/rest/vm/WordTemplateVM.java

@@ -11,7 +11,7 @@ public class WordTemplateVM {
     private Map<String, Object> datas = new HashMap<>();
     private String templateUrl;
     private String fileName;
-
+    private String watermark;
 
     public Map<String, Object> getDatas() {
         return datas;
@@ -36,4 +36,13 @@ public class WordTemplateVM {
     public void setFileName(String fileName) {
         this.fileName = fileName;
     }
+
+    public String getWatermark() {
+        return watermark;
+    }
+
+    public void setWatermark(String watermark) {
+        this.watermark = watermark;
+    }
+
 }