需求
用戶填寫表單內(nèi)容后需要下載word文檔,打印、敲章。選擇word的好處是打印前可以修改(pdf無法修改,不同場景不同選擇),而且排版比excel靈活。
實(shí)現(xiàn)思路
word可以另存為xml,使用模板引擎技術(shù)可以非常方便的完成替換,由于本項(xiàng)目中已經(jīng)使用velocity,因此沒有選擇freemarker。
遇到的坑
我用的是word2007,制作完模板另存為xml,結(jié)果生成的文件中部分中文顯示了亂碼。各種嘗試無果。最終另存為選擇 word2003xml文檔解決問題。有興趣的同學(xué)請繼續(xù)研究。
模板制作技巧
聽上去另存為xml是不錯(cuò)的思路,但實(shí)際上生成的xml結(jié)構(gòu)是比較復(fù)雜的,通常大家都不熟悉。
- 在word中編寫velocity的變量。但保存后要用文本編輯器檢查一遍變量是否被word劈成多段
- 使用xml格式化工具美化格式
- 循環(huán)結(jié)構(gòu)的foreach需要使用文本編輯器編寫,為了快速定位可以查找 w:tr
- 編輯完的模板保存到 \WEB-INF\templates 下
java調(diào)用
String path = WordHelper.createWord("bond.doc.vm","bond.doc",bondVO);
模板名,word文件名,數(shù)據(jù)pojo
返回下載用的相對路徑,由于下載功能在網(wǎng)頁關(guān)閉后就沒有用了,因此存在了temp目錄下,方便定時(shí)刪除。
發(fā)布注意事項(xiàng)
download 目錄需要做軟連接
改進(jìn)思路
在實(shí)踐過程中這個(gè)xml太難維護(hù)了,第一遍忍了,當(dāng)要求修改默認(rèn)內(nèi)容時(shí)就傻了。因此新的思路是寫個(gè)html 的 模板,依然用 velocity替換變量,然后使用POI生成word。這樣對現(xiàn)有的技術(shù)調(diào)整較小,并且后續(xù)模板的維護(hù)也變得簡單了。