2008-08-21 36 views
10

Ich möchte einige RTF-Eingabe nehmen und bereinigen, um alle RTF-Formatierungen außer \ ul \ b \ i zu entfernen, um sie in Word mit kleineren Formatinformationen einzufügen.RTF-Text bereinigen

Der Befehl, in Word einfügen wird wie etwas sein: oWord.ActiveDocument.ActiveWindow.Selection.PasteAndFormat (0) (mit einigen RTF-Text bereits in der Zwischenablage)

{\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 

Haben Sie irgendwelche Idee, wie ich das RTF mit einigen regulären Ausdrücken oder etwas sicher aufräumen kann? Ich benutze VB.NET, um die Verarbeitung zu tun, aber jedes .NET-Sprachbeispiel wird ausreichen.

Antwort

6

Ich würde eine versteckte RichTextBox verwenden, legen Sie das RTF-Mitglied fest und rufen Sie dann das Textelement ab, um das RTF auf eine gut unterstützte Weise zu bereinigen. Dann würde ich manuell die gewünschte Formatierung nachträglich einspritzen.

2

Sie können die Tags mit regulären Ausdrücken entfernen. Stellen Sie nur sicher, dass Ihre Ausdrücke keine Tags filtern, die tatsächlich Text sind. Wenn der Text "\ b" im Textkörper hätte, würde er im RTF-Stream als \ b erscheinen. Mit anderen Worten, Sie würden auf "\ b" aber nicht "\ b" übereinstimmen.

Sie könnten wahrscheinlich eine Abkürzung nehmen und die Header-RTF-Tags herausfiltern. Suchen Sie nach dem ersten Vorkommen von "\ viewkind4" in der Eingabe. Dann lesen Sie weiter bis zum ersten Leerzeichen. Sie würden alle Zeichen vom Anfang des Textes bis einschließlich dieses Leerzeichen entfernen. Das würde die RTF-Header-Informationen (Schriftarten, Farben usw.) entfernen.

5

ich etwas wie das folgende tun würde:

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) 
1

Regex es, es analysieren gewohnt absolut alles richtig (Tabellen zum Beispiel), aber macht den Job in den meisten Fällen.

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

Magie =)