Очистка текста RTF - PullRequest
       17

Очистка текста RTF

10 голосов
/ 21 августа 2008

Я хотел бы взять некоторый ввод RTF и очистить его, чтобы удалить все форматирование RTF, кроме \ ul \ b \ i, чтобы вставить его в Word с незначительной информацией о формате.

Команда, используемая для вставки в Word, будет выглядеть примерно так: oWord.ActiveDocument.ActiveWindow.Selection.PasteAndFormat (0) (с некоторым текстом RTF уже в буфере обмена)

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

Есть ли у вас какие-либо идеи о том, как можно безопасно очистить RTF с помощью некоторых регулярных выражений или чего-то еще? Я использую VB.NET для обработки, но подойдет любой пример языка .NET.

Ответы [ 4 ]

6 голосов
/ 21 августа 2008

Я бы использовал скрытый RichTextBox, установил элемент Rtf, а затем извлек элемент Text для очистки RTF хорошо поддерживаемым способом. Затем я бы вручную использовал желаемое форматирование.

5 голосов
/ 21 августа 2008

Я бы сделал что-то вроде следующего:

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)
2 голосов
/ 21 августа 2008

Вы можете вырезать теги с помощью регулярных выражений. Просто убедитесь, что ваши выражения не будут фильтровать теги, которые были на самом деле текст. Если бы текст имел «\ b» в теле текста, он бы отображался как \ b в потоке RTF. Другими словами, вы должны соответствовать «\ b», но не «\ b».

Возможно, вы могли бы сократить путь и отфильтровать теги RTF заголовка. Ищите первое вхождение «\ viewkind4» во входных данных. Затем читайте вперед до первого пробела. Вы удалили бы все символы от начала текста до и включая этот пробел. Это исключило бы информацию заголовка RTF (шрифты, цвета и т. Д.).

1 голос
/ 08 июня 2012

Regex, он не будет анализировать абсолютно все правильно (например, таблицы), но в большинстве случаев выполняет свою работу

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

Магия =)

...