为什么我的字体没有注册?

时间:2012-11-29 21:38:19

标签: fonts itextsharp

我有一个使用iTextSharp的程序,其中包含代码

FontFactory.RegisterDirectories();

foreach (string fontname in FontFactory.RegisteredFonts)
{
   Log.Info("**** Found registered font: " + fontname);
}

当我运行它时(在CentOS盒子上使用Mono),日志只显示核心PostScript字体:

  • ZAPFDINGBATS
  • 倍罗马
  • 倍斜体
  • 黑体-boldoblique
  • 快递-boldoblique
  • 黑体粗体
  • 黑体
  • 快递斜
  • 黑体斜
  • 快递粗体
  • 倍-BOLDITALIC
  • 快递
  • 倍粗体
  • 符号

但是我的/usr/share/fonts目录树下有156个TTF文件(这是RegisterDirectories函数代码中提到的目录之一)。为什么不注册?

1 个答案:

答案 0 :(得分:4)

iText和iTextSharp之间存在细微差别。

在iText中,registerDirectories()看起来像这样:

public int registerDirectories() {
    int count = 0;
    String windir = System.getenv("windir");
    String fileseparator = System.getProperty("file.separator");
    if (windir != null && fileseparator != null) {
        count += registerDirectory(windir + fileseparator + "fonts");
    }
    count += registerDirectory("/usr/share/X11/fonts", true);
    count += registerDirectory("/usr/X/lib/X11/fonts", true);
    count += registerDirectory("/usr/openwin/lib/X11/fonts", true);
    count += registerDirectory("/usr/share/fonts", true);
    count += registerDirectory("/usr/X11R6/lib/X11/fonts", true);
    count += registerDirectory("/Library/Fonts");
    count += registerDirectory("/System/Library/Fonts");
    return count;
}

然而,在iTextSharp中,该方法如下所示:

public virtual int RegisterDirectories() {
    string dir = Path.Combine(
        Path.GetDirectoryName(
            Environment.GetFolderPath(Environment.SpecialFolder.System)), "Fonts");
    return RegisterDirectory(dir);
}

Java与平台无关,因此我们必须寻找“常见的嫌疑人”。 C#是特定于Windows的,因此我们可以依赖环境来告诉我们在哪里可以找到字体。您的问题告诉我们Mono不支持此功能,因此您必须使用FontFactory.RegisterDirectory("/usr/share/fonts");