Flying Sauser不支持中文的分析及處理方法

Flying Sauser支持將html頁面轉換爲pdf格式,但是對於頁面中的中文則需要特殊進行處理。坊間流傳已知的方法有2種。
1、在html頁面中增加css樣式,設定font-family屬性。

在程序中加對應的代碼處理,增加字體支持。

個人認爲,此方法適用於頁面較少,或者所有頁面都有設置統一的font-family。

2、修改org.xhtmlrenderer.pdf.ITextOutputDevice類中的drawString方法代碼。


替換爲

此方法的好處是,修改之後方法一中的兩步都不需要做了,可說是一勞永逸。

方法一比較麻煩,兩邊代碼都要改,而且可能要修改很多頁面,或者被迫改變整個項目的字體。
方法二雖然說解決了問題,但是個人認爲仍然不太好。此種方法是在輸出pdf文字時臨時修改了字體(修改後_font是不會變的)。
通過查看源代碼,發現程序會首先確認font family,如果頁面設置,則取頁面中的,否則取程序默認的CSSName.FONT_FAMILY(實際上就是serif)。然後,根據font family從org.xhtmlrenderer.pdf.ITextFontResolver對象中的_fontFamilies集合中取得字體,若集合中不存在對應的字體則再取默認(即Serif)。如此,我進行了如下修改:
1)修改org.xhtmlrenderer.css.constants.CSSName中的FONT_FAMILY屬性爲

2)修改org.xhtmlrenderer.pdf.ITextFontResolver中代碼,
增加方法:

在方法createInitialFontMap中增加上面方法的調用:

這樣,既保證了原有代碼的結構,又可實現支持中文的功能。如有其它語言的需求,也可如此修改。

個人觀點,僅供參考,如有轉載,請註明出處。謝謝!

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