poi-tl模板生成word,ZipEntry压缩文件导出
依赖
<dependency>
<groupId>com.deepoove</groupId>
<artifactId>poi-tl</artifactId>
<version>1.9.1</version>
</dependency>
代码
public void test(HttpServletResponse response) throws Exception {
OutputStream out = setResponse(response, "测试.zip");
ZipOutputStream zipOutputStream = new ZipOutputStream(out);
HackLoopTableRenderPolicy hackLoopTableRenderPolicy = new HackLoopTableRenderPolicy();
Configure config = Configure.builder()
.bind("zyList", hackLoopTableRenderPolicy)
.bind("tables", hackLoopTableRenderPolicy)
.build();
List tables = Lists.newArrayList(wordUtil.toData(), wordUtil.toData());
for(int i = 0; i < 2; i++){
ClassPathResource resource = new ClassPathResource("file/测试.docx");
//创建压缩文件
ZipEntry zipEntry = new ZipEntry(i + ".docx");
zipOutputStream.putNextEntry(zipEntry);
ZipSecureFile.setMinInflateRatio(-1.0d);
XWPFTemplate template = XWPFTemplate.compile(resource.getInputStream(),config) .render(Maps.newHashMap(ImmutableMap.of("tables", tables)));
template.write(zipOutputStream);
}
zipOutputStream.close();
out.close();
}
private OutputStream setResponse(HttpServletResponse response, String zipFileName) throws Exception{
zipFileName = URLEncoder.encode(zipFileName, "UTF-8");
response.setCharacterEncoding("UTF-8");
response.setContentType(MediaType.APPLICATION_OCTET_STREAM_VALUE);
response.setHeader("Access-Control-Expose-Headers", "Content-Disposition");
response.setHeader("Content-Disposition", "attachment; filename=" + zipFileName);
response.setHeader("Pragma", "public");
response.setHeader("Cache-Control", "no-store");
response.addHeader("Cache-Control", "max-age=0");
return response.getOutputStream();
}
数据
public class Data {
private List<ZY> zyList;
private String inName = "测试股份有限公司";
private String inBCode = "A0095000001";
private String inZCode = "B0002935";
private String outName = "测试银行股份有限公司";
private String outBCode = "A0011000001";
private String outZCode = "A0000162";
private String bCode = "190013";
private String bName = "19测试国债13";
private String bAmount = "17000";
private String bFCode = "A0095000001";
private String bSCode = "A0011000001";
private String inOrgnaization = "A";
private String outOrgnaization = "B";
private String date = "2022年01月12日";
}
public class ZY {
private String code;
private String name;
private String amount;
}
public static Data toData(){
Data da = new Data();
ZY zy1 = new ZY("012101520", "21测试国投SCP002", "4000");
ZY zy2 = new ZY("101801532", "18测试国资MTN003", "1000");
ZY zy3 = new ZY("101900578", "19测试城投MTN002", "10000");
ZY zy4 = new ZY("102100792", "21测试投资MTN001", "2000");
List list = Lists.newArrayList(zy1,zy2, zy3, zy4);
da.setZyList(list);
return da;
}
模板
resources/file/测试.docx
结果
不曾提起,却从未忘记