如何在 Apache FOP 中自动创建 italic/bold 字体?

How to create italic/bold fonts automatically in Apache FOP?

假设我正在使用 Apache FOP 创建一个 PDF 文件。 PDF 中的所有字符应为 Times New Roman Italic。由于我的系统中没有这样的字体,Apache FOP 将尝试在 /data/fonts 中查找字体,该字体由 fop.xconf.

设置
<directory>/data/fonts</directory>

然而,/data/fonts中只有一个文件,即Times New Roman Regular.ttf。是的,没有 Times New Roman Italic.ttf 也没有 Times New Roman Bold.ttf

ls /data/fonts 
'Times New Roman Regular.ttf'

在这种情况下,Apache FOP 报告它找不到 Times New Roman Italic 字体,它又回到默认字体,它不是 Times New Roman 也不是斜体。

我可以通过将 Times New Roman Italic.ttf 放入 /data/fonts 来解决问题,但是如果我没有该字体的特定 italic/bold 版本怎么办?据我所知,有些字体根本没有特定的 bold/italic 版本。 Apache FOP 是否可以从常规字体自动创建 italic/bold 样式,即使结果不如特定的 italic/bold 字体?

如果您使用的是 FOP 2.2 版,则有一个配置选项可以启用自动创建 模拟 斜体和粗体字形:simulate-style.

此示例将 styleweight 的四种组合映射到 相同的 TrueType 字体,在需要时加粗和倾斜字形:

<font kerning="yes" embed-url="Times.ttf" simulate-style="true">
  <font-triplet name="Times" style="normal" weight="normal"/>
  <font-triplet name="Times" style="italic" weight="normal"/>
  <font-triplet name="Times" style="normal" weight="bold"/>
  <font-triplet name="Times" style="italic" weight="bold"/>
</font>

请注意,注册所有不同的 font-triplet 元素非常重要;如果你只有 <font-triplet name="Times" style="normal" weight="normal"/> 字体替换机制将 首先 将粗体、斜体和粗斜体映射到注册的正常变体,然后 然后 FOP 将模拟样式(什么都不做)。