Frage

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

Der zum Einfügen in Word verwendete Befehl sieht etwa so aus:oWord.ActiveDocument.ActiveWindow.Selection.PasteAndFormat(0) (mit etwas 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 eine Idee, wie ich das RTF mit regulären Ausdrücken oder so sicher bereinigen kann?Ich verwende VB.NET für die Verarbeitung, aber jedes .NET-Sprachbeispiel reicht auch aus.

War es hilfreich?

Lösung

Ich würde eine versteckte RichTextBox verwenden, das Rtf-Mitglied festlegen und dann das Text-Mitglied abrufen, um das RTF auf gut unterstützte Weise zu bereinigen.Dann würde ich die gewünschte Formatierung nachträglich manuell einfügen.

Andere Tipps

Ich würde etwa Folgendes tun:

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)

Sie können die Tags mit regulären Ausdrücken entfernen.Stellen Sie einfach sicher, dass Ihre Ausdrücke keine Tags filtern, bei denen es sich tatsächlich um Text handelt.Wenn der Text „\b“ im Textkörper hätte, würde er im RTF-Stream als \b erscheinen.Mit anderen Worten: Sie würden mit „\b“ übereinstimmen, aber nicht mit „\b“.

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.Lesen Sie dann bis zum ersten Leerzeichen weiter.Sie würden alle Zeichen vom Textanfang bis einschließlich des Leerzeichens entfernen.Dadurch würden die RTF-Header-Informationen (Schriftarten, Farben usw.) entfernt.

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

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

Magie =)

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top