2

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

FontFactory.RegisterDirectories();

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

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

  • 电击蝙蝠
  • 时代罗马
  • 倍斜体
  • helvetica-boldoblique
  • 快递粗体字
  • 黑体字
  • 海尔维提卡
  • 快递倾斜
  • helvetica-oblique
  • 快递粗体
  • 时代粗体
  • 信使
  • 时代大胆
  • 象征

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

4

1 回答 1

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");

于 2012-12-02T10:03:45.950 回答