访问 OTF 字体

本文关键字:字体 OTF 访问 | 更新日期: 2023-09-27 18:34:01

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

FontFamily family = new FontFamily(name_for_my_font);

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

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

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

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

访问 OTF 字体

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

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

(或者,如果你真的不屑一顾,你可以P/Invoke到"经典"GDI,并将字体呈现为位图。

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