我想取一些RTF输入并清除它以删除除\ ul \ b \ i之外的所有RTF格式,以便将其粘贴到带有次要格式信息的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语言示例都可以。
答案 0 :(得分:6)
我会使用隐藏的RichTextBox,设置Rtf成员,然后检索Text成员以便以良好支持的方式清理RTF。然后我会使用之后手动注入所需的格式。
答案 1 :(得分:5)
我会做以下事情:
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 :(得分:2)
您可以使用正则表达式去除标记。只需确保您的表达式不会过滤实际为文本的标记。如果文本正文中有“\ b”,则它将在RTF流中显示为\ b。换句话说,您将匹配“\ b”但不匹配“\ b”。
您可以采取捷径并过滤掉标题RTF标记。在输入中查找第一次出现的“\ viewkind4”。然后预读第一个空格字符。您将从文本开头删除所有字符,直到并包括该空格字符。这将剥离RTF标题信息(字体,颜色等)。
答案 3 :(得分:1)
正则表达式,它不会正确解析所有内容(例如表格),但在大多数情况下都可以完成工作。
string unformatted = Regex.Replace(rtfString, @"\{\*?\\[^{}]+}|[{}]|\\\n?[A-Za-z]+\n?(?:-?\d+)?[ ]?", "");
魔术=)