目的是通过使用预先设置好的模版文档,通过使用调度任务产生的数据(包括文本、图片、列表、报表等),回填生成完整的Word文档,通常可用于需要定时生成文档的场景。
基本思路
使用开源项目Word模版生成文档项目poi-tl,把后台组织好的数据,包括文本、列表、表格和图片,填到相应的模版里,生成一份完整的文档。
使用说明
poi-tl
是一个jar包,使用时只需在项目pom文件内引入依赖即可:
1 | <dependency> |
该组件对模版文档内的语法结构要求都是以 结束,具体如下:
1 | > 普通文本:{{template}},渲染类为String或者TextRenderData |
另外,关于文档样式的问题,默认会使用模版占位符的样式,如果需要动态变化样式,可以在构造渲染类的时候注入样式。
Demo
具体使用代码如下,其中Map里的所有Key都是模版文档里的占位符:
1 | public static void main(String[] args) throws IOException { |
上面有使用Http请求的方法来获取图片,其实poi-tl
包里提供了Http请求的Get
的工具方法,但上面我们给出了Post
方法的使用方法,下面是Post
请求的工具方法:
1 | public static byte[] getImageByHttp(String urlStr, String param) throws IOException { |
题外话
使用poi-tl
基本上只能生成一些结构比较基本的文档,当需要相对复杂的图或者表的时候是处理不来的,这种情况下的一种解决方法是把需要的图或者表转成图片然后插入到文档中。至于如何生成图和表,可以在PhantomJS
的环境下利用诸如Echars
、HighCharts
这些图表插件生成。