我们正在使用iTextSharp使用自定义字体创建PDF,而我遇到了unicode字符2120(SM,Service Mark)的问题。问题是字形不在自定义字体中。有没有办法可以为PDF中的字段指定后备字体?我们尝试使用Verdana添加一个文本字段,以便表单中嵌入了辅助字体,但似乎没有帮助。
答案 0 :(得分:2)
首先,您需要找到具有所需字符的字体(ttf,otf,...)。然后,您可以使用FontSelector
类并将要使用的不同字体添加到此选择器(请参阅FontSelectionExample)。现在您可以处理每个字符串:
FontSelector selector = new FontSelector();
selector.addFont(f1);
selector.addFont(f2);
Phrase ph = selector.process(some_string);
对于第一种字体中可用的所有字形,FontSelector
将返回由Chunk
s和字体f1
组成的短语,以及Chunk
s字体f2
表示f1
中不能为字体的字形f2
,但FontSelector
中存在字形。
如果您想要此示例的C#端口,请参阅chapter 11。
<强>更新强>
使用AcroFields form = stamper.getAcroFields();
form.addSubstitutionFont(bf1);
form.addSubstitutionFont(bf2);
也可以在表单的上下文中工作(只要我们讨论的是AcroForm技术)。这很简单:你只需要在表单中添加替换字体:
bf1
现在,表单中定义的字体具有首选项,但如果该字体无法显示特定字形,则会查看bf2
,然后查看Font
,依此类推。您可以找到演示此功能的示例here。
请注意,第一个和第二个示例之间存在差异。在第一个示例中,我们使用BaseFont
对象,在第二个示例中,我们使用{{1}}对象。