2008-08-21 10 views
10

Je voudrais prendre une entrée RTF et la nettoyer pour supprimer toute mise en forme RTF sauf \ ul \ b \ i pour la coller dans Word avec des informations de format mineur.Nettoyage du texte RTF

La commande utilisée pour coller dans Word sera quelque chose comme: oWord.ActiveDocument.ActiveWindow.Selection.PasteAndFormat (0) (avec un texte RTF déjà dans le Presse-papiers)

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

Avez-vous des idée sur la façon dont je peux nettoyer le RTF en toute sécurité avec des expressions régulières ou quelque chose? J'utilise VB.NET pour faire le traitement, mais n'importe quel exemple de langage .NET fera l'affaire.

Répondre

6

Je voudrais utiliser un RichTextBox masqué, définir le membre Rtf, puis récupérer le membre Texte pour assainir le RTF d'une manière bien prise en charge. Ensuite, j'utiliserais manuellement le formatage désiré par la suite.

2

Vous pouvez supprimer les étiquettes avec des expressions régulières. Assurez-vous simplement que vos expressions ne filtreront pas les balises qui étaient réellement du texte. Si le texte contenait "\ b" dans le corps du texte, il apparaîtrait comme \ b dans le flux RTF. En d'autres termes, vous correspondriez à "\ b" mais pas à "\ b".

Vous pouvez probablement prendre un raccourci et filtrer les balises RTF d'en-tête. Recherchez la première occurrence de "\ viewkind4" dans l'entrée. Lisez ensuite le premier espace. Vous devez supprimer tous les caractères du début du texte jusqu'à et y compris ce caractère d'espace. Cela supprimerait les informations d'en-tête RTF (polices, couleurs, etc.).

5

je ferais quelque chose comme ce qui suit:

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, il Parse coutume absolument tout correctement (tableaux, par exemple), mais fait le travail dans la plupart des cas.

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

magique =)