通过WinAPI提取字体版本

Extracting Font Version via WinAPI

本文关键字:版本 字体 提取 WinAPI 通过      更新时间:2023-10-16

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

 Font Name: Fontawesome
 Version: Version 4.3.0 2015

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

任何想法?

注意,如果你在谈论字体预览程序;它不是"Windows",它实际上只是一个与操作系统捆绑在一起的小实用程序。为了向您显示这些信息,它会从字体的name表中查询信息(在这里进行说明,以理解其结构,并在"名称id"一节中解释每个record id的语义)。

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

并且要明确: ttfotf字体都是OpenType字体,第一个只是"使用TrueType表布局编码的轮廓的OpenType",第二个是"使用CFF数据块编码的轮廓的OpenType"。如果你不知道这两者之间的区别是什么,那是因为区别并不重要:就好像我们决定将PNG文件称为nilili文件,这取决于它们是否使用隔行。

(ttf文件扩展名只是早于OpenType规范本身,所以当每个人都切换到OpenType字体时,扩展名被保留以向后兼容。几十年过去了,事实证明,继续这样做比决定"何时摆脱它"更容易,所以我们被同一种文件使用两个扩展名所困。历史!)