我有一個包含名稱,其中的一些使用未在缺省PDF字體(黑體/ Arial字體)表示的字符/字形的列表的XML文件:在PDF顯示Unicode字符被Apache產生FOP
<name>Paul</name>
<name>你好</name>
我正在使用XSLT和Apache FOP處理此文件以生成列出名稱的PDF文件。目前,我得到以下警告在控制檯上和中國字符由##在PDF代替:
Jan 30, 2016 11:30:56 AM org.apache.fop.events.LoggingEventListener processEvent WARNING: Glyph "你" (0x4f60) not available in font "Helvetica".
Jan 30, 2016 11:30:56 AM org.apache.fop.events.LoggingEventListener processEvent WARNING: Glyph "好" (0x597d) not available in font "Helvetica".
我看過的文檔,它似乎表明,可用的選項有:
- 使用OpenType字體 - 除FOP不支持此外。
- 僅針對文本的非ASCII部分切換爲其他字體。
我不想爲每種語言使用不同的字體,因爲會出現中英文混合的PDF,而且據我所知,無法計算出哪些是XSLT中的哪一種/ XSL-FO。
是否可以嵌入單個字體來覆蓋所有情況?目前我只需要英文和中文,但未來我可能需要延長這一點。
我在Ubuntu上使用Apache FOP 2.1和Java 1.7.0_91。我已經看到了一些類似主題的早期問題,但大多數似乎都使用了Apache FOP的更老版本(例如0.95或1.1),並且我不知道在此期間是否有任何更改/改進。
編輯:我的問題是不同的(我認爲)建議的副本。我切換到我的FOP配置使用下面的代碼使用Ubuntu Font Family:
<font kerning="yes" embed-url="../fonts/ubuntu/Ubuntu-R.ttf" embedding-mode="full">
<font-triplet name="Ubuntu" style="normal" weight="normal"/>
</font>
<font kerning="yes" embed-url="../fonts/ubuntu/Ubuntu-B.ttf" embedding-mode="subset">
<font-triplet name="Ubuntu" style="normal" weight="bold"/>
</font>
不過,我仍然得到「字形不可用」警告:
Jan 31, 2016 10:22:59 AM org.apache.fop.events.LoggingEventListener processEvent
WARNING: Glyph "你" (0x4f60) not available in font "Ubuntu".
Jan 31, 2016 10:22:59 AM org.apache.fop.events.LoggingEventListener processEvent
WARNING: Glyph "好" (0x597d) not available in font "Ubuntu".
我知道Ubuntu的常規有這兩個字形,因爲它是我的標準系統字體。
編輯2:如果我使用GNU Unifont,字形顯示正確。但是,它似乎是一種更專注於控制檯而不是文檔的字體。
如何爲2與1有什麼不同? https://xmlgraphics.apache.org/fop/2.0/fonts.html建議OpenType ttf/otf字體支持得很好,所以你應該先嚐試一下。您可能無法使用所有OpenType功能,但如果您首先依賴這些功能,那麼FOP不會是您選擇的技術。 –
在類似的問題中,用戶使用Arial Unicode成功報告包含不同語言的文檔(我確信其他字體也是)。 – lfurini
Arial Unicode由於許可限制(我需要能夠將任何嵌入字體用於該軟件)發佈給我。我嘗試過使用Ubuntu Regular,當我在我的系統上使用它時,它肯定會正確顯示它,但我仍然收到有關字形不可用的警告。 – pwaring