代码之家  ›  专栏  ›  技术社区  ›  Chris B. Behrens

有人能帮我拆下帕诺斯的房子吗?

  •  0
  • Chris B. Behrens  · 技术社区  · 2 年前

    我正在使用PowerPoint,我有这样一个元素:

    <a:latin typeface="Arial" panose="020B0604020202020204" pitchFamily="34" charset="0"/>
    

    从概念上讲,我理解panose属性在一个编码字符串中汇总了一堆属性,但所有文档的格式都不是十六进制的,就像这里的这个值一样。我试着把它转换成十进制,但据我所知,它产生的结果与全景域不一致。

    0 回复  |  直到 2 年前
        1
  •  1
  •   Chris B. Behrens    2 年前

    好吧,我想我花了一段时间才弄明白。panose属性中的十六进制字符串需要转换为十字节数组。我偷了这个 answer 要做到这一点:

    Enumerable.Range(0, hex.Length)
                                 .Where(x => x % 2 == 0)
                                 .Select(x => Convert.ToByte(hex.Substring(x, 2), 16))
                                 .ToArray();
    

    一旦您有了这个字节数组,每个位置都代表自定义字体的不同方面:

    1. 家庭类型
    2. Serif样式
    3. 重量
    4. 部分
    5. 明显的差异
    6. 笔划变化
    7. 手臂样式
    8. Letterform
    9. 中线
    10. X高度

    记住这里的索引、位置和off-by-one错误。每个字体都有一个从0到15的值(natch),表示每个字体质量的不同值,这些值被枚举 here

    我关注的特别方面是字体重量,它表示在索引2的位置3。