概述
poi-tl,简单的说,就是通过一些标记,如{{var1}}、{{var2}}等,放到你指定的word模板里,然后去读取替换这些值,再输出填充数据后的word,可以做生成报表的功能。
一、引入pom
<!-- 模版下载 --> 如果JDK版本为17以上一定要不用第二块依赖。
<dependency>
<groupId>com.deepoove</groupId>
<artifactId>poi-tl</artifactId>
<version>1.10.0</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>
<dependency>
<groupId>org.apache.poi</groupId>
<artifactId>poi-ooxml-schemas</artifactId>
<version>4.1.2</version>
</dependency>
二、准备工作
在D盘,自己创建两个文件夹,一个是用来存储模板文件,另一个是用来存储生成的文件
我这里是在D盘
D:\cssj\存放模板
D:\cssj\template\word 存放生成的文件。
三、案例
一个很简单的案例
首先创建一个模版为complateetest.docx(一定要是docx)
代码模版:
/**
* 测试模版下载
*
* @return 返回结果
*/
@GetMapping(value = "testdoc")
public ApiResponse<String> testdoc() throws IOException {
//存放要填充的数据
Map<String, Object> datas = new HashMap<>();
//模版地址
String templateFilePath = "d:/cssj/";
//生成文件的保存地址
String destFilePath = "d:/cssj/template/word";
//文字 这里介绍两种数据填充方式
//1.可以设置一些通用样式
datas.put("var1", Texts.of("内容1"));
datas.put("var2", new TextRenderData("000000", "内容3"));
//2.文字可以通过Texts创建,也可以使用对象new TextRenderData("000000", "Sayi")
datas.put("var3", new TextRenderData("000000", "内容3"));
datas.put("var4", new TextRenderData("000000", "内容3"));
//渲染文件
XWPFTemplate compile = XWPFTemplate.compile(templateFilePath + "templateetest.docx");
compile.render(datas);
//输出为文件,指定输出文件名
compile.writeToFile(destFilePath + "out_test02.docx");
return ApiResponse.success();
}
生成的报告(简单版,之后会更新真正的检查报告)
四、注意
1、如果是JDK版本问题,只需要导入第一个依赖即可;
2、如果需在公司实现,需要进行解密word模版;
3、word一定要是docx,否则无法解析;
4、如果最后还不成功,需要看一下poi-tl版本的问题(我最后失败的原因就是这个)。