对不起这个蹩脚的标题,但想不出更好的方式来表达它,并在这上面放了几天的Bingleing。
我有读取 RTF 文件的代码,我在其中放置了占位符以充当合并字段。代码将替换文本,但是当文件被保存回来时,新值不会显示出来。
var fileName = @"C:\Users\James\SkyDrive\Sandbox\MailMerge\MailMerge\templates\Template1.rtf";
StreamReader sr = new StreamReader(fileName);
string text = sr.ReadToEnd();
sr.Close();
text = text.Replace("{\\{Title\\}\\}", "Mr.");
text = text.Replace("{\\{LastName\\}\\}", "Johnson");
text = text.Replace("{\\{FirstName\\}\\}", "James");
替换前的 RTF: {\rtf1\ansi\ansicpg1252\deff0\nouicompat\deflang1033{\fonttbl{\f0\fnil\fcharset0 Calibri;}} {*\generator Riched20 6.2.9200}\viewkind4\uc1 \pard\sa200\sl276 \slmult1\f0\fs22\lang9 嗨 {{Title}} {{LastName}}\par 你好吗,{{FirstName}}\par }
替换后的 RTF: {\rtf1\ansi\ansicpg1252\deff0\nouicompat\deflang1033{\fonttbl{\f0\fnil\fcharset0 Calibri;}} {*\generator Riched20 6.2.9200}\viewkind4\uc1 \pard\sa200\sl276 \slmult1\f0\fs22\lang9 嗨\先生。\Johnson\par 你好吗,\James\par }
RTF保存后在记事本中打开: {\rtf1\ansi\ansicpg1252\deff0\deflang1033{\fonttbl{\f0\fnil\fcharset0 Calibri;}} \viewkind4\uc1\pard\sa200\sl276\slmult1\lang9\f0 \fs22 嗨。\par 你好吗,\par }
我还需要做一些其他步骤,它将文件保存为正确的格式吗?我也尝试过使用 RichTextBox 控件,将字符串加载到其中,然后调用 Save() 方法。这给了我相同的结果。
谢谢,詹姆斯
在阅读这篇文章后想通了,清理 RTF 文本并使用以下代码:
var fileName = @"C:\Users\James\SkyDrive\Sandbox\MailMerge\MailMerge\templates\Template1.rtf";
StreamReader sr = new StreamReader(fileName);
string text = sr.ReadToEnd();
sr.Close();
rtb.Rtf = text;
rtb.Text = rtb.Text.Replace("{{Title}}", "Mr.");
rtb.Text = rtb.Text.Replace("{{LastName}}", "Johnson");
rtb.Text = rtb.Text.Replace("{{FirstName}}", "James");
rtb.SaveFile(@"C:\Users\James\SkyDrive\Sandbox\MailMerge\MailMerge\templates\Johnson2.rtf");