在经过各种尝试后,确定对于比较复杂的情况,使用Freemarker导出的效果与成功率相对时较高的。当然,过程中也遇到了很多坑,所以记录一下。
注意:目前测试了doc文件的导出,docx文件的导出方案网上是由相关资料的,但是没有亲测成功
其实这种方案在java代码中的处理相对简单,只要传递对象就可以了,其难度在于模板的设计,根据不同模板的需求,总结来说需要利用freemarker的相关语法解决模板的下面几个问题:
1、word中添加列表
2、word中添加图片
3、word中循环的使用(通俗讲就是相似内容的重复)
4、word中map的使用(通俗讲就是不同情况下不同内容的显示)
说明:前两条属于常见使用方法,后两条解释一下:
- 问题3场景举例:
需要导出10个工厂的数据信息,每个厂都套用固定表格。
这种情况其实的模板就是需要把这个固定表格去循环,所以只需做一个厂的模板,剩下的通过循环实现 。 - 问题4场景举例:
还是上面的问题,如果每个厂通用的表格不是固定的,或者不仅仅是表格,那么在传递参数时,就不是数组可以搞定的了,需要直接传递对象,那么就要在模板中处理map。
1 模板制作
1.1 模板文件生成
由于freemarker需要处理的为.ftl文件,但其内容就是增加了一些代码语句的xml,所以制作ftl的流程就是:
[1]. 将word的doc文件另存为xml格式
[2]. 在xml中进行变量替换详细见1.2
1.2 模板中的变量
待更新
1.3 如何添加图片
待更新
1.4 如何添加表格
待更新
1.5 关于循环
待更新
1.6 关于Map
待更新
2 Java的调用
待更新
2.1 Maven依赖
待更新
2.2 Word导出工具类参考
待更新
2.3 Web项目下的使用方式
待更新