10

我想获取一些 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 语言示例都可以。

4

4 回答 4

6

我会使用一个隐藏的 RichTextBox,设置 Rtf 成员,然后检索 Text 成员以一种支持良好的方式清理 RTF。然后我会在之后使用手动注入所需的格式。

于 2008-08-21T17:39:40.503 回答
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)
于 2008-08-21T18:22:48.247 回答
2

您可以使用正则表达式去除标签。只需确保您的表达式不会过滤实际上是文本的标签。如果文本在正文中有“\b”,它将在 RTF 流中显示为 \b。换句话说,你会匹配“\b”而不是“\b”。

您可能会采取捷径并过滤掉标题 RTF 标记。在输入中查找“\viewkind4”的第一次出现。然后提前读到第一个空格字符。您将删除从文本开头直到并包括该空格字符的所有字符。这将去除 R​​TF 标头信息(字体、颜色等)。

于 2008-08-21T16:51:54.157 回答
1

对其进行正则表达式,它不会完全正确地解析所有内容(例如表格),但在大多数情况下都能完成这项工作。

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

魔术 =)

于 2012-06-08T01:22:14.177 回答