WPF具有Typography.Variants附加属性,允许您执行上标和下标。但是,它仅适用于某些字体。对于其他字体,完全忽略变体,并且正常显示文本。 (代码示例和屏幕截图here)
由于它无声地回归到无操作,我不知道出了什么问题;但我的用户会看到糟糕的行为。
有没有办法可以通过编程方式检测给定的字体是否支持Typography.Variants?如果是这样,如果用户为某些内容选择了非变种支持字体,我可以提供更有意义的行为需要上标/下标。
我看了GlyphTypeface,因为它是你用来查询是否可以嵌入字体的那个,但我没有看到任何关于变体的内容。我在FontFamily上也没有看到任何明显的东西,我在Typography上唯一能找到的就是Variants附属物本身(及其吸气剂和制定者)。
答案 0 :(得分:3)
据我所知,WPF没有提供有关可用GSUB表的信息(它告诉您这些信息)。一切都隐藏在PresentationCore的私人类中。
一种方法是使用WPF的高级文本服务来创建TextFormatter,然后检索由具有变体的文本创建的GlyphRun
,以及具有变体的文本off,然后比较使用的字形索引。
另一种方法是通过GlyphTypeFace.GetFontStream()
物理检查字体的数据。 TrueType字体格式不是很复杂,所以你可能会在网上找到一些关于如何解析二进制字体数据以查找GSUB表信息的信息。
请注意,简单地询问变量是否受支持也有点含糊不清。字体可以说它支持变体,但没有什么要求它实际提供任何有意义的替换。大多数Adobe字体只提供一些字母小写字符,例如上标和下标(甚至不是整个拉丁字母,请注意)。这是没用的,恕我直言,因为你不能要求WPF伪造下标或像Word和其他文字处理器这样的上标。
但是,如果您只是问TypeFace.GetSupportedOpenTypeFeatures()
,那就太好了。