客戶要求用程序生成標准的Word文檔,要能打印,而且不能變形,以前用過很多解決方案,都在客戶嚴格要求下犧牲的無比慘烈。
POI讀word文檔還行,寫文檔實在不敢恭維,復雜的樣式很難控制不提,想象一下一個20多頁,嵌套很多表格和圖像的Word文檔靠POI來寫代碼輸出,對程序員來說比去山西挖煤還慘,況且文檔格式還經常變化。
iText操作Excel還行。對於復雜的大量的Word也是噩夢。
直接通過JSP輸出樣式基本不達標,而且要打印出來就更是慘不忍睹。
Word從2003開始支持XML格式,用XML還做就很簡單了。
大致的思路是先用Office2003或者2007編輯好Word的樣式,然後另存為xml,將XML翻譯為FreeMarker模板,最後用Java來解析FreeMarker模板並輸出Doc。經測試這樣方式生成的Word文檔完全符合office標准,樣式、內容控制非常便利,打印也不會變形,生成的文檔和Office中編輯文檔完全一樣。
看看實際效果
首先用Office【版本要2003以上,以下的不支持XML格式】編輯文檔的樣式,圖中紅線的部分就是我要輸出的部分:
將編輯好的文檔另存為XML