8

我尝试使用系统上安装的OTF字体,但失败了:

FontFamily family = new FontFamily(name_for_my_font);

我试图在系统中列出我所有的字体,实际上我还没有看到需要的字体:

foreach (FontFamily font in System.Drawing.FontFamily.Families)
{
Console.WriteLine(font);
}

但我可以在Fonts文件夹中看到我的字体。它具有OTF扩展名。也许这就是问题所在?我只能看到TTF字体。但为什么?如何从我的程序中访问 OTF 字体?

更新:抱歉问题出在OTF访问而不是TTF!我已在回答中进行了更正

4

2 回答 2

9

问题是 OpenType 字体有多种风格,一种基于 TrueType 轮廓,另一种基于 PostScript Type 1 轮廓。Windows GDI+ 图形 API 不支持 PostScript 类型 1 轮廓。这有点讽刺,因为 OpenType 字体格式是由微软创建的,因为无法从 Apple 获得某些字体技术的许可。

因此,如果 Windows 应用程序基于 GDI+,它将无法渲染具有 PostScript 类型 1 轮廓或 PostScript 类型 1 字体的 OpenType 字体。不幸System.Drawing的是使用 GDI+ 实现。您唯一的选择是坚持使用 TrueType 轮廓的字体。

(或者,如果你真的很绝望,你可以 P/Invoke 到“经典”GDI 并将字体渲染为位图。)

于 2012-05-14T13:00:34.107 回答
0

尝试使用 System.Drawing.Text.InstalledFontCollection http://msdn.microsoft.com/en-us/library/system.drawing.text.installedfontcollection.aspx

于 2012-05-14T12:30:05.523 回答