문제

일부 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 언어 샘플에서 수행됩니다.

도움이 되었습니까?

해결책

숨겨진 RichTextBox를 사용하고 Rtf 멤버를 설정한 다음 Text 멤버를 검색하여 잘 지원되는 방식으로 RTF를 삭제합니다.그런 다음 나중에 원하는 형식을 수동으로 삽입합니다.

다른 팁

나는 다음과 같은 일을 할 것입니다 :

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)

정규식을 사용하여 태그를 제거할 수 있습니다.표현식이 실제로 텍스트였던 태그를 필터링하지 않는지 확인하세요.텍스트 본문에 "\b"가 있으면 RTF 스트림에서는 \b로 표시됩니다.즉, "\b"에서는 일치하지만 "\b"에서는 일치하지 않습니다.

지름길을 택하여 헤더 RTF 태그를 필터링할 수도 있습니다.입력에서 "\viewkind4"가 처음 나타나는 것을 찾습니다.그런 다음 첫 번째 공백 문자를 미리 읽습니다.텍스트 시작 부분부터 해당 공백 문자를 포함하여 모든 문자를 제거합니다.그러면 RTF 헤더 정보(글꼴, 색상 등)가 제거됩니다.

정규식을 사용하면 모든 것을 정확하게 구문 분석하지는 않지만(예: 테이블) 대부분의 경우 작업을 수행합니다.

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

마법 =)

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top