10

いくつかの 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 言語サンプルで実行できます。

4

4 に答える 4

6

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

于 2008-08-21T17:39:40.503 に答える
5

私は次のようなことをします:

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)
于 2008-08-21T18:22:48.247 に答える
2

正規表現でタグを取り除くことができます。式が実際にテキストであるタグをフィルター処理しないことを確認してください。テキストの本文に「\b」が含まれている場合、RTF ストリームでは \b として表示されます。つまり、「\b」では一致しますが、「\b」では一致しません。

おそらくショートカットを使用して、ヘッダーの RTF タグを除外することができます。入力で最初に出現する「\viewkind4」を探します。次に、最初の空白文字まで読み上げます。テキストの先頭からそのスペース文字までのすべての文字を削除します。これにより、RTF ヘッダー情報 (フォント、色など) が取り除かれます。

于 2008-08-21T16:51:54.157 に答える
1

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

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

マジック=)

于 2012-06-08T01:22:14.177 に答える