<!-- word-->
<dependency>
<groupId>com.deepoove</groupId>
<artifactId>poi-tl</artifactId>
<version>1.10.0-beta</version>
</dependency>
<dependency>
<groupId>org.apache.poi</groupId>
<artifactId>poi</artifactId>
<version>4.1.2</version>
</dependency>
<dependency>
<groupId>org.apache.poi</groupId>
<artifactId>poi-ooxml</artifactId>
<version>4.1.2</version>
</dependency>
import cn.hutool.core.util.StrUtil;
import com.deepoove.poi.render.compute.EnvModel;
import com.deepoove.poi.render.compute.RenderDataCompute;
import com.deepoove.poi.render.compute.SpELRenderDataCompute;
import lombok.extern.slf4j.Slf4j;
import java.util.Map;
/**
* 全局参数
* global开始的变量将直接使用全局参数
* @author liaozesong
*/
@Slf4j
public class GlobalSpELRenderDataCompute implements RenderDataCompute {
private final SpELRenderDataCompute spELRenderDataCompute;
private final Map<String, Object> map;
public static final String GLOBAL = "global.";
public GlobalSpELRenderDataCompute(EnvModel model, Map<String, Object> global) {
this.spELRenderDataCompute = new SpELRenderDataCompute(model);
this.map = global;
}
@Override
public Object compute(String el) {
if (StrUtil.startWith(el, GLOBAL)) {
if(null==map){
return null;
}
return map.get(StrUtil.removePrefix(el, GLOBAL));
}
return spELRenderDataCompute.compute(el);
}
}
import cn.hutool.core.collection.CollUtil;
import com.deepoove.poi.plugin.table.LoopRowTableRenderPolicy;
import com.deepoove.poi.util.TableTools;
import org.apache.poi.xwpf.usermodel.XWPFTable;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
/**
* @author liaozesong
*/
public class MergeGroupTablePolicy extends LoopRowTableRenderPolicy {
@Override
protected void afterloop(XWPFTable table, Object data) {
List<IntroductionList> list = (List<IntroductionList>) data;
List<List<IntroductionList>> group = CollUtil.groupByField(list, "groupHidden");
int index = 1;
for (List<IntroductionList> statistics : group) {
int size = statistics.size();
int to = index + size - 1;
if (index < to) {
TableTools.mergeCellsVertically(table, 0, index, to);
index = index + size;
}
}
}
public List<? extends Group> hiddenGroup(List<? extends Group> list) {
HashMap<String, Object> tmpMap = new HashMap<>();
for (Group tmp : list) {
String group = tmp.getGroup();
tmp.setGroupHidden(group);
if (tmpMap.containsKey(group)) {
tmp.setGroup(null);
}
tmpMap.put(group, null);
}
return list;
}
}
protected byte[] toWord(Introduction introduction, List<?> geoDefect, List<?> imgDefect, ClassPathResource resource) {
InputStream stream = null;
byte[] result = null;
ByteArrayOutputStream byteArrayOutputStream = null;
XWPFTemplate template = null;
try {
stream = resource.getStream();
byteArrayOutputStream = new ByteArrayOutputStream();
RenderPolicy policy = new LoopRowTableRenderPolicy();
MergeGroupTablePolicy mergeGroupTablePolicy = new MergeGroupTablePolicy();
List<? extends Group> groups = mergeGroupTablePolicy.hiddenGroup(introduction.getList());
introduction.setList(groups);
Configure config = Configure.builder()
.bind("one", policy)
.bind("two", policy)
.bind("three", policy)
.bind("introduction.list", mergeGroupTablePolicy)
.useSpringEL()
.setRenderDataComputeFactory(a -> new GlobalSpELRenderDataCompute(a, new HashMap<>(2) {{
put("domain", selectPoleStr());
put("domainStr", selectDomainStr());
}}))
.build();
template = XWPFTemplate.compile(stream, config).render(
new HashMap<String, Object>(3) {{
put("introduction", introduction);
put("geoDefect", geoDefect);
put("imgDefect", imgDefect);
}});
template.write(byteArrayOutputStream);
result = byteArrayOutputStream.toByteArray();
} catch (IOException e) {
Assert.isTrue(false, e.getMessage());
} finally {
IoUtil.close(stream);
IoUtil.close(template);
IoUtil.close(byteArrayOutputStream);
}
return result;
}
版权声明:本文为weixin_35928208原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明。