目前,我正在研究 TTF 字体相关的软件。我需要创建一些工具来提取TTF(给定字体)文件中包含的字距和连字信息。
我搜索了很多资源,但找不到任何有用的信息。
对 Java 或 c# 有什么看法?
谢谢你。
您还没有指出您正在使用的平台/框架/库。你所追求的东西有一些复杂性。
TrueType/OpenType 长期以来一直支持带有字距调整数据的“kern”表。
Windows GDI 具有GetKerningPairs()函数,该函数从字体的“kern”表(如果存在)返回所有数据。它的局限性在于它不能支持 Unicode 补充平面字符(代码点 U+10000 及以上)。
Windows DirectWrite 有一个类似的 API:IDWriteFontFace1::GetKerningPairAdjustments()。但是,它可能不是您所追求的:它没有列出字体的字距调整对,而是采用字形序列并返回该序列的调整。DWrite 也有IDWriteFontFace1::HasKerningPairs()可以告诉你字体是否在“紧缩排”表中有紧缩对。
但这里增加了复杂性:“kern”表是较旧的技术,后来被 OpenType 布局机制取代。字体可以有一个“GPOS”表,指定不同类型的字形定位调整:
可能出于许多不同的原因进行定位调整;您感兴趣的案例“kerning”将链接到“kern”功能标签。您可以使用IDWriteFontFace::TryGetFontTable之类的 API来检索 GPOS 表数据并自行解析。您需要检查 GPOS 表的FeatureList 子表以找到与“kern”特征关联的 FeatureTable,并(如果存在)从该特征表中获取查找索引数组。然后可以在 GPOS 表的LookupList 子表中查找指定的 Lookup 表。然后,您需要为每个指定的查找表解析查找子表,以确定对哪些字形或字形对起作用。