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