我们正在使用 iTextSharp 使用自定义字体创建 PDF,我遇到了 unicode 字符 2120(SM,Service Mark)的问题。问题是字形不在自定义字体中。有没有办法可以为 PDF 中的字段指定后备字体?我们尝试使用 Verdana 添加一个文本字段,以便表单中嵌入了辅助字体,但这似乎没有帮助。
问问题
1767 次
1 回答
2
首先,您需要找到具有所需字符的字体(ttf、otf、...)。然后您可以使用FontSelector
该类并将您想要使用的不同字体添加到此选择器(请参阅FontSelectionExample)。现在您可以处理每个字符串:
FontSelector selector = new FontSelector();
selector.addFont(f1);
selector.addFont(f2);
Phrase ph = selector.process(some_string);
将FontSelector
返回一个短语,该短语由Chunk
s 和 font组成,f1
用于第一个字体中可用的所有字形,以及Chunk
s 和 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 回答