2012-11-29 79 views
2

我使用iTextSharp的方案,其中包括代碼爲什麼我的字體沒有註冊?

FontFactory.RegisterDirectories(); 

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

當我運行它(在一個CentOS箱使用單聲道),日誌只顯示核心PostScript字體:

  • ZAPFDINGBATS
  • 次羅馬
  • 次斜體
  • 黑體,boldoblique
  • 快遞-boldoblique
  • 黑體粗體
  • 黑體
  • 快遞斜
  • 黑體斜
  • 快遞粗體
  • 倍-BOLDITALIC
  • 快遞
  • 倍粗體
  • 符號

但我在我的/usr/share/fonts目錄樹(這是RegisterDirectories函數的代碼中提到的目錄之一)下有156個TTF文件。爲什麼這些不被註冊?

回答

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特有的,所以我們可以依賴環境來告訴我們在哪裏可以找到字體。你的問題告訴我們,單聲道不支持這個,所以你必須使用FontFactory.RegisterDirectory("/usr/share/fonts");

相關問題