验证RTF的RTF格式

时间:2012-10-01 21:24:04

标签: rtf mapi richtext

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

当我省略最后一个“}”时,我正在寻找的解决方案会报告错误。

1 个答案:

答案 0 :(得分:2)

为什么不将RTF加载到隐藏的RTF控件中然后将其流出? 究竟什么会设置无效的RTF?我不认为Outlook会这样做。