如何以编程方式确定字体是否为CFF?

时间:2016-05-19 18:29:15

标签: winapi opentype

好吧,我承诺这是我最接近“代码给我”的问题:)如果这没有鼓起任何回应我会咬紧牙关并建立OTF解析器,用于检查是否存在CFF表。

此信息在Windows字体预览中可用('TrueType轮廓'与'PostScript轮廓'),因此可能有一个WinAPI功能,但是如果我能找到它就该死。< / p>

有人想到吗?

ps - 如果只能检查已安装的字体,那么这不是一个破坏者,但检查文件会更好。

4 个答案:

答案 0 :(得分:3)

您可以使用GetFontData功能执行此操作。

创建相关字体并将其选择为DC,然后调用GetFontData查询CFF table的大小。只有在字体具有PostScript轮廓时才会成功。

DWORD dwSize = GetFontData(hdc, ' FFC', 0, nullptr, 0);
if (dwSize && dwSize != GDI_ERROR)
{
    // has PostScript outlines
}

答案 1 :(得分:1)

OpenType spec说:

  

包含CFF数据的OpenType字体应该使用标签“OTTO&#39;作为sfnt版本号。

所以,如果文件的前四个字节拼写&#34; OTTO&#34;它使用PostScript轮廓。它可以更简单!?经过测试和测试到目前为止工作,但我最终可能会使用GetFontData。

答案 2 :(得分:0)

你最好的选择似乎是直接从字体文件本身读取字体表。假设您已经熟悉字体表,此示例here将提供一个良好的开端。如果没有,请阅读文章底部参考部分中的链接。

答案 3 :(得分:0)

具有CFF块的OpenType文件的前4个字节是“OTTO”。