- 論壇徽章:
- 0
|
使用Apache FOP將Docbook轉(zhuǎn)換成PDF文檔
在翻譯的
Spring Live
的時(shí)候,我就選擇了使用 DocBook 來組織文檔。但是當(dāng)我試圖使用 Apache FO 把它轉(zhuǎn)換成 PDF 時(shí),問題就出現(xiàn)了。
實(shí)際上,到現(xiàn)在為止,我都沒有用FOP來真正的轉(zhuǎn)換我的 DocBook 源文件。Spring Live 的PDF文檔最終還是由
RenderX
的 XEP 免費(fèi)個(gè)人版來轉(zhuǎn)換的。
使用Apache FOP,首先是要解決的是中文字體支持問題,操作起來比較復(fù)雜,一般要經(jīng)歷兩個(gè)步驟。
1.要支持truetype字體,首先是要生成metrics文件,并且在fop配置文件中進(jìn)行配置。
2.然后自定義xsl中字體相關(guān)的屬性。
這里不再重復(fù)其步驟細(xì)節(jié),具體可以參考:
Apache FOP: Configuration
使用FOP將中文DocBook xml轉(zhuǎn)換成pdf的實(shí)現(xiàn)記錄
用Google搜索的話可以更多的相關(guān)的解決方案,大多是針對(duì)早期的0.20.5的版本。
可喜的是最新的Apache FOP 0.95的字體配置已經(jīng)大大簡(jiǎn)化,支持自動(dòng)掃描。參見:
Apache FOP: Fonts
。
/usr/share/fonts/truetype/
第一種方法,在配置文件fonts 標(biāo)簽使用directory,指定字體目錄,它有一個(gè)可選的屬性recursive,設(shè)置為true的話,會(huì)查找子目錄中安裝的字體文件。
第二種方法,使用,它會(huì)自動(dòng)掃描系統(tǒng)的字體目錄,如Windows系統(tǒng)盤下的C:\Windows
\Fonts,及Linux下的~/.fonts,/usr/share/fonts, /usr/local/share/fonts等。
第一次掃描之后,F(xiàn)OP會(huì)將字體信息寫入cache,之后使用就會(huì)讀cache了,不會(huì)再掃描字體了,默認(rèn)cache存放位置是~/.fop/下面。建議在linux下指定directory的方式,不然的話cache文件體積也比較驚人。
但是FOP生成的pdf文檔仍然無法讓我滿意。
當(dāng)我想在設(shè)置font.family使用字體簇時(shí),F(xiàn)OP 0.95無法支持。比如我的設(shè)置為:
'Garamond','SimSun'
'Georgia','SimHei'
這種設(shè)置的好處是,英文中文分別使用不同的字體輸出。
由于Docbook XML生成的FO文件中,默認(rèn)字符輸出使用character-by-character策略,F(xiàn)OP居然還是漢字當(dāng)成英文字符來處理,導(dǎo)致漢字輸出全部為方框。
在滿江紅翻譯的Hibernate 中文文檔時(shí),使用FOP轉(zhuǎn)換,正文僅設(shè)置使用了SimSun(這樣文中的英文字符也是用SimSun生成的),導(dǎo)致文檔字體千篇一律,整個(gè)文檔看起來過于“樸素”。
當(dāng)我從svn上取得最新的源代碼,重新編譯使用后,發(fā)現(xiàn)這個(gè)問題已經(jīng)不存在了,F(xiàn)在 FOP 終于可以支持字體簇了,參見,
FontSelectionStrategy
。
從源代碼編譯的方法參見:
Apache FOP: Building from Source Code
生成的pdf效果如下。
![]()
圖
中,上面部分是FOP生成的,下面是用XEP來生成的。FOP生成的文檔依然有缺陷,中英字符的對(duì)齊方式與XEP有不同,如果用標(biāo)準(zhǔn)的英文書寫所用四線格
來說明的話,在FOP中生成的中文底部是與英文底線持平的,而在XEP,中文相對(duì)來說向上移了一格,看起來也比較美觀。
其它中文問題,如換行時(shí)標(biāo)點(diǎn)位置判斷的問題,list的前面的符號(hào)顯示問題,還沒有進(jìn)行測(cè)試。
本文來自ChinaUnix博客,如果查看原文請(qǐng)點(diǎn):http://blog.chinaunix.net/u/1096/showart_1808039.html |
|