使用 Windows 操作系统的 Directwrite 识别字体文件中支持的语言

问题描述 投票:0回答:3

我需要确定字体支持的语言,例如英语、阿拉伯语、印地语等。 我在微软的 DWrite 文档中搜索,https://learn.microsoft.com/en-us/windows/win32/directwrite/direct-write-portal但找不到任何东西。

如果有人帮助我在 Windows 中的字体文件中找到支持的语言,那将会非常有帮助。

在 MAC 中,我们可以使用 coreText 库使用 kCTFontLanguagesAttribute 找到它

 reinterpret_cast<CFArrayRef>(CTFontDescriptorCopyLocalizedAttribute(descriptor,kCTFontLanguagesAttribute, nullptr))

我正在为 Windows 寻找类似的东西

fonts
3个回答
1
投票

我认为 DWrite 中没有与 kCTFontLanguagesAttribute 返回的内容完全相同的内容。

我的理解是,CoreText API 首先在字体的“元”表中查找有关受支持语言的信息(如果字体中存在)。如果没有,它会在 OS/2 表 中查找提示(它可能会查看 Unicode 范围或代码页范围字段),或者使用 ICU 将字体的字符覆盖率(在 'cmap' 表 中)与其他 API 进行比较可以报告不同语言所需的字符列表。

DWrite 可以通过使用带有 DWRITE_INFORMATIONAL_STRING_DESIGN_SCRIPT_LANGUAGE_TAG 或 DWRITE_INFORMATIONAL_STRING_SUPPORTED_SCRIPT_LANGUAGE_TAG 的

IDWriteFont::GetInformationalStrings 方法,从字体的“元”表中返回相同的信息(如果字体中存在该信息)。

如果字体没有“元”表(并不罕见),那么您可以使用

IDWriteFont1::GetUnicodeRanges 来确定字体的字符覆盖范围,然后您应该能够调用 Windows ICU APIs 来获取不同语言的字符要求进行比较,就像 Mac API 所做的那样。


0
投票
使用

IDWriteFontSetDWRITE_FONT_PROPERTY_ID_SUPPORTED_SCRIPT_LANGUAGE_TAG 也可以获取支持的语言信息列表。


0
投票
我目前正在执行一项类似的任务,该任务需要我检索字体中支持的语言列表。在上面的答案中,您提到使用 IDWriteFontSet 接口(您使用它的 getPropertyValues api 吗?)和 DWRITE_FONT_PROPERTY_ID_SUPPORTED_SCRIPT_LANGUAGE_TAG。

我的问题是,当字体元表中未提及有关支持语言的信息时,这是否也提供列表。如果没有,那么你知道如何使用字体 unicode 范围值来查找支持的 lan 仪表。

© www.soinside.com 2019 - 2024. All rights reserved.