Vra

Ek wil graag 'n paar RTF insette te neem en skoon dit al RTF formaat behalwe \ ul \ verwyder b \ i om dit te plak in Word met geringe formaat inligting.

Die bevel wat gebruik word om te plak in Woord sal so iets wees: oWord.ActiveDocument.ActiveWindow.Selection.PasteAndFormat (0) (met 'n paar RTF teks reeds in die Klembord)

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

Het jy enige idee oor hoe ek veilig kan skoon te maak die RTF met 'n paar gereelde uitdrukkings of iets? Ek gebruik VB.NET om die verwerking te doen, maar enige NET taal monster sal doen.

Was dit nuttig?

Oplossing

Ek sou 'n versteekte RichTextBox gebruik, stel die RTF lid, dan haal die teks lid van die RTF ontsmet in 'n goed ondersteun manier. Dan sal ek die hand te gebruik spuit die gewenste opmaak na die tyd.

Ander wenke

Ek sal iets soos die volgende te doen:

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)

Jy kan strook uit die etikette met gereelde uitdrukkings. Maak net seker dat jou uitdrukkings etikette wat eintlik teks was sal filtreer. As die teks "\ b" het in die liggaam van die teks, wil dit voorkom as \ b in die RTF stroom. Met ander woorde, sou jy pas op "\ b", maar nie "\ b".

Jy kan waarskynlik 'n kortpad en filter die kop RTF tags. Kyk vir die eerste voorkoms van "\ viewkind4" in die insette. Lees dan voort om die eerste ruimte karakter. Jy sal al die tekens van die begin van die teks tot en met daardie ruimte karakter te verwyder. Dit sou strook uit die RTF kop inligting (lettertipes, kleure, ens).

regex dit, dit sal nie ontleed absoluut alles korrek (tafels byvoorbeeld), maar doen die werk in die meeste gevalle.

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

Magic =)

Gelisensieer onder: CC-BY-SA met toeskrywing
Nie verbonde aan StackOverflow
scroll top