对于这个蹩脚的头衔感到抱歉,但想不出更好的方式来说出来,并且对此有几天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嗨\先生。 \约翰逊\看齐 你好吗,詹姆斯\帕尔 }
保存并在记事本中打开后RTF: {\ rtf1 \ ansi \ ansicpg1252 \ deff0 \ deflang1033 {\ fonttbl {\ f0 \ fnil \ fcharset0 Calibri;}} \ viewkind4 \ uc1 \ pard \ sa200 \ sl276 \ slmult1 \ lang9 \ f0 \ fs22嗨。 \看齐 你好吗,\ par }
我还需要做一些其他步骤,这会以正确的格式保存文件吗?我也尝试过使用RichTextBox控件,将字符串加载到其中,然后调用Save()方法。这给了我相同的结果。
谢谢, 詹姆斯
在阅读本文Cleaning up RTF text并使用以下代码后想出来:
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");