java自定义poi-tl中标签

171 阅读1分钟

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();
}

对应模板中的写法应该修改为:

image.png

最终呈现的效果和之前使用 {{参数名}} 的写法一样,效果如下:

image.png

当然这只是修改它的基本模板语法,也可以修改其中的图片写法和列表写法等,例如这样去修改它的图片写法:

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()); 代码,把图片的前缀由 @ 符号修改为了 # 号,那么如果我们在模板中继续使用 @ 符号的话就不会正常显示图片了,而是需要替换为 # 符号,模板中的写法应该修改如下:

image.png

当然这只是修改图片的模板写法,还可以进行修改其它的模板写法,比如表格 builder.addPlugin('需要替换的符号', new TableRenderPolicy());,再例如其它的都可以按照这个方式去进行替换。

poi-tl 的灵活程度还是很高的,几乎可以满足绝大部分的场景,同时兼容 poi 的写法,如果有不满足的地方可以基于 poi 进行定制化开发。