gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-12-02 04:54:40 25 4
gpt4 key购买 nike

考虑以下 RTF 文档

{\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作为输入/输出时有什么办法保留原始字体大小吗?

最佳答案

所有 WPF 的测量单位都是像素(尽管不完全是屏幕像素)。即使您指定 TextRangeFontSize 也是如此。

在内部,当您在 XAML 中指定诸如 FontSize="14pt" 之类的内容时,WPF 会使用 LengthConverter 并根据与测量单位关联的因素更改限定的 double 值你给。所以 11 大约乘以 1.3333333。因此,如果您向 FontSize 属性提供普通 double 值,则单位为像素。

但是,如果您使用 FontSize="14.0001pt",或者将点乘以 1.3333334,或者甚至只是在像素测量中添加 0.0001,它的偏移量就足以让您实际得到\fs22 或\fs28(分别而不是\fs21 或\fs27)。这适用于在 WPF 中设置大小时。

你有\fs22、Load()、Save(),然后有\fs21 的原因与同样的事情有关。解析器获取 RTF 并将其转换为 WPF 对象。所以 22 个半点就变成了 14.666666666667 像素。当您再次 Save() 时,这些像素会转换回不同的单位,但不是很正确。 14.6666666666667 像素变为 21 个半点,但 14.6666674 像素变为 22 个半点,这就是您想要的。

也许这些信息会让您了解如何以不同的方式获取 RTF。也许您可以取出 XAML 并进行转换。也许有一个很好的免费第三方 XAML 到 RTF 转换器,它没有烦人的舍入错误。

关于wpf - 在WPF中加载/保存RTF时保留字体大小,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1159549/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com