代码之家  ›  专栏  ›  技术社区  ›  Joe White

检测字体是否支持变体(如上标和下标)

  •  3
  • Joe White  · 技术社区  · 16 年前

    WPF有 Typography.Variants 附加属性,用于执行上标和下标。但是,它只适用于某些字体。对于其他字体,变体完全被忽略,文本正常显示。(代码示例和屏幕截图 here )

    因为它会安静地返回到“不允许”状态,所以我不知道发生了什么错误;但是我的用户会看到糟糕的行为。

    是否有任何方法可以通过编程方式检测给定的字体是否支持typography.variants? 如果是这样,我可以提供更有意义的行为,如果用户为需要上标/下标的内容选择了非变体支持字体。

    我看着 GlyphTypeface ,因为它是用来查询是否可以嵌入字体的,但是我没有看到关于变体的任何内容。我也没有看到任何明显的 FontFamily 我唯一能找到的 Typography 是变量附加属性本身(及其getter和setter)。

    1 回复  |  直到 16 年前
        1
  •  3
  •   Ruben    16 年前

    据我所知,WPF不提供有关可用GSUB表的信息(这些表告诉您这些信息)。所有的东西都隐藏在展示核心的私人类中。

    一种方法是使用WPF的高级文本服务创建 TextFormatter ,然后检索 GlyphRun 由一段打开变量的文本创建,一段关闭变量的文本创建,然后比较使用的字形索引。

    另一种方法是通过 GlyphTypeFace.GetFontStream() . TrueType字体格式并不十分复杂,因此您可能会在网上找到一些有关如何解析二进制字体数据以查找GSUB表信息的信息。

    请注意,只要求威瑟尔一个变种是支持也有点含糊不清。字体可以 它支持一个变体,但不需要它实际提供任何有意义的替换。大多数Adobe字体只提供一些字母小写字符,比如上标和下标(甚至不是整个拉丁字母,请注意)。这是相当没用的,imho,因为你不能要求wpf像word和其他文字处理程序那样伪造下标或上标。

    不过,如果你能简单地问一下就好了 TypeFace.GetSupportedOpenTypeFeatures() .

    推荐文章