如何在Apache FOP中自动创建斜体/粗体字体?

时间:2017-12-31 02:59:32

标签: java pdf fonts 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中来解决问题,但是如果我没有该字体的特定斜体/粗体版本怎么办? AFAIK某些字体根本没有特定的粗体/斜体版本。 Apache FOP是否可以自动从常规字体创建斜体/粗体样式,即使结果不如特定的斜体/粗体字体好?

1 个答案:

答案 0 :(得分:1)

如果您使用的是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将模拟样式(什么都不做)。