前言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/