Pregunta

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.

El comando utilizado para pegar en Word será algo así como:oWord.ActiveDocument.ActiveWindow.Selection.PasteAndFormat(0) (con algo 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 realizar el procesamiento, pero cualquier muestra de lenguaje .NET servirá.

¿Fue útil?

Solución

Usaría un RichTextBox oculto, configuraría el miembro Rtf y luego recuperaría el miembro Text para desinfectar el RTF de una manera bien compatible.Luego, inyectaría manualmente el formato deseado.

Otros consejos

Haría 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)

Puede eliminar las etiquetas con expresiones regulares.Solo asegúrese de que sus expresiones no filtren etiquetas que en realidad sean texto.Si el texto tuviera "\b" en el cuerpo del texto, aparecería como \b en la secuencia RTF.En otras palabras, coincidiría con "\b" pero no con "\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 siga leyendo hasta el primer carácter de espacio.Eliminaría todos los caracteres desde el inicio del texto hasta ese carácter de espacio inclusive.Eso eliminaría la información del encabezado RTF (fuentes, colores, etc.).

Regístrelo, no analizará 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 =)

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top