在SVG中呈现TrueType字体的问题

3

我在通过fop渲染生成pdf时,遇到了一个关于truetype字体在svg内的呈现问题。

最终生成的pdf中,这个字体显示为Times New Roman,而不是我预期的truetype字体。

文档的主要字体族使用Type 1字体,并且使用了我生成的字体度量标准,这些都显示正确。我认为,过去只是为图表添加了该字体的truetype版本。

奇怪的是,在某个阶段它还能正常工作,但现在似乎已经停止工作了,我现在无法让它重新工作,因为我不明白它一开始是如何工作的。为了尝试让它重新工作,我尝试了Java 6、Java 5和FOP 0.95、0.93以及最新的FOP trunk的不同组合,但都没有成功。即使在fop生成中启用了完整跟踪,我也看不到任何有关字体被替换为Times New Roman的提及,但我认为这是因为Batik负责此呈现。

我运行了一些示例Java代码,TrueType字体似乎被AWT正确识别,我相信这就是Batik所使用的。

我还尝试在fop.xconf文件中使用font-substitions,但似乎没有效果。在fop.xconf中,我只定义了Type 1字体和另外一个True Type字体Zapfdingbats,在pdf中都能正确处理。我是否应该在这里添加其他truetype字体,但是查看我们的版本历史记录,似乎过去没有出现过。

我是否遗漏了什么,因为我认为Batik会使用Windows ttf字体进行呈现,但似乎并没有起作用。任何帮助都将不胜感激。 谢谢, Crocked

1个回答

5
请看以下是在FOP用户邮件列表上提出的回答:

因此,为使其正常工作,您应该执行以下操作:

  • 使用FOP 0.95
  • 不要使用通过TTFReader生成的XML字体度量文件。这些已不再必要。
  • 确保您想要使用的字体已安装在您的操作系统中(这样Batik可以通过AWT/Java2D访问它们),并为FOP配置(最简单的方法:, http://xmlgraphics.apache.org/fop/0.95/fonts.html#basics
  • 在SVG中使用正确的字体系列名称。字体的PostScript名称将无效。

谢谢。我已经阅读了两篇文章,并且正在使用Windows字体名称,已经通过那段代码片段检查字体是否被Java找到。我缺少的是xconf中的<auto-detect/>标签。这是在0.95版本中首次添加的吗?现在它又可以正常工作了。感谢你的帮助,祝你圣诞愉快。 - Crocked
希望我在需要在FOP中设置SVG渲染时能找到这个。很好的总结! - Peter Lindqvist

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接