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