自定义字体中缺少字符

时间:2013-11-07 20:10:12

标签: itextsharp

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

1 个答案:

答案 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}}对象。

相关问题