質問

RTF 入力を取得してクリーンアップし、\ul \b \i を除くすべての RTF 書式設定を削除して、マイナーな書式情報を付けて Word に貼り付けたいと考えています。

Word への貼り付けに使用するコマンドは次のようになります。oWord.ActiveDocument.ActiveWindow.Selection.PasteAndFormat(0) (一部の RTF テキストはすでにクリップボードにあります)

{\rtf1\ansi\deff0{\fonttbl{\f0\fnil\fcharset0 Courier New;}}
{\colortbl ;\red255\green255\blue140;}
\viewkind4\uc1\pard\highlight1\lang3084\f0\fs18 The company is a global leader in responsible tourism and was \ul the first major hotel chain in North America\ulnone  to embrace environmental stewardship within its daily operations\highlight0\par

正規表現などを使用して RTF を安全にクリーンアップする方法について何かアイデアはありますか?私は VB.NET を使用して処理を行っていますが、.NET 言語サンプルであればどれでも使用できます。

役に立ちましたか?

解決

非表示の RichTextBox を使用し、Rtf メンバーを設定してから、Text メンバーを取得して、十分にサポートされている方法で RTF をサニタイズします。その後、必要な書式設定を手動で挿入します。

他のヒント

私なら次のようなことをします。

Dim unformatedtext As String

someRTFtext = Replace(someRTFtext, "\ul", "[ul]")
someRTFtext = Replace(someRTFtext, "\b", "[b]")
someRTFtext = Replace(someRTFtext, "\i", "[i]")

Dim RTFConvert As RichTextBox = New RichTextBox
RTFConvert.Rtf = someRTFtext
unformatedtext = RTFConvert.Text

unformatedtext = Replace(unformatedtext, "[ul]", "\ul")
unformatedtext = Replace(unformatedtext, "[b]", "\b")
unformatedtext = Replace(unformatedtext, "[i]", "\i")

Clipboard.SetText(unformatedtext)

oWord.ActiveDocument.ActiveWindow.Selection.PasteAndFormat(0)

正規表現を使用してタグを削除できます。ただし、実際にはテキストであるタグが式でフィルタリングされないように注意してください。テキストの本文に「\b」が含まれている場合、RTF ストリームでは \b として表示されます。つまり、「\b」では一致しますが、「\b」では一致しません。

おそらく、近道を行ってヘッダーの RTF タグをフィルターで除外することもできます。入力内で最初に出現する「\viewkind4」を探します。次に、最初のスペース文字まで読みます。テキストの先頭からスペース文字までのすべての文字を削除します。これにより、RTF ヘッダー情報 (フォント、色など) が削除されます。

正規表現では、すべてを完全に正しく解析することはできません (テーブルなど) が、ほとんどの場合は機能します。

string unformatted = Regex.Replace(rtfString, @"\{\*?\\[^{}]+}|[{}]|\\\n?[A-Za-z]+\n?(?:-?\d+)?[ ]?", "");

魔法 =)

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top