代码之家  ›  专栏  ›  技术社区  ›  Sven Künzler

在WPF中加载/保存RTF时保留字体大小

  •  7
  • Sven Künzler  · 技术社区  · 16 年前

    {\rtf1\ansi\ansicpg1252\deff0\deflang1031{\fonttbl{\f0\fswiss\fprq2\fcharset0 Segoe UI;}{\f1\fswiss\fcharset0 Arial;}}
    {\*\generator Msftedit 5.41.15.1507;}\viewkind4\uc1\pard\f0\fs22 Sample Text\f1\fs20\par
    }
    

    它包含字体为Segoe UI 11 pt的“示例文本”。现在,当我使用WPF的FlowDocument和TextRange加载并保存文档时。Load()和。Save()分别将字体大小减小到10.5pt。使用RTF作为输入/输出时,是否有任何方法可以保留原始字体大小?

    1 回复  |  直到 16 年前
        1
  •  6
  •   Joel B Fant    16 年前

    WPF的所有度量单位都是像素(尽管不完全是屏幕像素)。即使您指定 FontSize TextRange .

    FontSize="14pt" LengthConverter 并根据与您给出的测量单位相关的因素将其更改为双倍。因此,11大约乘以1.3333333。所以,如果你给一个简单的双精度值 属性,单位为像素。

    但是,如果您使用 FontSize="14.0001pt" ,或者将这些点乘以1.3333334,甚至可能只是将像素测量值加上0.0001,它抵消的东西刚好足以让你得到\fs22或\fs28(而不是\fs21或\fs27)。这是在WPF中设置大小时使用的。

    您使用\fs22、Load()、Save()和\fs21的原因与此相同。解析器获取RTF并将其转换为WPF对象。所以22个半点变成了14.6666666666667像素。当你再次保存()时,这些像素会被转换回不同的单位,但不是很正确。14.6666666666667像素变为21个半点,但14.6666674像素变为22个半点。

    也许这些信息会让你知道如何以不同的方式获得RTF。也许你可以取出XAML并进行转换。也许有一个不错的免费第三部分XAML到RTF转换器,没有恼人的舍入错误。

    推荐文章