MS Exchange / Outlook邮件使用MAPI存储数据。一个常见的MAPI属性包含消息正文的富文本版本(0x1009,PR_RTF_COMPRESSED,PidTagRtfCompressed)。如果富文本字符串具有无效结构,则Outlook 2003及更早版本无法显示任何正文内容。
例如,此RTF代码省略了结束“}”。
{\rtf1\ansi\ansicpg1252\deff0\deflang1033{\fonttbl{\f0\fswiss\fcharset0 Arial;}}
{\*\generator Msftedit 5.41.15.1515;}\viewkind4\uc1\pard\f0\fs20 asdfasdf\par
正确的版本是
{\rtf1\ansi\ansicpg1252\deff0\deflang1033{\fonttbl{\f0\fswiss\fcharset0 Arial;}}
{\*\generator Msftedit 5.41.15.1515;}\viewkind4\uc1\pard\f0\fs20 asdfasdf\par
}
我是否可以使用.NET方法或库来测试RTF代码是否有效?如果没有,我对C ++和Java或COM库开放。如果没有,是否存在报告RTF字符串不规则的应用程序?
理想的解决方案是报告包含违规行的行号。一个适当的解决方案将报告整个RTF是否有效且格式良好。
此问题在MAPI之外是相关的。例如,如果将上面指定的无效RTF字符串写入.RTF文件,它将在写字板5.1中正确打开,但Word 2007会报告错误并请求我修复该文件。
一个建议是我将RTF流式传输到富文本框中。我试过这段代码:
private void button1_Click(object sender, EventArgs e)
{
string aaa = richTextBox1.Rtf;
richTextBox1.Rtf = @"{\rtf1\ansi\ansicpg1252\deff0\deflang1033{\fonttbl{\f0\fswiss\fcharset0 Arial;}}{\*\generator Msftedit 5.41.15.1515;}\viewkind4\uc1\pard\f0\fs20 asdfasdf\par}";
richTextBox1.Refresh();
}
richTextBox1.Rtf是否以“}”结尾,富文本框将其显示为其内容: asdfasdf
当我省略最后一个“}”时,我正在寻找的解决方案会报告错误。
答案 0 :(得分:2)
为什么不将RTF加载到隐藏的RTF控件中然后将其流出? 究竟什么会设置无效的RTF?我不认为Outlook会这样做。