Програмно редактиране на RTF, за да бъде съвместим с WordPad

В процес съм на прехвърляне на данни от една система за управление на документи в друга система.

В старата система те имаха бутон за отметки за вмъкване на заместващи полета. Трябва да заменя синтаксиса за заместващите полета, така че да работят с новата система (не е проблемът, който имам).

Стар RTF

{\rtf1\ansi\deflang1033\ftnbj\uc1\deff1
{\fonttbl{\f0 \froman \fcharset0 Times New Roman;}{\f1 \fswiss Arial;}}
{\colortbl ;\red255\green255\blue255 ;\red0\green0\blue0 ;}
{\stylesheet{\f1\fs20\cf2\cb1\ulc2 Normal;}{\cs1\cf2\cb1\ulc2 Default Paragraph Font;}}
{\*\revtbl{Unknown;}}
\paperw12240\paperh15840\margl1440\margr1440\margt1440\margb1440\headery720\footery0\deftab720\formshade\aendnotes\aftnnrlc\pgbrdrhead\pgbrdrfoot
\sectd\pgwsxn12240\pghsxn15840\marglsxn1440\margrsxn1440\margtsxn1440\margbsxn1440\headery720\footery0\sbkpage\pgncont\pgndec
\plain\plain\f1\fs20\ql\plain\f1\fs20 TEST\lang1033\f1  {\field\fldlock{\*\fldinst MERGEFIELD ID}{\fldrslt}} TEST\plain\f1\fs20\par}

Което отпечатва в старата им система:

ТЕСТ {ID} ТЕСТ

И {ID} ще бъде заменено с правилния идентификационен номер, когато се отпечата.

Въпреки това тук е моят проблем Ако просто отворя RTF в WordPad, изглежда така

ТЕСТ ТЕСТ

и след запазване RTF изглежда така

{\rtf1\ansi\ansicpg1252\deff0\deflang1033{\fonttbl{\f0\fswiss Arial;}}
{\*\generator Msftedit 5.41.21.2510;}\viewkind4\uc1\pard\f0\fs20 TEST  TEST\par
}

Наистина не ме интересуват повечето от другите метаданни, но не разбирам защо премахва {ID}. От това, което мога да кажа, като разглеждам MSDN има неправилна бележка за \field\fldlock{\*\fldinst MERGEFIELD ID}{\fldrslt}.

Трябва ли просто да напиша регулярен израз, който да съответства на маркерите на полето и просто да ги премахна или има по-добро решение?

РЕДАКТИРАНЕ

Това също се случва, ако отворя RTF в Word, но това прави файл твърде дълъг за публикуване тук.


person Scott Chamberlain    schedule 25.06.2011    source източник


Отговори (1)


В крайна сметка използвах regex, ако някой е любопитен, ето модела

\{(?:\s*\\\*)?\s*\\field\s*\\fldlock\s*\{\s*\\\*\s*\\fldinst\s*MERGEFIELD\s*(\\.*?)?([\w\[\]]+)(\s+\w+)?(\s*\\.*?)?\s*\}(?:\s*\{\s*\\fldrslt\s*\})?\s*\}
person Scott Chamberlain    schedule 26.06.2011