当前位置: 首页 > 知识库问答 >
问题:

XSL-FO:如何添加“helvetica neue”字体并输出到pdf

梁丘波鸿
2023-03-14

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

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

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

“对系统字体的支持依赖于JavaAWT子系统的字体度量信息。通过操作系统注册,AWT子系统知道系统上有哪些字体,以及每种字体的字体度量。

当使用支持系统字体(见上表)的渲染器时,如果您缺少一种字体,您只需将它安装在操作系统中,它就可以用于这些渲染器。请注意,对于只支持自定义字体的输出格式,如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

谢谢。

共有1个答案

颛孙沈义
2023-03-14

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

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

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

此配置片段取自问题中链接的同一字体配置页面:

<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>

您可以在此答案中找到有关字体配置的其他详细信息。

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

2.0 版添加了 OpenType 字体支持。

 类似资料:
  • 我想在我的标签上使用属性 这是我的xml的一个例子:

  • 我已经解决了如何合并两个XML文件并修改匹配的属性。 我现在正在努力解决如果file1中不存在file2节点,如何添加file2节点(基于属性名) 这是我拥有的xsl文件: 我找到了如何使用XSLT合并两个xml文件,但无法解决如何将提议解决方案应用于我的xsl。有人能帮忙吗?

  • 我正在编写一个递归过程来返回字符串的排列 我将所需的输出打印到控制台。但是,我希望将输出添加到一个数组中,以便能够对其进行进一步的处理。怎么才能实现? 我得到:[ABCD][ABDC][ACBD][ACDB][ADBC][ADCB] 我想要:[ABCD、ABDC、ACBD、ACDB、ADBC、ADCB,]

  • 问题内容: 当我执行此代码(还有更多)时,在每一行之后和页面开头都得到 $。我正在用nedit打开文本文件。 问题答案: 这 恰恰 是writeUTF所记录的。如果您不希望出现这种情况,请不要提出要求。 首先,将 两个字节写入输出流,就像通过给出要跟随的字节数的方法一样。该值是实际写入的字节数,而不是字符串的长度。按照长度,使用修改后的字符的UTF-8编码,依次输出字符串的每个字符。

  • 任务非常简单:防止“donothyphenatethisextremelyword”在 的块内被连字符。我尝试过: 结果: 真的没有办法吗?任何帮助将不胜感激。

  • 尝试将字母数字字符串中的数字增加一个数字n,并返回结果,增加的数字在字符串索引中的相同位置。如果数字为9,则输出应换行为0、1、2、3、,。。。。依此类推到9`ie String input=“abc123de45”n=2 print=“abc345de67”