我有一个包含名单列表的XML文件,其中一些名称使用的字符/字形未以默认PDF字体(Helvetica / Arial)表示:
<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".
我查看了文档,似乎表明可用的选项是:
我不想为每种语言使用不同的字体,因为会有中英文混合的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 Regular有这两个字形,因为它是我的标准系统字体。
编辑2:如果我使用GNU Unifont,则字形显示正确。但是,它似乎是一种更倾向于使用控制台而不是文档的字体。
答案 0 :(得分:4)
如果你找不到合适的字体支持 中文和英文(或者你找到了一个,但你不太喜欢它的拉丁字形),请记住font-family
可以包含以逗号分隔的名称列表,按顺序使用。
因此,您可以先列出所需的英文文本字体,然后列出中文文本的字体:
<!-- this has # instead of the missing Chinese glyphs -->
<fo:block font-family="Helvetica" space-after="1em" background-color="#AAFFFF">
Paul 你好</fo:block>
<!-- this has all the glyphs, but I don't like its latin glyphs -->
<fo:block font-family="SimSun" space-after="1em" background-color="#FFAAFF">
Paul 你好</fo:block>
<!-- the best of both worlds! -->
<fo:block font-family="Helvetica, SimSun" space-after="1em" background-color="#FFFFAA">
Paul 你好</fo:block>
输出如下:
答案 1 :(得分:1)
我的问题的答案是使用GNU Unifont,其中:
或者为英文和中文PDF制作单独的模板,并为每种PDF使用不同的字体。