poi-tl
pot-tl 提供了许多标签可以让使用者直接使用,同时它也保持着 poi 的灵活度,可以让使用者自己去定义一些标签。
比如官方给的几个案例把默认的 {{参数名}} 这样写法修改为自定义的写法,官方给出的是直接修改为freemarker 的写法直接变成了 ${参数名},修改方式如下:
ConfigureBuilder configureBuilder = Configure.builder().buildGramer("${", "}");
dataMap.put("userName","测试修改方式");
XWPFTemplate template = XWPFTemplate.compile("D:\template.docx").render(dataMap);
try {
template.writeAndClose(new FileOutputStream("D:\out.docx"));
}catch (Exception e){
e.printStackTrace();
}
对应模板中的写法应该修改为:
最终呈现的效果和之前使用 {{参数名}} 的写法一样,效果如下:
当然这只是修改它的基本模板语法,也可以修改其中的图片写法和列表写法等,例如这样去修改它的图片写法:
ConfigureBuilder configureBuilder = Configure.builder().addPlugin('#', new PictureRenderPolicy());
dataMap.put("userName","D\img.jpg");
XWPFTemplate template = XWPFTemplate.compile("D:\template.docx").render(dataMap);
try {
template.writeAndClose(new FileOutputStream("D:\out.docx"));
}catch (Exception e){
e.printStackTrace();
}
默认是使用 {{@图片路径}} ,通过以上 .addPlugin('#', new PictureRenderPolicy()); 代码,把图片的前缀由 @ 符号修改为了 # 号,那么如果我们在模板中继续使用 @ 符号的话就不会正常显示图片了,而是需要替换为 # 符号,模板中的写法应该修改如下:
当然这只是修改图片的模板写法,还可以进行修改其它的模板写法,比如表格 builder.addPlugin('需要替换的符号', new TableRenderPolicy());,再例如其它的都可以按照这个方式去进行替换。
poi-tl 的灵活程度还是很高的,几乎可以满足绝大部分的场景,同时兼容 poi 的写法,如果有不满足的地方可以基于 poi 进行定制化开发。