FreeMarker一些常見錯誤的總結
最近在做一個人物管理系統,需要做一個匯出word的功能。經過一番查詢,最終決定使用FreeMarker來做這個東西,做了兩天,終於成型了。部分效果如下(表內資料純屬虛構).
具體步驟就不一一贅述了,一搜一大堆。
在具體使用的過程中,出現過一下問題。
1.FreeMarker 多行資料的換行問題,在FreeMarker 中會把“\n”處理廠空格,所以需要換行的時候需要把“\n”替換掉。
string = string.replaceAll("\n", "<w:br />");
2.FreeMarker 在剛開始使用時,經常莫名其妙地報標籤匹配錯。如下
這種錯誤一般都是因為自定義標籤的問題,而且當標籤多的時候,查詢起來就很困難了。所以在寫的的時候,一定要仔細,不要漏掉一些括號之類的符號。Was expecting one of: <STRING_LITERAL> ... <RAW_STRING> ... "false" ... "true" ... <INTEGER> ... <DECIMAL> ... "." ... "+" ... "-" ... "!" ... "[" ... "(" ... "{" ... <ID> ...
但有的時候,已經確保標籤已經沒有任何問題,但還是報上面的錯誤。鬱悶了很長時間,最後找到了問題所在,在編輯word的時候使用了WPS,解決方案:就是隻用Office Word編輯,不要使用WPS.
3.圖片插入問題,在word插入一張頭像後,只顯示其中的一行,這也很令人鬱悶,雖然只是一個word的問題,也有研究了半個小時。最後是因為行高問題,調節行高,即可顯示整張圖片。
4.在插入圖片的時候,一定要注意“>${image}<”這尖括號中間不能加任何其他的諸如空格,
5.對於flt中所有定義的標籤,必須在map中放入其鍵值對。不然又會報錯。
最後做完後發現,匯出的doc,使用word可以正常開啟,但是在wps中的換行的顯示效果卻差強人意,目前還沒有比較好的解決辦法。
------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
補充:2014 02 12
------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
解決一FreeMarker中圖片無法顯示的錯誤:
起因:如果你需要在word中新增圖片,那你就在第一步製作模板時,加入一張圖片佔位,然後開啟xml文件,可以看到如下的一片base64編碼後的程式碼:
<w:binData w:name="wordml://03000001.png" xml:space="preserve">iVBORw0…(base64碼)…CC</w:binData>
只要將base64的程式碼替換成例如:${image},測試OK,沒有問題。但是,在編輯其他標籤後,負責圖片的<w:binData/>標籤不負責任的消失了,樓主是在word2003下進行編輯的。
解決方案:使用FreeMarker生產word時,當其他標籤部分都做好時,再做圖片部分。