我有一个使用iTextSharp的程序,其中包含代码
FontFactory.RegisterDirectories();
foreach (string fontname in FontFactory.RegisteredFonts)
{
Log.Info("**** Found registered font: " + fontname);
}
当我运行它时(在CentOS盒子上使用Mono),日志只显示核心PostScript字体:
但是我的/usr/share/fonts
目录树下有156个TTF文件(这是RegisterDirectories
函数代码中提到的目录之一)。为什么不注册?
答案 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");