XSL-FO:如何添加 "helvetica neue" 字体并输出为 pdf

XSL-FO: how to add "helvetica neue" fonts and output to pdf

当使用 XSL-FO (Apache FOP) 生成 pdf 时,无法使用来自 windows 7 c:\windows\fonts* 的字体,我是否正确?

我刚刚安装了 OTF 格式的 "helvetica neue" 字体。

根据 https://xmlgraphics.apache.org/fop/trunk/fonts.html

"对系统字体的支持依赖于 Java AWT 子系统的字体规格信息。通过操作系统注册,AWT 子系统知道系统上可用的字体以及每种字体的字体规格。

当使用支持系统字体的渲染器(见上文 table)并且您缺少一种字体时,您可以将它安装在您的操作系统中并且它应该可用于这些渲染器。请注意,这不适用于仅支持自定义字体的输出格式,例如 PDF 或 PostScript。"

如果我的理解是正确的,就是说如果我的渲染是PDF(意思是输出是pdf??),那么我无法通过AWT/OS访问字体,因此,我不会能够使用 windows 7 种字体在 PDF 中生成带有此类字体的文本吗?

----------------------------更新,这只适用于ttf字体,不适用于otf。 不确定如何让 otf 字体工作。

----------------------------更新:20150402:

使用 FOP 1.1:

我从以下位置下载了这个特别的免费 helvetica neue 字体: http://www.ephifonts.com/free-helvetica-font-helvetica-neue.html

我将 fop 配置为使用 fop.xconf 但我在处理 ttf 文件时遇到错误,我不知道如何使用 fontforge 编辑字体 ttf 文件:

fop -c fop.xconf -xml xml.xml -xsl coversheet.xsl -pdf output.pdf

Apr 2, 2015 6:53:55 PM org.apache.fop.fonts.truetype.TTFFile readCMAP
SEVERE: Unsupported TrueType font: No Unicode or Symbol cmap table not    present. Aborting
Apr 2, 2015 6:53:55 PM org.apache.fop.events.LoggingEventListener    processEvent
WARNING: Unable to load font file: file:/C:/windows/FONTS/HelveticaNeue.ttf. Reason: java.io.IOException: TrueType font is not supported: file:/C:/windows/FONTS/HelveticaNeue.ttf

Apr 2, 2015 6:53:55 PM org.apache.fop.fonts.truetype.TTFFile getTTCnames
INFO: This is a TrueType collection file with 4 fonts

谢谢

(初步披露:我是FOP开发者)

Am I correct that it's not possible to use fonts from windows 7 c:\windows\fonts* when using XSL-FO (Apache FOP) to generate a pdf?

字体需要配置才能被FOP识别和使用,但是配置可以真的简单:你可以告诉 FOP 查看特定目录中的所有字体文件(甚至递归),或者只是在 "usual" 位置查找字体。

此配置片段取自您问题中链接的同一个 font configuration page

<renderers>
  <renderer mime="application/pdf">
     <fonts>
        <!-- register all the fonts found in a directory -->
        <directory>C:\MyFonts1</directory>

        <!-- register all the fonts found in a directory and all of its sub directories (use with care) -->
        <directory recursive="true">C:\MyFonts2</directory>

        <!-- automatically detect operating system installed fonts -->
        <auto-detect/>
     </fonts>
  </renderer>
</renderers>

您可以在 this answer 中找到有关字体配置的更多详细信息。

Update, this works only for ttf font, not otf. Not sure how I can get otf fonts to work.

2.0 版添加了 OpenType 字体支持。