把文书模板语法配置、自定义列表标签配置、自定义字符串列表元素拼接分割符提取成docker镜像的环境变量
This commit is contained in:
@@ -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<List<Object>> 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();
|
||||
}
|
||||
}
|
||||
|
||||
@@ -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<List<Object>> 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();
|
||||
}
|
||||
|
||||
/**
|
||||
* 文档接口
|
||||
*
|
||||
|
||||
@@ -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:
|
||||
# 启动本地转换
|
||||
|
||||
Reference in New Issue
Block a user