本文最后更新于 2025年1月11日
我们在开发一些系统的时候,例如OA系统,经常能遇到将审批单数据导出为word和excel文档的需求,导出为excel是比较简单的,因为excel有单元格来供我们定位数据位置,但是word文档的格式不像表格那样可以轻松的定位,要想将数据导出为一些带有图片和表格的这种结构复杂的word文档该怎样实现呢。
poi-tl 是一款可以帮助我们实现这种功能的Java开源项目,它把POI和Freemarker相结合,可以基于我们绘制好的word文档模板来填充数据进去,然后生成新的word文档。poi-tl托管在GitHub:https://github.com/Sayi/poi-tl
例如,我们要生成一个差旅行程单,首先要绘制这样的一个word文档模板,用{{name}}
代表姓名进行占位,姓名就是普通文字类型,以此类推。tripList
作为渲染行程表格的数据源的名字,是ArrayList集合类型,放在表格的表头,用[from]
表示tripList
集合中每个元素的from
属性的值,渲染到当前行的某一列上,以此类推。最后的三个签署对应的是领导的签名笔迹图片,图片类型要用变量名前多一个@
的形式{{@****Pin}}
来表示
如果表格中某一列是图片,则表示为[@变量]
模板绘制好以后,开始使用poi-tl工具生成word文档,首先新建maven项目,引入poi-tl的依赖和需要的其他依赖,然后将这个绘制好的word模板文件放在工程的根目录下
然后,新建一个Entity类: org.example.TravelApplyExportVO
新建测试类: org.example.Main,用poi-tl组件基于刚刚绘制的word模板生成一个差旅行程单
然后领导签名笔记图片素材img.png
,img2.png
也需要放进工程根目录下
都完成后,执行main()
方法测试,程序运行结束后,将在根路径生成文件output.docx,打开就是我们想要的效果了。
文章写到这已经是深夜了,最新在开发一个OA系统,需要Word导出的场景很多,由于之前没怎么接触过,于是熬夜攻关了一下并记录了下来,接下来希望项目能顺利交付吧~
参考