C# ItextSharp Font.BaseFont为某些字体返回Null

C# ItextSharp Font.BaseFont为某些字体返回Null,c#,fonts,itextsharp,C#,Fonts,Itextsharp,Im使用font.BaseFont获取使用注册的字体的BaseFont var fontPath = Environment.GetEnvironmentVariable("SystemRoot") + "\\fonts\\"+fontname+".ttf"; FontFactory.Register(fontPath); 在大多数情况下它可以工作,但在某些字体中它返回Null。为什么 编辑1: 新的字体是使用 FontFactory.GetFont(fontName, BaseFo

Im使用
font.BaseFont
获取使用注册的字体的
BaseFont

var fontPath = Environment.GetEnvironmentVariable("SystemRoot") + "\\fonts\\"+fontname+".ttf";
FontFactory.Register(fontPath);
在大多数情况下它可以工作,但在某些字体中它返回Null。为什么

编辑1:

新的
字体
是使用

     FontFactory.GetFont(fontName, BaseFont.IDENTITY_H, BaseFont.EMBEDDED);

然后我使用
font.BaseFont
获取BaseFont,这样我就可以设置
font
Overcontent

在大多数情况下,字体的实际名称与用于字体的文件名不同。您需要检查哪些名称已注册到
FontFactory
,如我的书中所述。有关一些示例,请参见;在该示例中,我们有一个字体
cmr10
,其名称为
Computer Modern Regular
。如果将
GetFont()
方法与
cmr10
一起使用,则无法获得该字体

这是一个使用特定字体将注册字体的名称添加为
段落
文档
的示例:

foreach (String f in FontFactory.RegisteredFonts) {
    document.Add(new Paragraph(f, FontFactory.GetFont(f, "", BaseFont.EMBEDDED)));
}

如果不想依赖真实姓名,还可以使用别名注册每种字体(查找相应的
register()
方法).

您是否验证您的计算机上是否有这些字体?另外:
FontFactory
是关于创建
Font
对象,而问题是关于
BaseFont
。这需要澄清。问题不完整。@KevinHendricks是这些字体通过字体选择显示Dialogue@BrunoLowagie参见编辑您如何知道
fontname
是字体的实际PostScript名称?我将发布一个带有示例的答案。在窗口创建事件中,我调用了一个名为Register Fonts的方法,该方法将使用FontFactory.Regsiter(fontpath)注册所有字体(在Windows Fonts文件夹中扩展名为.ttf),我已更新了答案。也许您想使用自己选择的别名,而不是实际的PostScript名称。这些都记录在我的书中,不是吗?我向FontFactory注册了fonts文件夹中的所有字体。然后,用户可以从GTK字体对话框中选择字体。然后,我尝试使用fontname创建字体,并获取basefont以用于过多内容。我不明白为什么与名称冲突。请给我们一个已注册的字体程序示例未返回(因为它为null)。请用一个能让我们理解问题的例子来改进问题。否则没有人能回答这个问题。我已经添加了所有需要的代码。请查看编辑,希望现在一切都清楚了