Вопрос

Я хотел бы взять некоторый ввод 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.

Это было полезно?

Решение

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

Другие советы

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

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)

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

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

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

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

Магия =)

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top