6

次の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
}

フォントSegoeUI11ptの「サンプルテキスト」が含まれています。ここで、WPFのFlowDocumentとTextRange.Load()および.Save()をそれぞれ使用してドキュメントをロードして保存すると、フォントサイズが10.5ptに縮小されます。RTFを入力/出力として使用するときに元のフォントサイズを保持する方法はありますか?

4

1 に答える 1

7

WPFの測定値はすべてピクセル単位です(ただし、正確には画面のピクセルではありません)。FontSizeのを指定した場合でもTextRange

内部的にはFontSize="14pt"、XAMLのようなものを指定すると、WPFは、指定LengthConverterした測定単位に関連付けられた係数に基づいて、doubleを修飾するものを使用および変更します。したがって、11は約1.3333333で乗算されます。したがって、単純なdouble値をFontSizeプロパティにフィードすると、単位はピクセルになります。

ただし、を使用するFontSize="14.0001pt"か、ポイントに1.3333334を掛ける場合、またはピクセル測定値に0.0001を追加する場合でも、実際に\fs22または\fs28(それぞれ\fs21または\fs27ではなく)を取得するのに十分なだけオフセットされます。これは、WPFでサイズを設定する場合に使用します。

\ fs22、Load()、Save()があり、次に\ fs21がある理由は、同じことと関係があります。パーサーはRTFを取得し、それをWPFオブジェクトに変換します。したがって、22のハーフポイントは14.666666666667ピクセルのようになります。もう一度Save()を実行すると、それらのピクセルは別の単位に変換されますが、正確ではありません。14.666666666667ピクセルは21ハーフポイントになりますが、14.6666674ピクセルは22ハーフポイントになります。これはあなたが望んでいたことです。

たぶん、この情報は、RTFを別の方法で取得する方法のアイデアを与えるでしょう。代わりにXAMLを取得して変換できるかもしれません。おそらく、煩わしい丸め誤差のない、無料のサードパーティのXAMLからRTFへのコンバーターがあります。

于 2009-08-19T19:36:30.850 に答える