Программное редактирование RTF для совместимости с WordPad - PullRequest
0 голосов
/ 26 июня 2011

Я нахожусь в процессе передачи данных из одной системы управления документами в другую систему.

В старой системе у них была кнопка закладки для вставки замещающих полей. Мне нужно заменить синтаксис для полей замены, чтобы они работали с новой системой (не проблема, с которой я сталкиваюсь).

Старый 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}

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

TEST {ID} TEST

И {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}.

Должен ли я просто написать регулярное выражение для соответствия тегам поля и просто удалить их, или есть лучшее решение?

EDIT

Это также происходит, если я открываю RTF в Word, но он делает файл слишком длинным для размещения здесь .

1 Ответ

1 голос
/ 26 июня 2011

Я закончил с использованием регулярных выражений, если кому-то интересно, вот схема

\{(?:\s*\\\*)?\s*\\field\s*\\fldlock\s*\{\s*\\\*\s*\\fldinst\s*MERGEFIELD\s*(\\.*?)?([\w\[\]]+)(\s+\w+)?(\s*\\.*?)?\s*\}(?:\s*\{\s*\\fldrslt\s*\})?\s*\}
...