前言java
最近在项目中,因客户要求,将页面内容(如合同协议)导出成word,在网上翻了好多,感受太乱了,不过最后仍是较好解决了这个问题。web
准备材料数组
1.word原件 2.编辑器(推荐Firstobject free XML editor)浏览器
实现步骤app
1.用Microsoft Office Word打开word原件;webapp
2.把须要动态修改的内容替换成***,若是有图片,尽可能选择较小的图片几十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为自定义;
7. 标识替换完以后,模板就弄完了,另存为.ftl后缀文件便可。注意:必定不要用word打开ftl模板文件,不然xml内容会发生变化,致使前面的工做白作了。
代码实现
工具类WordUtils.Java
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 |
|
Action
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 |
|
Base64处理
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 |
|
Javascript
1 |
|
结束语
若是对Freemarker标签不熟的,能够在网上先学习下,了解文档结构。
相关连接
Firstobject free XML editor下载地址:http://www.firstobject.com/dn_editor.htm
freemarker 官网:http://freemarker.org/