2

コードを含むiTextSharpを使用するプログラムがあります

FontFactory.RegisterDirectories();

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

(CentOSボックスでMonoを使用して)実行すると、ログにはコアPostScriptフォントのみが表示されます。

  • zapfdingbats
  • times-roman
  • 倍イタリック
  • helvetica-boldoblique
  • 宅配便-boldoblique
  • helvetica-太字
  • helvetica
  • 宅配便-斜め
  • helvetica-斜体
  • 宅配便-太字
  • 時代-大胆
  • 宅配便
  • タイムズボールド
  • シンボル

しかし、ディレクトリツリー(関数/usr/share/fontsのコードで言及されているディレクトリの1つ)の下に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 に答える