利用freemaker導出Word總結

1.製作模板  將word文檔中需要動態生成數據替換成${key},然後把Word文件另存爲xml,然後最好格式化一下,然後另存爲ftl文件。

2.修改模板內容 如果模板有一些table、單元格合併、圖片顯示、計算等需要根據freemaker標籤進行修改,基本語法可以百度

3.後臺數據值和模板中的key值對應即可,圖片需要轉爲BASE64,然後將模板和數據模型合併成文件輸出,還有別忘記設置好編碼

 

問題:1.利用wps和Word生成的xml文件不一樣。

           2.目前公司使用的模板爲wps生成,圖片顯示需要三處對應。

 但是Word生成的xml模板圖片處有一個<w:pict>標籤下面有<w:binData w:name="wordml://03000001.png" xml:space="preserve">${key}</w:binData> 

將圖片的base64編碼放在此處即可。 

3.目前公司使用的wps生成的模板導出doc文件後,一般wps可以打開,有一款企業級wps打不開。Word打不開,需要另存爲一下,文件類型選擇microsoft word docx或者doc。直接使用Word生成模板能不能全部兼容目前沒有測試。

4.一定要注意數據類型的問題,最好前後類型要一致。不然使用freemaker標籤會頻繁報錯而且調試麻煩。

之前遇到一個問題,後臺返回List<object>,object其實是一個map用於模板中的table顯示,但當其中值有null時,後臺轉map遍歷時不能直接!=null判斷,null值轉化字符串不報錯變成了"null",但是freemaker中直接返回list<object>後null值Word單元格中直接顯示爲null,想在null時做一些操作時所有freemaker判斷方法判斷不出null值,想轉化爲字符串判斷判斷"null",freemaker報轉化錯誤,類型不一致。最後在後臺把返回改爲list<map>變爲正常,可以使用?? !等判斷。

總結:1.感覺freemaker並不好用,還沒開始的可以考慮Apache POI,感覺操作更簡單些,調試也方便些。

2.<w:tbl>表示table <w:tr>表示table中的一行 <w:tc>代表每行的一個單元格 <w:p>每個可以表示一個單元格中的一列。

合併單元格使用<w:vMerge w:val="continue" />表示合併 <w:vMerge w:val="restart"/>表示另起新行。定義變量使用<#assign raning_flag = "">

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章