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

时间:2013-12-12 12:10:58

标签: c# fonts itextsharp

我正在使用font.BaseFont来获取使用

注册的BaseFont字体
var fontPath = Environment.GetEnvironmentVariable("SystemRoot") + "\\fonts\\"+fontname+".ttf";
FontFactory.Register(fontPath);

在大多数情况下它可以工作,但是在某些字体的情况下,它会返回Null。为什么会这样?

编辑1:

使用

创建新的Font
     FontFactory.GetFont(fontName, BaseFont.IDENTITY_H, BaseFont.EMBEDDED);

然后我使用font.BaseFont获取BaseFont,以便为Font设置Overcontent

1 个答案:

答案 0 :(得分:1)

在大多数情况下,字体的实际名称与用于字体的文件名不同。您需要按照我的书中的说明检查使用FontFactory注册的名称。有关示例,请参阅http://tinyurl.com/itextsharpIIA2C11;在该示例中,我们有一个字体cmr10,其名称为Computer Modern Regular。如果对GetFont()使用cmr10方法,则不会获得该字体。

这是一个使用该特定字体将注册字体的名称添加为ParagraphDocument的示例:

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

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