通过WinAPI提取字体版本

时间:2015-08-12 16:04:51

标签: c++ winapi fonts

Windows控制面板字体窗口通常显示字体的版本信息。例如

 Font Name: Fontawesome
 Version: Version 4.3.0 2015

我在Windows API和SO中搜索过,但我还没有设法找到如何以编程方式提取它。

有什么想法吗?

1 个答案:

答案 0 :(得分:3)

请注意,如果您正在谈论字体预览程序;这不是“Windows”,实际上只是一个与操作系统捆绑在一起的小型实用程序。为了向您显示该信息,它会从字体的name表(spec here, for understanding its structure中查询信息,并在“名称ID”部分中解释每个record id的语义。)

要自己访问这些数据,请使用DirectWrite(而非GDI,因为它是古老而过时的)IDWriteFontFace::TryGetFontTable方法,并获取对name表的引用,每个有效的OpenType字体都包含该表。然后根据命名表的规范提取所需的值。

要明确: ttfotf字体都是OpenType字体,第一种是“使用TrueType表格布局编码轮廓的OpenType”和第二种是“使用CFF数据块编码轮廓的OpenType”。如果您不知道这两者之间的区别是什么,那是因为差异无关紧要:好像我们决定调用PNG文件nilili文件,具体取决于它们是否使用了隔行扫描或不。

ttf文件扩展名只是在OpenType规范本身之前,因此当每个人都切换到OpenType字体时,保留了扩展名以便向后兼容。几十年后,事实证明它更容易保持这样做而不是决定“何时摆脱它”,所以我们坚持使用两种扩展用于同一种文件。历史!)