Domanda

Vorrei prendere alcuni input RTF e pulirli per rimuovere tutta la formattazione RTF tranne \ul \b \i per incollarli in Word con informazioni di formato minori.

Il comando utilizzato per incollare in Word sarà qualcosa del tipo:oWord.ActiveDocument.ActiveWindow.Selection.PasteAndFormat(0) (con del testo RTF già negli Appunti)

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

Hai qualche idea su come posso ripulire l'RTF in modo sicuro con alcune espressioni regolari o qualcosa del genere?Sto utilizzando VB.NET per eseguire l'elaborazione, ma andrà bene qualsiasi esempio di linguaggio .NET.

È stato utile?

Soluzione

Vorrei utilizzare un RichTextBox nascosto, impostare il membro Rtf, quindi recuperare il membro Text per disinfettare l'RTF in un modo ben supportato.Quindi utilizzerei successivamente l'iniezione manuale della formattazione desiderata.

Altri suggerimenti

Farei qualcosa del genere:

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)

Puoi eliminare i tag con le espressioni regolari.Assicurati solo che le tue espressioni non filtreranno i tag che in realtà erano testo.Se il testo avesse "\b" nel corpo del testo, verrebbe visualizzato come \b nel flusso RTF.In altre parole, corrisponderai a "\b" ma non a "\b".

Probabilmente potresti prendere una scorciatoia e filtrare i tag RTF dell'intestazione.Cerca la prima occorrenza di "\viewkind4" nell'input.Quindi leggere avanti fino al primo carattere di spazio.Dovresti rimuovere tutti i caratteri dall'inizio del testo fino allo spazio incluso.Ciò eliminerebbe le informazioni dell'intestazione RTF (caratteri, colori, ecc.).

Regex, non analizzerà assolutamente tutto correttamente (tabelle ad esempio) ma fa il lavoro nella maggior parte dei casi.

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

Magia =)

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top