Bläddra i källkod

word template 2

yuedefeng 6 år sedan
förälder
incheckning
1baeccb351

+ 1 - 0
src/main/java/com/common/workflow/config/SecurityConfiguration.java

@@ -99,6 +99,7 @@ public class SecurityConfiguration extends WebSecurityConfigurerAdapter {
             .authorizeRequests()
             .antMatchers("/api/acti/**").permitAll()
             .antMatchers("/api/apose/**").permitAll()
+            .antMatchers("/api/word/**").permitAll()
             .antMatchers("/api/register").permitAll()
             .antMatchers("/api/activate").permitAll()
             .antMatchers("/api/authenticate").permitAll()

+ 178 - 0
src/main/java/com/common/workflow/service/util/FileUtils.java

@@ -0,0 +1,178 @@
+/*
+ * FileUtils。java
+ *
+ * Created Date: 2015年1月8日
+ *
+ * Copyright (c)  Centling Technologies Co., Ltd.
+ *
+ * This software is the confidential and proprietary information of
+ *  Centling Technologies Co., Ltd. ("Confidential Information"). You shall not
+ * disclose such Confidential Information and shall use it only in accordance
+ * with the terms of the license agreement you entered into with
+ * Centling Technologies Co., Ltd.
+ */
+
+package com.common.workflow.service.util;
+
+import java.io.*;
+import java.net.HttpURLConnection;
+import java.net.URL;
+
+/**
+ * @author ted.ma
+ * @version  <br>
+ * <p>文件上传解析工具类</p>
+ */
+
+public class FileUtils {
+	/**
+     * get postfix of the path
+     * @param path
+     * @return
+     */
+    public static String getPostfix(String path) {
+        if (path == null || "".equals(path.trim())) {
+            return "";
+        }
+        if (path.contains(".")) {
+            return path.substring(path.lastIndexOf(".") + 1, path.length());
+        }
+        return "";
+    }
+
+    /**
+     * 从网络Url中下载文件
+     *
+     * @param urlStr
+     * @param fileName
+     * @param savePath
+     * @throws IOException
+     */
+    public static String downLoadFromUrl(String urlStr, String fileName, String savePath) {
+        try {
+
+            URL url = new URL(urlStr);
+            HttpURLConnection conn = (HttpURLConnection) url.openConnection();
+            // 设置超时间为3秒
+            conn.setConnectTimeout(3 * 1000);
+            // 防止屏蔽程序抓取而返回403错误
+            conn.setRequestProperty("User-Agent", "Mozilla/4.0 (compatible; MSIE 5.0; Windows NT; DigExt)");
+
+            // 得到输入流
+            InputStream inputStream = conn.getInputStream();
+            // 获取自己数组
+            byte[] getData = readInputStream(inputStream);
+
+            // 文件保存位置
+            File saveDir = new File(savePath);
+            if (!saveDir.exists()) {
+                saveDir.mkdir();
+            }
+            File file = new File(saveDir + File.separator + fileName);
+            FileOutputStream fos = new FileOutputStream(file);
+            fos.write(getData);
+            if (fos != null) {
+                fos.close();
+            }
+            if (inputStream != null) {
+                inputStream.close();
+            }
+            // System.out.println("info:"+url+" download success");
+            return saveDir + File.separator + fileName;
+        } catch (Exception e) {
+            e.printStackTrace();
+        }
+        return "";
+
+    }
+
+    /**
+     * 从输入流中获取字节数组
+     *
+     * @param inputStream
+     * @return
+     * @throws IOException
+     */
+    public static byte[] readInputStream(InputStream inputStream) throws IOException {
+        byte[] buffer = new byte[1024];
+        int len = 0;
+        ByteArrayOutputStream bos = new ByteArrayOutputStream();
+        while ((len = inputStream.read(buffer)) != -1) {
+            bos.write(buffer, 0, len);
+        }
+        bos.close();
+        return bos.toByteArray();
+    }
+
+    public static String saveFileToServerPath(InputStream inputStream, String fileName, String savePath) {
+        try {
+            byte[] getData = readInputStream(inputStream);
+
+            // 文件保存位置
+            File saveDir = new File(savePath);
+            if (!saveDir.exists()) {
+                saveDir.mkdir();
+            }
+            File file = new File(saveDir + File.separator + fileName);
+            FileOutputStream fos = new FileOutputStream(file);
+            fos.write(getData);
+            if (fos != null) {
+                fos.close();
+            }
+            if (inputStream != null) {
+                inputStream.close();
+            }
+            // System.out.println("info:"+url+" download success");
+            return saveDir + File.separator + fileName;
+        } catch (Exception e) {
+            e.printStackTrace();
+        }
+        return "";
+
+    }
+
+    public static String saveFileToServerPath(byte[] getData, String fileName, String savePath) {
+        try {
+            // 文件保存位置
+            File saveDir = new File(savePath);
+            if (!saveDir.exists()) {
+                saveDir.mkdir();
+            }
+            File file = new File(saveDir + File.separator + fileName);
+            FileOutputStream fos = new FileOutputStream(file);
+            fos.write(getData);
+            if (fos != null) {
+                fos.close();
+            }
+            // System.out.println("info:"+url+" download success");
+            return saveDir + File.separator + fileName;
+        } catch (Exception e) {
+            e.printStackTrace();
+        }
+        return "";
+
+    }
+
+    public static String getExcelTemplatePath() {
+        String pathName = "";
+        String os = System.getProperty("os.name");
+        if (os != null && os.startsWith("Windows")) {
+            pathName = "D:/excel_templates";
+        } else {
+            pathName = "/tmp/excel_templates";
+        }
+        return pathName;
+    }
+
+    public static String getPdfTemplatePath() {
+        String pathName = "";
+        String os = System.getProperty("os.name");
+        if (os != null && os.startsWith("Windows")) {
+            pathName = "C:/pdf_templates";
+        } else {
+            pathName = "/tmp/pdf_templates";
+        }
+        return pathName;
+    }
+
+}

+ 10 - 2
src/main/java/com/common/workflow/service/util/WordTemplate.java

@@ -2,6 +2,7 @@ package com.common.workflow.service.util;
 
 import com.deepoove.poi.XWPFTemplate;
 
+import java.io.File;
 import java.lang.reflect.Field;
 import java.util.HashMap;
 import java.util.Map;
@@ -15,8 +16,15 @@ public class WordTemplate {
      * @return
      * @throws Exception
      */
-    public XWPFTemplate exportWordTemplate (Map<String, Object> datas, String templateUrl) throws Exception {
-        XWPFTemplate template = XWPFTemplate.compile(templateUrl).render(datas);
+    public XWPFTemplate exportWordTemplate (Map<String, Object> datas, String templateUrl, String fileName) throws Exception {
+        String fullFileName = FileUtils.getExcelTemplatePath() + "/" + fileName;
+        File file = new File(fullFileName);
+        if (file.exists()) {
+            file.delete(); //清除历史文件
+        }
+        fullFileName = FileUtils.downLoadFromUrl(templateUrl, fileName, FileUtils.getExcelTemplatePath());
+
+        XWPFTemplate template = XWPFTemplate.compile(fullFileName).render(datas);
         return template;
     }
 

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

@@ -30,14 +30,14 @@ public class WordResource {
     public void fillWordTemplate(@Valid @RequestBody WordTemplateVM wordTemplateVM, HttpServletResponse response) throws Exception {
         response.reset();
         response.setContentType("multipart/form-data");//;charset=utf-8
-        response.setHeader("content-disposition", "attachment;filename=details12.docx");
+        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();
         WordTemplate wordTemplate = new WordTemplate();
-        XWPFTemplate template = wordTemplate.exportWordTemplate(wordTemplateVM.getDatas(), wordTemplateVM.getTemplateUrl());
+        XWPFTemplate template = wordTemplate.exportWordTemplate(wordTemplateVM.getDatas(), wordTemplateVM.getTemplateUrl(), wordTemplateVM.getFileName());
         template.write(outputStream);
         outputStream.flush();
         outputStream.close();

+ 9 - 0
src/main/java/com/common/workflow/web/rest/vm/WordTemplateVM.java

@@ -10,6 +10,7 @@ public class WordTemplateVM {
 
     private Map<String, Object> datas = new HashMap<>();
     private String templateUrl;
+    private String fileName;
 
 
     public Map<String, Object> getDatas() {
@@ -27,4 +28,12 @@ public class WordTemplateVM {
     public void setTemplateUrl(String templateUrl) {
         this.templateUrl = templateUrl;
     }
+
+    public String getFileName() {
+        return fileName;
+    }
+
+    public void setFileName(String fileName) {
+        this.fileName = fileName;
+    }
 }