2008-08-21 94 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+)?[ ]?", ""); 

魔術=)