From fa06be4a48be5e4a48bc91870bd3b91fe8ffa314 Mon Sep 17 00:00:00 2001 From: yanghuanglin Date: Thu, 31 Jul 2025 15:06:08 +0800 Subject: [PATCH] =?UTF-8?q?=E6=8A=8A=E6=96=87=E4=B9=A6=E6=A8=A1=E6=9D=BF?= =?UTF-8?q?=E8=AF=AD=E6=B3=95=E9=85=8D=E7=BD=AE=E3=80=81=E8=87=AA=E5=AE=9A?= =?UTF-8?q?=E4=B9=89=E5=88=97=E8=A1=A8=E6=A0=87=E7=AD=BE=E9=85=8D=E7=BD=AE?= =?UTF-8?q?=E3=80=81=E8=87=AA=E5=AE=9A=E4=B9=89=E5=AD=97=E7=AC=A6=E4=B8=B2?= =?UTF-8?q?=E5=88=97=E8=A1=A8=E5=85=83=E7=B4=A0=E6=8B=BC=E6=8E=A5=E5=88=86?= =?UTF-8?q?=E5=89=B2=E7=AC=A6=E6=8F=90=E5=8F=96=E6=88=90docker=E9=95=9C?= =?UTF-8?q?=E5=83=8F=E7=9A=84=E7=8E=AF=E5=A2=83=E5=8F=98=E9=87=8F?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- README.md | 18 +++++ .../optima/document/api/DocumentService.java | 21 ++++++ .../java/com/optima/document/api/Gramer.java | 20 +++++ ...itional-spring-configuration-metadata.json | 32 ++++++++ document-docker/Dockerfile | 4 + document-docker/build.sh | 2 +- document-docker/entrypoint.sh | 6 +- .../server/api/DocumentServiceImpl.java | 57 ++------------- .../server/config/DocumentConfig.java | 68 ++++++++++++++++- .../src/main/resources/application.yml | 9 +++ .../server/api/DocumentServiceImpl.java | 58 +++------------ .../server/config/DocumentConfig.java | 73 +++++++++++++++++++ .../src/main/resources/application.yml | 10 +++ .../document/test/bean/DocumentConverter.java | 7 ++ 14 files changed, 283 insertions(+), 102 deletions(-) create mode 100644 document-api/src/main/java/com/optima/document/api/Gramer.java create mode 100644 document-api/src/main/resources/META-INF/additional-spring-configuration-metadata.json diff --git a/README.md b/README.md index a45c2f8..1612b85 100644 --- a/README.md +++ b/README.md @@ -89,6 +89,14 @@ services: - DOCUMENT_SERVER_PORT=9004 - PORT_NUMBERS=2001,2002,2003 - MAX_TASKS_PER_PROCESS=100 + # 传递环境变量时,$ 是特殊符号,需要 $$ 来表示 + # linux 命令中,$ 也是特殊符号,需要在前面增加 \ 表示转义特殊符号 + # 如果需要传递 ${ ,则需要写成 \$${ 。其首先被 docker 解析为 \${ ,\${ 作为linux命令的一部分,$转义后,相当于字符串 ${ + # 如果不是类似 ${ ,如 {{ ,则无需转义 + - GRAMER_PREFIX="\$${" + - GRAMER_SUFFIX="}" + - GRAMER_CUSTOMIZE_LIST="%" + - GRAMER_CUSTOMIZE_LIST_STRING_DELIMITING="," ports: # 用于通过http访问libreoffice - 3000:3000 @@ -119,6 +127,16 @@ services: server: port: ${DOCUMENT_SERVER_PORT:9004} +document: + gramer: + default: + prefix: '${' + suffix: '}' + prefix: ${GRAMER_PREFIX:${document.gramer.default.prefix}} + suffix: ${GRAMER_SUFFIX:${document.gramer.default.suffix}} + customize-list-tag: ${GRAMER_CUSTOMIZE_LIST:%} + customize-list-tag-string-delimiting: ${GRAMER_CUSTOMIZE_LIST_STRING_DELIMITING:,} + jodconverter: local: # 启动本地转换 diff --git a/document-api/src/main/java/com/optima/document/api/DocumentService.java b/document-api/src/main/java/com/optima/document/api/DocumentService.java index 26beaeb..6573bd0 100644 --- a/document-api/src/main/java/com/optima/document/api/DocumentService.java +++ b/document-api/src/main/java/com/optima/document/api/DocumentService.java @@ -9,6 +9,7 @@ import java.util.Map; * @since 2022/12/28 */ public interface DocumentService { + /** * 格式转换 * @@ -79,4 +80,24 @@ public interface DocumentService { default byte[] xlsToXlsx(byte[] source) { throw new UnsupportedOperationException(); } + + /** + * 获取模板语法配置 + * + * + * @return 模板语法配置 + */ + default Gramer gramer() { + return new Gramer(); + } } diff --git a/document-api/src/main/java/com/optima/document/api/Gramer.java b/document-api/src/main/java/com/optima/document/api/Gramer.java new file mode 100644 index 0000000..55b9fad --- /dev/null +++ b/document-api/src/main/java/com/optima/document/api/Gramer.java @@ -0,0 +1,20 @@ +package com.optima.document.api; + +import lombok.Getter; +import lombok.Setter; + +/** + * 文书模板中的语法标签 + */ +@Getter +@Setter +public class Gramer { + /// 模板语法开始字符串 + private String prefix = "${"; + /// 模板语法结束字符串 + private String suffix = "}"; + /// 自定义列表对象标签 + private Character customizeList = '%'; + /// 自定义列表对象标签处理字符串列表时的分隔符 + private String customizeListStringDelimiting = ","; +} diff --git a/document-api/src/main/resources/META-INF/additional-spring-configuration-metadata.json b/document-api/src/main/resources/META-INF/additional-spring-configuration-metadata.json new file mode 100644 index 0000000..f56b1db --- /dev/null +++ b/document-api/src/main/resources/META-INF/additional-spring-configuration-metadata.json @@ -0,0 +1,32 @@ +{ + "properties": [ + { + "name": "document.gramer.prefix", + "type": "java.lang.String", + "description": "模板语法开始字符串. 默认为 '${'.", + "defaultValue": "${", + "sourceType": "com.optima.document.api.Gramer" + }, + { + "name": "document.gramer.suffix", + "type": "java.lang.String", + "description": "模板语法结束字符串. 默认为 '}'.", + "defaultValue": "}", + "sourceType": "com.optima.document.api.Gramer" + }, + { + "name": "document.gramer.customize-list", + "type": "java.lang.Character", + "description": "自定义列表对象标签. 默认为 '%'. 只能为单个字符.", + "defaultValue": "%", + "sourceType": "com.optima.document.api.Gramer" + }, + { + "name": "document.gramer.customize-list-string-delimiting", + "type": "java.lang.String", + "description": "自定义列表对象标签处理字符串列表时的分隔符. 默认为 '、'.", + "defaultValue": "、", + "sourceType": "com.optima.document.api.Gramer" + } + ] +} \ No newline at end of file diff --git a/document-docker/Dockerfile b/document-docker/Dockerfile index e0ddddd..51a76d1 100644 --- a/document-docker/Dockerfile +++ b/document-docker/Dockerfile @@ -31,6 +31,10 @@ ENV CUSTOM_HTTPS_PORT=3001 ENV DOCUMENT_SERVER_PORT=9004 ENV PORT_NUMBERS=2002 ENV MAX_TASKS_PER_PROCESS=200 +ENV GRAMER_PREFIX="\\\${" +ENV GRAMER_SUFFIX="}" +ENV GRAMER_CUSTOMIZE_LIST="%" +ENV GRAMER_CUSTOMIZE_LIST_STRING_DELIMITING="," EXPOSE 9004 diff --git a/document-docker/build.sh b/document-docker/build.sh index aec6b8a..7ee0027 100644 --- a/document-docker/build.sh +++ b/document-docker/build.sh @@ -7,7 +7,7 @@ mkdir -p app # 构建jar echo 构建jar -mvn -f ../document-server/jodconverter-document-server/pom.xml clean package -Dmaven.test.skip=true +mvn -f ../pom.xml clean package -Dmaven.test.skip=true echo jar构建完成 # 复制所需文件 diff --git a/document-docker/entrypoint.sh b/document-docker/entrypoint.sh index 2595e10..7975ec0 100644 --- a/document-docker/entrypoint.sh +++ b/document-docker/entrypoint.sh @@ -10,7 +10,11 @@ exec java -jar /app/application.jar \ --server.port=${DOCUMENT_SERVER_PORT} \ --spring.config.location=/app/application.yml \ --jodconverter.local.port-numbers=${PORT_NUMBERS} \ - --jodconverter.local.max-tasks-per-process=${MAX_TASKS_PER_PROCESS} + --jodconverter.local.max-tasks-per-process=${MAX_TASKS_PER_PROCESS} \ + --document.gramer.prefix="${GRAMER_PREFIX}" \ + --document.gramer.suffix="${GRAMER_SUFFIX}" \ + --document.gramer.customize-list="${GRAMER_CUSTOMIZE_LIST}" \ + --document.gramer.customize-list-string-delimiting="${GRAMER_CUSTOMIZE_LIST_STRING_DELIMITING}" EOF # 设置可执行权限 diff --git a/document-server/docto-document-server/src/main/java/com/optima/document/server/api/DocumentServiceImpl.java b/document-server/docto-document-server/src/main/java/com/optima/document/server/api/DocumentServiceImpl.java index c6011fa..22a7ce3 100644 --- a/document-server/docto-document-server/src/main/java/com/optima/document/server/api/DocumentServiceImpl.java +++ b/document-server/docto-document-server/src/main/java/com/optima/document/server/api/DocumentServiceImpl.java @@ -2,22 +2,17 @@ package com.optima.document.server.api; import com.deepoove.poi.XWPFTemplate; import com.deepoove.poi.config.Configure; -import com.deepoove.poi.data.PictureRenderData; -import com.deepoove.poi.data.TextRenderData; -import com.deepoove.poi.policy.ListRenderPolicy; -import com.deepoove.poi.policy.PictureRenderPolicy; -import com.deepoove.poi.render.RenderContext; import com.deepoove.poi.template.run.RunTemplate; import com.deepoove.poi.xwpf.BodyContainer; import com.deepoove.poi.xwpf.BodyContainerFactory; import com.optima.document.api.DocumentService; +import com.optima.document.api.Gramer; import com.optima.document.server.config.DocumentConfig; import lombok.extern.slf4j.Slf4j; import org.apache.pdfbox.pdmodel.PDDocument; import org.apache.pdfbox.rendering.ImageType; import org.apache.pdfbox.rendering.PDFRenderer; import org.apache.pdfbox.tools.imageio.ImageIOUtil; -import org.apache.poi.xwpf.usermodel.XWPFRun; import org.springframework.stereotype.Service; import javax.annotation.Resource; @@ -27,8 +22,6 @@ import java.io.ByteArrayOutputStream; import java.io.IOException; import java.nio.file.Files; import java.nio.file.Path; -import java.util.Iterator; -import java.util.List; import java.util.Map; import java.util.UUID; @@ -38,53 +31,13 @@ import java.util.UUID; * @author Elias * @since 2021-09-28 16:18 */ -@SuppressWarnings("rawtypes") @Slf4j @Service public class DocumentServiceImpl implements DocumentService { @Resource private DocumentConfig documentConfig; - - /** - * word模版引擎配置 - */ - Configure wtlConfig = Configure.builder().buildGramer("${", "}") - .setValidErrorHandler(new Configure.DiscardHandler()) - .addPlugin('%', new ListRenderPolicy() { - @Override - public void doRender(RenderContext> context) throws Exception { - XWPFRun run = context.getRun(); - List dataList = context.getData(); - Iterator var5 = dataList.iterator(); - while (var5.hasNext()) { - Object data = var5.next(); - if (data instanceof TextRenderData) { - run.setText(((TextRenderData) data).getText()); - if (var5.hasNext()) { - run.setText(","); - } - } else if (data instanceof PictureRenderData) { - PictureRenderPolicy.Helper.renderPicture(run, (PictureRenderData) data); - } - - } - } - - }) - .setRenderDataComputeFactory(envModel -> - el -> { - Object data = envModel.getRoot(); - if ("#this".equals(el)) { - return data; - } else if (data instanceof Map) { - Map dataMap = ((Map) data); - if (dataMap.containsKey(el)) { - return dataMap.get(el); - } - } - return null; - }) - .build(); + @Resource + private Configure wtlConfig; public byte[] convert(byte[] source, String sourceExtension, String targetExtension, String targetFormat) { try { @@ -188,4 +141,8 @@ public class DocumentServiceImpl implements DocumentService { public byte[] xlsToXlsx(byte[] source) { return convert(source, "xls", "xlsx", "xlWorkbookDefault"); } + + public Gramer gramer() { + return documentConfig.getGramer(); + } } diff --git a/document-server/docto-document-server/src/main/java/com/optima/document/server/config/DocumentConfig.java b/document-server/docto-document-server/src/main/java/com/optima/document/server/config/DocumentConfig.java index b0e753b..3e4d75f 100644 --- a/document-server/docto-document-server/src/main/java/com/optima/document/server/config/DocumentConfig.java +++ b/document-server/docto-document-server/src/main/java/com/optima/document/server/config/DocumentConfig.java @@ -1,12 +1,25 @@ package com.optima.document.server.config; +import com.deepoove.poi.config.Configure; +import com.deepoove.poi.data.PictureRenderData; +import com.deepoove.poi.data.TextRenderData; +import com.deepoove.poi.policy.ListRenderPolicy; +import com.deepoove.poi.policy.PictureRenderPolicy; +import com.deepoove.poi.render.RenderContext; import com.optima.document.api.DocumentService; +import com.optima.document.api.Gramer; import lombok.Data; +import org.apache.poi.xwpf.usermodel.XWPFRun; import org.springframework.boot.context.properties.ConfigurationProperties; +import org.springframework.boot.context.properties.NestedConfigurationProperty; import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.Configuration; import org.springframework.remoting.httpinvoker.HttpInvokerServiceExporter; +import java.util.Iterator; +import java.util.List; +import java.util.Map; + /** * 服务端配置 * @@ -20,6 +33,60 @@ public class DocumentConfig { private String docToProgram; + @NestedConfigurationProperty + private Gramer gramer; + + /** + * word模版引擎配置 + */ + @Bean(name = "wtlConfig") + public Configure wtlConfig() { + return Configure.builder().buildGramer(gramer.getPrefix(), gramer.getSuffix()) + .setValidErrorHandler(new Configure.DiscardHandler()) + .addPlugin(gramer.getCustomizeList(), new ListRenderPolicy() { + @Override + public void doRender(RenderContext> context) throws Exception { + XWPFRun run = context.getRun(); + List dataList = context.getData(); + Iterator iterator = dataList.iterator(); + while (iterator.hasNext()) { + Object data = iterator.next(); + if (data instanceof String) { + // 纯文本类型 + run.setText(data.toString()); + if (iterator.hasNext()) { + run.setText(gramer.getCustomizeListStringDelimiting()); + } + } else if (data instanceof TextRenderData) { + // poi的文本类型 + run.setText(((TextRenderData) data).getText()); + if (iterator.hasNext()) { + run.setText(gramer.getCustomizeListStringDelimiting()); + } + } else if (data instanceof PictureRenderData) { + // poi的图片类型 + PictureRenderPolicy.Helper.renderPicture(run, (PictureRenderData) data); + } + } + } + + }) + .setRenderDataComputeFactory(envModel -> + el -> { + Object data = envModel.getRoot(); + if ("#this".equals(el)) { + return data; + } else if (data instanceof Map) { + @SuppressWarnings("rawtypes") Map dataMap = ((Map) data); + if (dataMap.containsKey(el)) { + return dataMap.get(el); + } + } + return null; + }) + .build(); + } + /** * 文档接口 * @@ -33,5 +100,4 @@ public class DocumentConfig { exporter.setServiceInterface(DocumentService.class); return exporter; } - } diff --git a/document-server/docto-document-server/src/main/resources/application.yml b/document-server/docto-document-server/src/main/resources/application.yml index 7eddcf7..08d7db7 100644 --- a/document-server/docto-document-server/src/main/resources/application.yml +++ b/document-server/docto-document-server/src/main/resources/application.yml @@ -2,4 +2,13 @@ server: port: 9004 document: + gramer: + default: + prefix: '${' + suffix: '}' + prefix: ${GRAMER_PREFIX:${document.gramer.default.prefix}} + suffix: ${GRAMER_SUFFIX:${document.gramer.default.suffix}} + customize-list: ${GRAMER_CUSTOMIZE_LIST:%} + customize-list-string-delimiting: ${GRAMER_CUSTOMIZE_LIST_STRING_DELIMITING:,} + doc-to-program: C:\\DocumentServer\\docto.exe \ No newline at end of file diff --git a/document-server/jodconverter-document-server/src/main/java/com/optima/document/server/api/DocumentServiceImpl.java b/document-server/jodconverter-document-server/src/main/java/com/optima/document/server/api/DocumentServiceImpl.java index 615077b..c183518 100644 --- a/document-server/jodconverter-document-server/src/main/java/com/optima/document/server/api/DocumentServiceImpl.java +++ b/document-server/jodconverter-document-server/src/main/java/com/optima/document/server/api/DocumentServiceImpl.java @@ -2,21 +2,17 @@ package com.optima.document.server.api; import com.deepoove.poi.XWPFTemplate; import com.deepoove.poi.config.Configure; -import com.deepoove.poi.data.PictureRenderData; -import com.deepoove.poi.data.TextRenderData; -import com.deepoove.poi.policy.ListRenderPolicy; -import com.deepoove.poi.policy.PictureRenderPolicy; -import com.deepoove.poi.render.RenderContext; import com.deepoove.poi.template.run.RunTemplate; import com.deepoove.poi.xwpf.BodyContainer; import com.deepoove.poi.xwpf.BodyContainerFactory; import com.optima.document.api.DocumentService; +import com.optima.document.api.Gramer; +import com.optima.document.server.config.DocumentConfig; import lombok.extern.slf4j.Slf4j; import org.apache.pdfbox.pdmodel.PDDocument; import org.apache.pdfbox.rendering.ImageType; import org.apache.pdfbox.rendering.PDFRenderer; import org.apache.pdfbox.tools.imageio.ImageIOUtil; -import org.apache.poi.xwpf.usermodel.XWPFRun; import org.jodconverter.core.DocumentConverter; import org.jodconverter.core.document.DefaultDocumentFormatRegistry; import org.jodconverter.core.document.DocumentFormat; @@ -26,8 +22,6 @@ import javax.annotation.Resource; import java.awt.image.BufferedImage; import java.io.ByteArrayInputStream; import java.io.ByteArrayOutputStream; -import java.util.Iterator; -import java.util.List; import java.util.Map; /** @@ -41,47 +35,10 @@ import java.util.Map; public class DocumentServiceImpl implements DocumentService { @Resource private DocumentConverter documentConverter; - - /** - * word模版引擎配置 - */ - private static final Configure wtlConfig = Configure.builder().buildGramer("${", "}") - .setValidErrorHandler(new Configure.DiscardHandler()) - .addPlugin('%', new ListRenderPolicy() { - @Override - public void doRender(RenderContext> context) throws Exception { - XWPFRun run = context.getRun(); - List dataList = context.getData(); - Iterator var5 = dataList.iterator(); - while (var5.hasNext()) { - Object data = var5.next(); - if (data instanceof TextRenderData) { - run.setText(((TextRenderData) data).getText()); - if (var5.hasNext()) { - run.setText(","); - } - } else if (data instanceof PictureRenderData) { - PictureRenderPolicy.Helper.renderPicture(run, (PictureRenderData) data); - } - - } - } - - }) - .setRenderDataComputeFactory(envModel -> - el -> { - Object data = envModel.getRoot(); - if ("#this".equals(el)) { - return data; - } else if (data instanceof Map) { - Map dataMap = ((Map) data); - if (dataMap.containsKey(el)) { - return dataMap.get(el); - } - } - return null; - }) - .build(); + @Resource + private DocumentConfig documentConfig; + @Resource + private Configure wtlConfig; /** * 文件格式转换 @@ -185,4 +142,7 @@ public class DocumentServiceImpl implements DocumentService { return convert(source, "xls", "xlsx"); } + public Gramer gramer() { + return documentConfig.getGramer(); + } } diff --git a/document-server/jodconverter-document-server/src/main/java/com/optima/document/server/config/DocumentConfig.java b/document-server/jodconverter-document-server/src/main/java/com/optima/document/server/config/DocumentConfig.java index ca71159..e2edd36 100644 --- a/document-server/jodconverter-document-server/src/main/java/com/optima/document/server/config/DocumentConfig.java +++ b/document-server/jodconverter-document-server/src/main/java/com/optima/document/server/config/DocumentConfig.java @@ -1,18 +1,91 @@ package com.optima.document.server.config; +import com.deepoove.poi.config.Configure; +import com.deepoove.poi.data.PictureRenderData; +import com.deepoove.poi.data.TextRenderData; +import com.deepoove.poi.policy.ListRenderPolicy; +import com.deepoove.poi.policy.PictureRenderPolicy; +import com.deepoove.poi.render.RenderContext; import com.optima.document.api.DocumentService; +import com.optima.document.api.Gramer; +import lombok.Getter; +import lombok.Setter; +import org.apache.poi.xwpf.usermodel.XWPFRun; +import org.springframework.boot.context.properties.ConfigurationProperties; +import org.springframework.boot.context.properties.NestedConfigurationProperty; import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.Configuration; import org.springframework.remoting.httpinvoker.HttpInvokerServiceExporter; +import java.util.Iterator; +import java.util.List; +import java.util.Map; + /** * 服务端配置 * * @author Elias * @since 2021-09-28 16:12 */ +@Getter +@Setter @Configuration +@ConfigurationProperties(prefix = "document") public class DocumentConfig { + @NestedConfigurationProperty + private Gramer gramer; + + /** + * word模版引擎配置 + */ + @Bean(name = "wtlConfig") + public Configure wtlConfig() { + return Configure.builder().buildGramer(gramer.getPrefix(), gramer.getSuffix()) + .setValidErrorHandler(new Configure.DiscardHandler()) + .addPlugin(gramer.getCustomizeList(), new ListRenderPolicy() { + @Override + public void doRender(RenderContext> context) throws Exception { + XWPFRun run = context.getRun(); + List dataList = context.getData(); + Iterator iterator = dataList.iterator(); + while (iterator.hasNext()) { + Object data = iterator.next(); + if (data instanceof String) { + // 纯文本类型 + run.setText(data.toString()); + if (iterator.hasNext()) { + run.setText(gramer.getCustomizeListStringDelimiting()); + } + } else if (data instanceof TextRenderData) { + // poi的文本类型 + run.setText(((TextRenderData) data).getText()); + if (iterator.hasNext()) { + run.setText(gramer.getCustomizeListStringDelimiting()); + } + } else if (data instanceof PictureRenderData) { + // poi的图片类型 + PictureRenderPolicy.Helper.renderPicture(run, (PictureRenderData) data); + } + } + } + + }) + .setRenderDataComputeFactory(envModel -> + el -> { + Object data = envModel.getRoot(); + if ("#this".equals(el)) { + return data; + } else if (data instanceof Map) { + @SuppressWarnings("rawtypes") Map dataMap = ((Map) data); + if (dataMap.containsKey(el)) { + return dataMap.get(el); + } + } + return null; + }) + .build(); + } + /** * 文档接口 * diff --git a/document-server/jodconverter-document-server/src/main/resources/application.yml b/document-server/jodconverter-document-server/src/main/resources/application.yml index d197d0c..938349b 100644 --- a/document-server/jodconverter-document-server/src/main/resources/application.yml +++ b/document-server/jodconverter-document-server/src/main/resources/application.yml @@ -1,6 +1,16 @@ server: port: ${DOCUMENT_SERVER_PORT:9004} +document: + gramer: + default: + prefix: '${' + suffix: '}' + prefix: ${GRAMER_PREFIX:${document.gramer.default.prefix}} + suffix: ${GRAMER_SUFFIX:${document.gramer.default.suffix}} + customize-list: ${GRAMER_CUSTOMIZE_LIST:%} + customize-list-string-delimiting: ${GRAMER_CUSTOMIZE_LIST_STRING_DELIMITING:,} + jodconverter: local: # 启动本地转换 diff --git a/document-test/src/main/java/com/optima/document/test/bean/DocumentConverter.java b/document-test/src/main/java/com/optima/document/test/bean/DocumentConverter.java index 4fc3202..933412f 100644 --- a/document-test/src/main/java/com/optima/document/test/bean/DocumentConverter.java +++ b/document-test/src/main/java/com/optima/document/test/bean/DocumentConverter.java @@ -10,7 +10,9 @@ import java.io.File; import java.io.IOException; import java.nio.file.Files; import java.nio.file.Path; +import java.util.ArrayList; import java.util.HashMap; +import java.util.List; import java.util.Map; @Component @@ -35,6 +37,11 @@ public class DocumentConverter { Map params = new HashMap<>(); params.put("callerName", "张三"); + List departmentList = new ArrayList<>(); + departmentList.add("处置部门1"); + departmentList.add("处置部门2"); + params.put("departmentList", departmentList); + // 生成word,并转为pdf byte[] generatedWord = documentService.generateWord(Files.readAllBytes(sourceFile.toPath()), params); byte[] wordedToPdf = documentService.wordToPdf(generatedWord, true);