Java 用Freemarker导出word文档总结
前言
最近在项目中,因客户要求,将页面内容(如合同协议)导出成word,在网上翻了好多,感觉太乱了,不过最后还是较好解决了这个问题。自己总结了一下,希望对大家有所帮助。
准备材料
1.word原件(模板) 2.编辑器(推荐Firstobject free XML editor)
实现步骤
- 1.用Microsoft Office Word打开word原件;
- 2.把需要动态修改的内容替换成${param},如果有图片,尽量选择较小的图片几十K左右,并调整好位置;
- 3.另存为,选择保存类型Word 2003 XML 文档(*.xml)【这里说一下为什么用Microsoft Office Word打开且要保存为Word 2003XML,本人亲测,用WPS找不到Word 2003XML选项,如果保存为Word
XML,会有兼容问题,避免出现导出的word文档不能用Word 2003打开的问题】,保存的文件名不要是中文; - 4.用Firstobject free XML editor打开文件,选择Tools下的Indent【或者按快捷键F8】格式化文件内容。左边是文档结构,右边是文档内容;
- 5.将文档内容中需要动态修改内容的地方,换成freemarker的标识。其实就是Map<String, Object>中key,如${landName};
- 6.在加入了图片占位的地方,会看到一片base64编码后的代码,把base64编码替换成
${image}
,也就是Map<String, Object>中key,值必须要处理成base64;
代码如:<w:binData w:name=“wordml://自定义.png”
xml:space=“preserve”>${image}</w:binData>
注意:“>${image}<”这尖括号中间不能加任何其他的诸如空格,tab,换行等符号。 如果需要循环,则使用:<#list maps as
map></#list> maps是Map<String, Object>中key,值为数组,map为自定义;