2008-08-21 24 views
10

Tôi muốn lấy một số đầu vào RTF và làm sạch nó để loại bỏ tất cả các định dạng RTF ngoại trừ \ ul \ b \ i để dán nó vào Word với thông tin định dạng nhỏ.Làm sạch văn bản RTF

Lệnh dùng để dán vào Word sẽ được giống như: oWord.ActiveDocument.ActiveWindow.Selection.PasteAndFormat (0) (với một số văn bản RTF đã có trong Clipboard)

{\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 

Bạn có bất cứ ý tưởng về cách tôi có thể làm sạch RTF một cách an toàn với một số biểu thức thông thường hoặc một cái gì đó? Tôi đang sử dụng VB.NET để làm việc xử lý nhưng bất kỳ mẫu ngôn ngữ .NET sẽ làm.

Trả lời

6

Tôi sẽ sử dụng RichTextBox ẩn, đặt thành viên Rtf, sau đó truy xuất thành viên Văn bản để vệ sinh RTF theo cách được hỗ trợ tốt. Sau đó, tôi sẽ sử dụng thủ công tiêm định dạng mong muốn sau đó.

2

Bạn có thể loại bỏ các thẻ bằng cụm từ thông dụng. Chỉ cần đảm bảo rằng các biểu thức của bạn sẽ không lọc các thẻ thực sự là văn bản. Nếu văn bản có "\ b" trong phần nội dung của văn bản, văn bản sẽ xuất hiện dưới dạng \ b trong luồng RTF. Nói cách khác, bạn sẽ khớp với "\ b" nhưng không khớp với "\ b".

Có thể bạn có thể cắt ngắn và lọc ra các thẻ RTF tiêu đề. Hãy tìm sự xuất hiện đầu tiên của "\ viewkind4" trong đầu vào. Sau đó đọc trước ký tự khoảng trắng đầu tiên. Bạn sẽ xóa tất cả các ký tự từ đầu văn bản đến và bao gồm ký tự khoảng trắng đó. Điều đó sẽ loại bỏ thông tin tiêu đề RTF (phông chữ, màu sắc, v.v.).

5

Tôi muốn làm điều gì đó như sau:

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

Regex nó, nó sẽ không phân tích hoàn toàn tất cả mọi thứ một cách chính xác (bảng ví dụ) nhưng không được công việc trong hầu hết các trường hợp.

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

Magic =)