2008-08-21 62 views
10

我想采取一些RTF输入并清除它以删除除\ ul \ b \ i之外的所有RTF格式,以将其粘贴到具有较小格式信息的Word中。清理RTF文本

用来粘贴到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语言样本都可以。

回答

6

我会用一个隐藏的RichTextBox,设置RTF成员,则检索文本成员消毒RTF在一个很好的支持方式。然后我会使用手动注入所需的格式。

2

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

你可以采取快捷方式并过滤掉头文件RTF标签。在输入中查找第一次出现的“\ viewkind4”。然后阅读第一个空格字符。您将删除文本开头的所有字符,直到包括该空格字符。这将去除RTF标题信息(字体,颜色等)。

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) 
1

正则表达式,它不会正确地解析绝对一切(如表),但确实在大多数情况下工作。

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

魔术=)