如果我说:
var georgia = FontFactory.GetFont("Georgia Regular", 10f);
它没有用。当我检查变量georgia的状态时,它将Family
属性设置为值UNDEFINED
并将其FamilyName
属性设置为Unknown
。
它只有在我实际加载并注册字体文件然后得到它时才有效:
FontFactory.Register("C:\\Windows\\Fonts\\georgia.ttf", "Georgia");
var georgia = FontFactory.GetFont("Georgia", 20f);
为什么?
答案 0 :(得分:8)
iText是用Java编写的,这意味着它与平台无关。它附带14个AFM文件,其中包含14种标准类型1字体的指标(4种口味的Helvetica,4种口味的Times Roman,4种口味的Courier,Symbol和ZapfDingbats)。
只要您需要其他字体,就需要通过将路径传递到字体目录或实际字体的路径来注册字体文件。 Linux上的字体目录与Windows上的字体目录不同(在Linux上没有" C:/ Windows / fonts")。还有一种方法registerDirectories()
,用于查看您当前正在使用的操作系统,并注册所有常见的嫌疑人' (iText根据操作系统猜测字体路径)。这种方法很昂贵:它会记录它找到的所有字体,这会花费时间和内存。
注册字体后,您可以向FontFactory
询问注册名称。这显示在FontFactoryExample中。您会注意到getRegisteredFonts()
方法与getRegisteredFamilies()
方法之间的区别。
补充说明:原始问题是关于用C#编写的iTextSharp。 iTextSharp从Java移植,并尽可能保持与用Java编写的原始版本尽可能接近。然而,同样的理由适用:如果iTextSharp必须扫描字体目录,启动应用程序会慢得多。在大多数应用程序中,您只需要少量字体;注册Windows字体目录中的所有可用字体都是过度的。