傳統方案痛點
- Apache POI:讀 Word 尚可,寫入複雜排版(巢狀表格、圖片、分頁)代碼極其繁瑣,維護困難,格式常變更更是噩夢。
- iText:擅長 PDF/Excel,生成複雜 Word 同樣吃力。
- JSP 輸出 HTML/RTF:樣式失真,列印變形,無法滿足嚴格排版需求。
突破口:Word 2003+ 原生 XML 格式
Word 2003 起支援 WordprocessingML(XML 格式),完整保留文件結構、樣式、內容。思路:
- Word 編輯好版面(含表格、圖片、書籤、分頁等)
- 另存為 XML 格式
- 將 XML 轉為 FreeMarker 模板(植入
${var}、#list 等標記)
- Java 端載入模板、注入資料、輸出
.doc
實際操作示範
1. Word 編輯版面(紅框為動態區域)
2. 另存為 XML
方案優勢
- 100% 版面還原:生成檔案與 Word 手工編輯完全一致。
- 排版與資料分離:美術/業務調版面,工程師寫資料邏輯。
- 支援極複雜結構:多層巢狀表格、浮水印、目錄、索引、變更追蹤等。
- 列印不變形:原生 Word 格式,零排版偏差。
- 無 Office 依賴:純 Java 運行,適合伺服器端批量生成。
下兩篇將詳細展示 XML 植入 FreeMarker 標記與 Java 核心代碼實作。