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中增加上面方法的調用:
這樣,既保證了原有代碼的結構,又可實現支持中文的功能。如有其它語言的需求,也可如此修改。
個人觀點,僅供參考,如有轉載,請註明出處。謝謝!