Как я могу разбить файл RTF - PullRequest
       21

Как я могу разбить файл RTF

2 голосов
/ 05 августа 2011

Я хочу разделить файл RTF (с C # или VB.Net) на 2 или более частей строкой [BreakPage].Для примера приведу этот файл, содержащий [BreakPage], который нужно разделить на 2 части:

{\ rtf1 \ ansi \ ansicpg1251 \ uc1 \ deff0 \ stshfdbch0 \ stshfloch0 \ stshfhich0 \ stshfbi0\ deflang1049 \ deflangfe1049 {\ fonttbl {\ f0 \ froman \ fcharset204 \ fprq2 {* \ panose 02020603050405020304} Times New Roman;} {\ f38 \ froman \ fcharset0 \ fprq2 Times New Roman;} {\ f36 \ froman \ fcharset238 \ fprset238Times New Roman CE;} {\ f39 \ froman \ fcharset161 \ fprq2 Times New Roman греческий;} {\ f40 \ froman \ fcharset162 \ fprq2 Times New Roman Tur;} {\ f41 \ froman \ fcharset177 \ fprq2 Times New Roman (иврит);} {\ f42 \ froman \ fcharset178 \ fprq2 Times New Roman (арабский);} {\ f43 \ froman \ fcharset186 \ fprq2 Times New Roman Baltic;} {\ f44 \ froman \ fcharset163 \ fprq2 Times New Roman (вьетнамский);}} {\ colortbl; \ red0 \ green0 \ blue0; \ red0 \ green0 \ blue255; \ red0 \ green255 \ blue255;\ Red0 \ green255 \ blue0; \ red255 \ green0 \ blue255; \ red255 \ green0 \ blue0; \ red255 \ green255 \ blue0; \ red255 \ green255 \ blue255; \ red0 \ green0 \ blue128; \ red0 \ green128 \ blue128; \red0 \ green128 \ blue0; \ red128 \ green0 \ blue128; \ red128 \ green0 \ blue0; \ red128 \ green128 \ blue0;\ red128 \ green128 \ blue128; \ red192 \ green192 \ blue192;} {\ stylesheet {\ ql \ li0 \ ri0 \ widctlpar \ aspalpha \ aspnum \ faauto \ Adjustright \ rin0 \ lin0 \ itap0 \ fs24 \ lang1049 \ langfe1049 \ cgrid \langnp1049 \ langfenp1049 \ snext0 Normal;} {* \ cs10 \ Add \ ssemihidden Шрифт абзаца по умолчанию;} {* \ ts11 \ tsrowd \ trftsWidthB3 \ trpaddl108 \ trpaddr108 \ trpaddfl3 \ trpaddft3 \ trpaddfr \ trpcell \ trsft \ ts \ ttftsbrdrt \ tsbrdrl \ tsbrdrb \ tsbrdrr \ tsbrdrdgl \ tsbrdrdgr \ tsbrdrh \ tsbrdrh \ tsbrdrv \ ql \ li0 \ ri0 \ widctlpar \ aspalpha \ aspnum \ faauto \ faauto \ fa \ \ \ \ \ \ \ \ \ \ \ \ \ tang \ l \ n \ \ \ \ \ \ \ \ \ \ \ tang \ lang \ l010 \ lp0 \ lf0 \ lf0 \ lf0 \ lpf \ lp0 \ lff \ lpf \ lpf неsnext11 \ ssemihidden Normal Table;}} {* \ latentstyles \ lsdstimax156 \ lsdlockeddef0} {* \ rsidtbl \ rsid2111663 \ rsid7154806 \ rsid15558346} {* \ generator Microsoft Word 11.0.5604;} {\ info {author \ operatorПрограммист} {\ creatim \ yr2011 \ MO8 \ йу2 \ HR12 \ min45} {\ revtim \ yr2011 \ MO8 \ dy5 \ HR12 \ min34} {\ Version3} {\ edmins1} {\ nofpages1} {\ nofwords5} {\ nofchars34}{\ nofcharsws38} {\ vern24689}} \ margl1701 \ margr850 \ margt1134 \ margb1134 \ widowctrl \ ftnbj \ aenddoc \ noxlattoyen \ expshrtn \ noultrlspc \ dntblnsbdb \ nospaceforul \ hyphcaps0 \ horzdoc \ dghspace120 \ dgvspace120 \ dghorigin1701 \ dgvorigin1984 \ dghshow0 \ dgvshow3 \ jcompress \ viewkind1 \ viewscale100 \ nolnhtadjtbl \ rsidroot15558346 \ fet0 \ sectd \linex0 \ sectdefaultcl \ sftnbj {* \ pnseclvl1 \ pnucrm \ pnstart1 \ pnindent720 \ pnhang {\ pntxta.}} {* \ pnseclvl2 \ pnucltr \ pnstart1 \ pnindent720 \ pnnta7 pp \ nnt} pnhta} pnhta} pnht}pnindent720 \ pnhang {\ pntxta.}} {* \ pnseclvl4 \ pnlcltr \ pnstart1 \ pnindent720 \ pnhang {\ pntxta)}} {* \ pnseclvl5 \ pndec \ pnstart1 \ pninart720 \ pnin (7) \ pnin (pnt){* \ pnseclvl6 \ pnlcltr \ pnstart1 \ pnindent720 \ pnhang {\ pntxtb (} {\ pntxb (} {\ pntxta)}} {* \ pnseclvl7 \ pnlcrm \ pnstcart1 \ pnindent720 \ pnhang {\ pntntl} {pnntl} {pnntl}) {}\ pnlcltr \ pnstart1 \ pnindent720 \ pnhang {\ pntxtb (} {\ pntxta)}} {* \ pnseclvl9 \ pnlcrm \ pnstart1 \ pnindent720 \ pnhang {\ pntxtb (} {\ pntxta) \} \ pntxta) \}\ ri0 \ nowidctlpar \ faauto \ rin0 \ lin0 \ itap0 \ fs24 \ lang1049 \ langfe1049 \ cgrid \ langnp1049 \ langfenp1049{\ b \ insrsid7154806 \ charrsid7154806 Строка 1 \ par} {\ insrsid7154806 \ par} {\ i \ insrsid7154806 \ charrsid7154806 Line3} {\ lang1048 \ langfe1049 \ langnp1048 \ insrsid7154806 \ 48 \ ins \ \ \ \ \ \ \ \ \}] \ par} {\ insrsid7154806 Line4 \ par \ par Line5 \ par}}

Кто-нибудь может мне помочь?

Спасибо!

1 Ответ

5 голосов
/ 05 августа 2011

Проблема в том, что RTF имеет некоторую (но не обязательно всю) информацию о форматировании в глобальном заголовке.Чтобы разбить текст RTF так, чтобы результаты снова были действительными в формате RTF с примененным форматированием, вам, по сути, нужно знать, где находится информация заголовка, и реплицировать ее по разделениям.

Есть два способа сделать это:

  1. Написать анализатор RTF
  2. Использовать существующий синтаксический анализатор RTF

(1) выполнимо, но это займет время.К счастью, анализаторы RTF уже существуют, например, этот в CodeProject .

В качестве альтернативы, вы также можете загрузить текст RTF в RichTextBox, а затем выполнить поискразделенный текст "[BreakPage]" внутри RichTextBox, программно выберите первую и вторую часть и получите текст RTF, используя свойство SelectedRtf.

...