gpt4 book ai didi

c# - 为什么 FontFactory.GetFont ("Known Font Name", floatSize) 不起作用?

转载 作者:行者123 更新时间:2023-11-30 13:56:53 38 4
gpt4 key购买 nike

如果我说:

var georgia = FontFactory.GetFont("Georgia Regular", 10f);

这是行不通的。当我检查变量 georgia 的状态时,它的 Family 属性设置为值 UNDEFINED 并且它的 FamilyName 属性设置为 未知

它只有在我实际加载并注册字体文件然后像这样获取它时才有效:

FontFactory.Register("C:\\Windows\\Fonts\\georgia.ttf", "Georgia");
var georgia = FontFactory.GetFont("Georgia", 20f);

这是为什么?

最佳答案

iText 是用 Java 编写的,这意味着它与平台无关。它附带 14 个 AFM 文件,其中包含 14 种标准 Type 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 字体目录中注册所有可用的字体会有点矫枉过正。

关于c# - 为什么 FontFactory.GetFont ("Known Font Name", floatSize) 不起作用?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24007492/

38 4 0