2008-08-21 3 views
10

일부 RTF 입력을 가져 와서 작은 RTF 형식을 사용하여 \ ul \ b \ i를 제외한 모든 RTF 형식을 제거하여 부울 형식 정보가 포함 된 Word에 붙여 넣으려고합니다.RTF 텍스트 정리

과 같이 될 것입니다 Word에 붙여 넣기하는 데 사용되는 명령 : oWord.ActiveDocument.ActiveWindow.Selection.PasteAndFormat (0)

{\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 텍스트) 내가 정규식이나 무언가로 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+)?[ ]?", ""); 

매직 =)