1

我们正在使用 iTextSharp 使用自定义字体创建 PDF,我遇到了 unicode 字符 2120(SM,Service Mark)的问题。问题是字形不在自定义字体中。有没有办法可以为 PDF 中的字段指定后备字体?我们尝试使用 Verdana 添加一个文本字段,以便表单中嵌入了辅助字体,但这似乎没有帮助。

4

1 回答 1

2

首先,您需要找到具有所需字符的字体(ttf、otf、...)。然后您可以使用FontSelector该类并将您想要使用的不同字体添加到此选择器(请参阅FontSelectionExample)。现在您可以处理每个字符串:

FontSelector selector = new FontSelector();
selector.addFont(f1);
selector.addFont(f2);
Phrase ph = selector.process(some_string);

FontSelector返回一个短语,该短语由Chunks 和 font组成,f1用于第一个字体中可用的所有字形,以及Chunks 和 fontf2用于不能是 font inf1但存在于 中的字形f2

如果你想要这个例子的 C# 端口,请参考第 11 章

更新

使用 aFontSelector也适用于表单的上下文(只要我们谈论的是 AcroForm 技术)。这真的很简单:您只需要在表单中添加替换字体:

AcroFields form = stamper.getAcroFields();
form.addSubstitutionFont(bf1);
form.addSubstitutionFont(bf2);

现在表单中定义的字体具有偏好,但如果该字体不能显示特定的字形,它将查看bf1,然后查看bf2,依此类推。您可以在此处找到演示此功能的示例。

请注意,第一个示例和第二个示例之间存在差异。在第一个示例中,我们使用了一个Font对象,在第二个示例中,我们使用了一个BaseFont对象。

于 2013-11-08T10:11:50.850 回答