Vb.net iText 5 BaseFont.Create失败,编码错误无法识别

Vb.net iText 5 BaseFont.Create失败,编码错误无法识别,vb.net,fonts,itext,Vb.net,Fonts,Itext,我试图将NeutraText字体添加到使用iText5创建的PDF文档中,但收到一个错误,表示无法识别编码。错误发生在下面的最后一行 Dim fontDir = Server.MapPath("~/Fonts") FontFactory.RegisterDirectory(fontDir) Dim myFontBase = BaseFont.CreateFont("neutratext-lightalt", BaseFont.IDENTITY_H, True) 确切的错误是 “无法识别带有'I

我试图将NeutraText字体添加到使用iText5创建的PDF文档中,但收到一个错误,表示无法识别编码。错误发生在下面的最后一行

Dim fontDir = Server.MapPath("~/Fonts")
FontFactory.RegisterDirectory(fontDir)
Dim myFontBase = BaseFont.CreateFont("neutratext-lightalt", BaseFont.IDENTITY_H, True)
确切的错误是

“无法识别带有'Identity-H'的字体'neutratext lightalt'”


我尝试了一些基本字体编码,但似乎都失败了。任何查找字体的人都可以找到它

我下载了一本教科书.otf,我运行了以下代码:

public static final String FONT = "resources/fonts/Neutra Text Book.otf";

public static void main(String[] args) throws IOException, DocumentException {
    BaseFont bf = BaseFont.createFont(FONT, "", BaseFont.EMBEDDED);
    String[] encoding = bf.getCodePagesSupported();
    for (int i = 0; i < encoding.length; i++) {
        System.out.println(encoding[i]);
    }
}
关于这一行:

BaseFont bf = BaseFont.createFont("neutratext-lightalt", "", BaseFont.EMBEDDED);
你收到的错误并不意味着你有你最初认为的错误编码。这只是意味着在创建
BaseFont
对象时,
不能将“neutratext lightalt”
用作参数。(顺便说一下:当我检查
“Neutra Text Book.otf”的字体名时,
,我得到的结果是
“NeutraText Book”
,而不是
“NeutraText lightalt”

要解决此问题,您需要以下内容:

public static final String FONT = "resources/fonts/Neutra Text Book.otf";
BaseFont bf = BaseFont.createFont(FONT, BaseFont.IDENTITY_H, BaseFont.EMBEDDED);
我知道您使用
FontFactory
注册了字体,但是当您这样做时,您应该使用
FontFactory.getFont()
方法从该
FontFactory
获取
Font
对象,而不是使用
BaseFont.createFont()
方法

更新:

在评论中,OP声称提议的解决方案不起作用

以下屏幕截图应足以证明此声明不正确:


起初我确实使用了FontFactory.getFont(),但当PDF呈现时,字体并没有显示出来。这就是为什么我现在尝试嵌入,看看它是否有帮助。除非您另有建议,否则请解释“未按应有的方式显示”,因为您对应显示内容的假设可能是错误的。这不是一种能够显示比拉丁和希腊字符多得多的字体。我正在使用这种字体创建一个姓名列表,例如“Bob,Jane,Mary”。呈现的字体看起来像Arial而不是NeutratText。我将字体改为SegoUI,可以看到应该使用的字体。查看使用哪种字体的最佳方法是查看文档属性>字体。请注意,当无法找到所选字体时,Helvetica(非常类似于Arial)将用作默认字体。我假设您不正确地实例化了NeutraText字体。我将用NeutraText字体做一个例子,并用屏幕截图更新我的答案。原因可能是找不到字体(位置错误或安装错误),或者使用了错误的字体名称。
public static final String FONT = "resources/fonts/Neutra Text Book.otf";
BaseFont bf = BaseFont.createFont(FONT, BaseFont.IDENTITY_H, BaseFont.EMBEDDED);