2008-08-21 24 views
10

Me gustaría tomar algunas entradas RTF y limpiarlas para eliminar todo el formato RTF excepto \ ul \ b \ i para pegarlo en Word con información de formato menor.Limpiar texto RTF

El comando utilizado para pegar en Word será algo como: oWord.ActiveDocument.ActiveWindow.Selection.PasteAndFormat (0) (con un poco de texto RTF ya en el portapapeles)

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

¿Tiene alguna idea de cómo puedo limpiar el RTF de forma segura con algunas expresiones regulares o algo así? Estoy usando VB.NET para hacer el procesamiento, pero cualquier muestra de lenguaje .NET servirá.

Respuesta

6

Usaría un RichTextBox oculto, establecería el miembro Rtf, luego recuperaría el miembro Text para desinfectar el RTF de una manera bien soportada. Entonces usaría inyectar manualmente el formato deseado después.

2

Puede quitar las etiquetas con expresiones regulares. Solo asegúrate de que tus expresiones no filtren las etiquetas que en realidad eran texto. Si el texto tenía "\ b" en el cuerpo del texto, aparecería como \ b en la secuencia RTF. En otras palabras, coincidirías en "\ b" pero no "\ b".

Probablemente podría tomar un atajo y filtrar las etiquetas RTF del encabezado. Busque la primera aparición de "\ viewkind4" en la entrada. Luego lea adelante al primer personaje espacial. Eliminaría todos los caracteres desde el inicio del texto hasta ese carácter de espacio incluido. Eso eliminaría la información del encabezado RTF (fuentes, colores, etc.).

5

me gustaría hacer algo como lo siguiente:

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

expresión regular que, no lo puedo analizar sintácticamente absolutamente todo correctamente (tablas, por ejemplo), pero hace el trabajo en la mayoría de los casos.

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

magia =)