[通过Java或C#提取TFF文件内部信息

问题描述 投票:-1回答:1

目前,我正在开发与TTF字体相关的软件。我需要创建一些工具来提取字距和连字信息,该信息包含在TTF(给定字体)文件中。

我搜索了很多资源,但找不到任何有用的信息。

对Java或C#有何看法?

谢谢。

java c# true-type-fonts kerning ligature
1个回答
0
投票

您尚未说明要使用的平台/框架/库。而且您追求的东西有些复杂。

TrueType / OpenType长期以来一直支持带有字距调整数据的'kern'表。

Windows GDI具有GetKerningPairs()函数,该函数返回字体的“字距”表(如果存在)中的所有数据。其局限性在于它不支持Unicode补充平面字符(代码点U + 10000及更高)。

Windows DirectWrite具有类似的API:IDWriteFontFace1::GetKerningPairAdjustments()。但是,它可能不完全是您想要的:它不列出字体的字距对,而是采用字形序列并返回对该序列的调整。 DWrite还具有IDWriteFontFace1::HasKerningPairs(),它可以告诉您字体在“字距”表中是否还具有字距对。

但是这里增加了复杂性:'kern'表是较老的技术,后来被OpenType Layout机制所取代。字体可以具有'GPOS' table,用于指定不同类型的字形位置调整:

  • 调整单个字形前进宽度或x,y位置
  • 调整前进/一对字形上的位置
  • 在特定情况下调整单个字形或一对字形的位置

可能有许多不同的原因进行位置调整;您感兴趣的案例“字距调整”将链接到“字距”功能标签。您可以使用IDWriteFontFace::TryGetFontTable之类的API来检索GPOS表数据并自行解析。您需要检查GPOS表的FeatureList subtable,以找到与“ kern”特征相关联的FeatureTable,并(如果存在)从该特征表获取查找索引数组。然后,您可以在GPOS表的LookupList subtable中查找以找到指定的查找表。然后,您需要为每个指定的Lookup表解析Lookup子表,以确定确切地作用于哪些字形或字形对。

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