|
@@ -2,32 +2,45 @@ package com.ruoyi.common.utils.office.doc;
|
|
|
|
|
|
import cn.hutool.core.collection.CollectionUtil;
|
|
import cn.hutool.core.collection.CollectionUtil;
|
|
import cn.hutool.core.util.ReflectUtil;
|
|
import cn.hutool.core.util.ReflectUtil;
|
|
|
|
+import com.ruoyi.common.utils.DateUtils;
|
|
|
|
+import com.ruoyi.common.utils.ServletUtils;
|
|
import fr.opensagres.xdocreport.core.XDocReportException;
|
|
import fr.opensagres.xdocreport.core.XDocReportException;
|
|
import fr.opensagres.xdocreport.document.IXDocReport;
|
|
import fr.opensagres.xdocreport.document.IXDocReport;
|
|
import fr.opensagres.xdocreport.document.registry.XDocReportRegistry;
|
|
import fr.opensagres.xdocreport.document.registry.XDocReportRegistry;
|
|
import fr.opensagres.xdocreport.template.IContext;
|
|
import fr.opensagres.xdocreport.template.IContext;
|
|
import fr.opensagres.xdocreport.template.TemplateEngineKind;
|
|
import fr.opensagres.xdocreport.template.TemplateEngineKind;
|
|
import fr.opensagres.xdocreport.template.formatter.FieldsMetadata;
|
|
import fr.opensagres.xdocreport.template.formatter.FieldsMetadata;
|
|
-import lombok.extern.slf4j.Slf4j;
|
|
|
|
-
|
|
|
|
-import java.io.*;
|
|
|
|
|
|
+import java.io.File;
|
|
|
|
+import java.io.FileNotFoundException;
|
|
|
|
+import java.io.IOException;
|
|
|
|
+import java.io.InputStream;
|
|
|
|
+import java.io.OutputStream;
|
|
|
|
+import java.nio.file.Files;
|
|
import java.util.ArrayList;
|
|
import java.util.ArrayList;
|
|
|
|
+import java.util.Date;
|
|
import java.util.List;
|
|
import java.util.List;
|
|
import java.util.Map;
|
|
import java.util.Map;
|
|
import java.util.UUID;
|
|
import java.util.UUID;
|
|
|
|
+import javax.servlet.http.HttpServletResponse;
|
|
|
|
+import lombok.extern.slf4j.Slf4j;
|
|
|
|
|
|
|
|
|
|
@Slf4j
|
|
@Slf4j
|
|
public class CommonDocUtils {
|
|
public class CommonDocUtils {
|
|
|
|
|
|
private IXDocReport report;
|
|
private IXDocReport report;
|
|
|
|
+
|
|
private IContext context;
|
|
private IContext context;
|
|
|
|
+
|
|
private FieldsMetadata metadata;
|
|
private FieldsMetadata metadata;
|
|
|
|
|
|
|
|
+ public static final String GEN_DIRECTORY = "wordTemp";
|
|
|
|
+
|
|
/***************************************** ↓初始文件加载↓ ********************************************************/
|
|
/***************************************** ↓初始文件加载↓ ********************************************************/
|
|
|
|
|
|
/**
|
|
/**
|
|
* 从类路径加载
|
|
* 从类路径加载
|
|
|
|
+ *
|
|
* @param path 文件路径
|
|
* @param path 文件路径
|
|
* @return
|
|
* @return
|
|
*/
|
|
*/
|
|
@@ -50,11 +63,12 @@ public class CommonDocUtils {
|
|
|
|
|
|
/**
|
|
/**
|
|
* 文本替换 !!!!!${placeholder}必须从文本编辑器复制到word里,不能直接在word里输入,不然会被分割成多段导致本方法无法替换!!!
|
|
* 文本替换 !!!!!${placeholder}必须从文本编辑器复制到word里,不能直接在word里输入,不然会被分割成多段导致本方法无法替换!!!
|
|
|
|
+ *
|
|
* @param data
|
|
* @param data
|
|
* @return
|
|
* @return
|
|
*/
|
|
*/
|
|
- public CommonDocUtils replaceData(Map<String, String> data){
|
|
|
|
- if (CollectionUtil.isEmpty(data)){
|
|
|
|
|
|
+ public CommonDocUtils replaceData(Map<String, Object> data) {
|
|
|
|
+ if (CollectionUtil.isEmpty(data)) {
|
|
return this;
|
|
return this;
|
|
}
|
|
}
|
|
data.keySet().forEach(key -> {
|
|
data.keySet().forEach(key -> {
|
|
@@ -129,15 +143,55 @@ public class CommonDocUtils {
|
|
// report.process(context, tempOut);
|
|
// report.process(context, tempOut);
|
|
//
|
|
//
|
|
// long wordEnd = System.currentTimeMillis();
|
|
// long wordEnd = System.currentTimeMillis();
|
|
-// final DocumentFormat targetFormat = DefaultDocumentFormatRegistry.getFormatByExtension("pdf");
|
|
|
|
-// converter.convert(tempIn).to(out).as(targetFormat).execute();
|
|
|
|
-//
|
|
|
|
-// temp.delete();
|
|
|
|
-// long pdfEnd = System.currentTimeMillis();
|
|
|
|
-// log.info("PDF文件生成成功 路径:{} word生成耗时:{}ms pdf转换耗时:{}ms", path, wordEnd-start, pdfEnd-wordEnd);
|
|
|
|
-// } catch (Exception e) {
|
|
|
|
-// throw new RuntimeException(e);
|
|
|
|
-// }
|
|
|
|
-// }
|
|
|
|
|
|
+ // final DocumentFormat targetFormat = DefaultDocumentFormatRegistry.getFormatByExtension("pdf");
|
|
|
|
+ // converter.convert(tempIn).to(out).as(targetFormat).execute();
|
|
|
|
+ //
|
|
|
|
+ // temp.delete();
|
|
|
|
+ // long pdfEnd = System.currentTimeMillis();
|
|
|
|
+ // log.info("PDF文件生成成功 路径:{} word生成耗时:{}ms pdf转换耗时:{}ms", path, wordEnd-start, pdfEnd-wordEnd);
|
|
|
|
+ // } catch (Exception e) {
|
|
|
|
+ // throw new RuntimeException(e);
|
|
|
|
+ // }
|
|
|
|
+ // }
|
|
|
|
+
|
|
|
|
+ /***************************************** ↓获取最终文件↓ ********************************************************/
|
|
|
|
+
|
|
|
|
+ /**
|
|
|
|
+ * 下载文件
|
|
|
|
+ */
|
|
|
|
+ public void download() {
|
|
|
|
+ HttpServletResponse response = ServletUtils.getResponse();
|
|
|
|
+ try (OutputStream out = response.getOutputStream()) {
|
|
|
|
+ report.process(context, out);
|
|
|
|
+ } catch (Exception e) {
|
|
|
|
+ throw new RuntimeException(e);
|
|
|
|
+ }
|
|
|
|
+ }
|
|
|
|
+
|
|
|
|
+ public File genFile(String quotationNo) {
|
|
|
|
+ createWordDirectory();
|
|
|
|
+ String filePath =
|
|
|
|
+ getGenDirectory() + File.separator + "报价_" + quotationNo + "_" + DateUtils.parseDateToStr(
|
|
|
|
+ "yyyyMMddHHmmssSSS", new Date())
|
|
|
|
+ + ".docx";
|
|
|
|
+ File f = new File(filePath);
|
|
|
|
+ try (OutputStream out = Files.newOutputStream(f.toPath())) {
|
|
|
|
+ report.process(context, out);
|
|
|
|
+ } catch (Exception e) {
|
|
|
|
+ throw new RuntimeException(e);
|
|
|
|
+ }
|
|
|
|
+ return f;
|
|
|
|
+ }
|
|
|
|
+
|
|
|
|
+ private static void createWordDirectory() {
|
|
|
|
+ File file = new File(getGenDirectory());
|
|
|
|
+ if (!file.exists()) {
|
|
|
|
+ file.mkdirs();
|
|
|
|
+ }
|
|
|
|
+ }
|
|
|
|
+
|
|
|
|
+ private static String getGenDirectory() {
|
|
|
|
+ return GEN_DIRECTORY + File.separator + DateUtils.dateTime();
|
|
|
|
+ }
|
|
|
|
|
|
}
|
|
}
|