Сведения о вопросе

Holish

16:34, 13th August, 2020

Теги

.net   vb.net   ms-word   rtf    

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

Просмотров: 489   Ответов: 4

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



  Сведения об ответе

DAAA

03:35, 3rd August, 2020

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


  Сведения об ответе

prince

06:14, 10th August, 2020

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

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)


  Сведения об ответе

SSESION

00:48, 4th August, 2020

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

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


  Сведения об ответе

DINO

00:49, 18th August, 2020

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

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

Магия =)


Ответить на вопрос

Чтобы ответить на вопрос вам нужно войти в систему или зарегистрироваться