Ответ 1
Я бы использовал скрытый RichTextBox, установил член Rtf, а затем извлек элемент Text, чтобы тщательно обработать RTF. Затем я буду вручную вводить требуемое форматирование.
Я хотел бы взять некоторый ввод 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" , он будет выглядеть как \b в потоке RTF. Другими словами, вы бы соответствовали "\ b" , но не "\ b" .
Вероятно, вы можете сделать короткий отрезку и отфильтровать теги RTF заголовка. Посмотрите на первое появление "\ viewkind4" на входе. Затем прочитайте перед первым символом пробела. Вы удалите все символы с начала текста до и включите этот пробел. Это лишит информацию заголовка RTF (шрифты, цвета и т.д.).
Regex it, он не будет разбирать абсолютно все правильно (например, таблицы), но выполняет работу в большинстве случаев.
string unformatted = Regex.Replace(rtfString, @"\{\*?\\[^{}]+}|[{}]|\\\n?[A-Za-z]+\n?(?:-?\d+)?[ ]?", "");
Магия =)