2011-06-25 119 views
0

我正在將數據從一個文檔管理系統傳輸到另一個系統。以編程方式編輯RTF以與寫字板兼容

在舊系統中,他們有用於插入替換字段的書籤按鈕。我需要替換替換字段的語法,以便他們將與新系統一起工作(不是我遇到的問題)。

老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它看起來像

測試測試

後保存的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}。從我所知道的looking on MSDN中可以看出\field\fldlock{\*\fldinst MERGEFIELD ID}{\fldrslt}的格式不正確。

我應該只寫一個正則表達式來匹配字段標籤,並將它們去掉或者是否有更好的解決方案?

編輯

,如果我在Word中打開了RTF也會發生這種情況,但它使一個文件too long to post here

回答

1

我結束了使用正則表達式,如果有人好奇,這裏是模式

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