使用模板引擎生成複雜Word文件
當使用java程式碼生成word文件,要進行一些複雜的排版操作時比較困難,這時可以通過模板引擎(如freemarker、velocity等)來生成想要的word文件。
步驟:
1.先準備好word文件模板,進行排版等操作,在需要替換填寫變數字元,然後儲存為xml格式。
例如在word中寫入以下資訊
2.另存為xml格式(個人使用時都是儲存為2003的xml,最好別用wps,生成的xml可能會有些出入)
3.開啟xml,找到需要替換的變數,用模板引擎定義的變數格式替換。我使用的是velocity,所以將var替換為${var}。
4.然後將檔案字尾改為模板引擎能識別檔案,velocity使用的模板字尾為.vm,所以我將檔案儲存為test.vm
5.接下來的操作就是使用模板引擎將變數替換,輸出檔案時將檔案字尾改回.doc就行了。
以上是生成簡單文件的做法-----------------------------------------------------------------------------------
有時新增某些特殊元素,如:表格、圖片、分頁。我們可以根據word生成xml進行改造,利用模板引擎生成想要元素
-圖片:在xml中圖片元素為<w:pict>,找到該元素的位置,根據模板引擎的語法進行改寫
word中圖片使用base64編碼,將圖片的base64編碼填寫入<w:binData>元素的位置就能顯示圖片了;
-表格:先編輯一個表格,再在xml中拷貝表格中的一行,進行輸入資料的行數迴圈輸出就行
-分頁:將生成的word xml資料放入陣列中,在頁與頁之間用word的分頁符間隔即可。(注意:以下變數$pageContent的內容應當是word xml裡<wx:sect>文件體元素中包含的資料,其中還要排除<w:sectPr>尾部資訊元素的資料)
Word的xml中相關定義:
<w:br w:type="page"/> 分頁符號
<w:pict>圖片資源
<wx:sect> 文件體
<w:sectPr> 尾部資訊
</w:tbl>表格
<w:tr>表格行
分頁符(這是我自己在xml截取出的,你們可以自己儲存一個多頁的文件,在xml裡找到它的分頁符並使用它)
<w:p wsp:rsidR="001E05E9"wsp:rsidRDefault="001E05E9">
<w:pPr>
<w:widowControl/>
<w:jc w:val="left"/>
</w:pPr>
<w:r>
<w:br w:type="page"/>
</w:r>
</w:p>
換頁符:(有時在表格後新增不起作用)
<w:br w:type="page"/>