从富文本格式转换为纯文本格式问题

时间:2012-05-01 20:11:46

标签: winforms rtf

我们目前有一个应用程序(Windows服务)连接到我们的另一个应用程序并抓取发票。在发票中,页脚/标题字段有一个RTF字段。当我们获取数据时,RTF将使用以下代码转换为纯文本:

public static string ConvertFromRTFToPlainText(string rtfString)
{
    if (rtfString == null)
        return null; 

    System.Windows.Forms.RichTextBox rtBox = new System.Windows.Forms.RichTextBox();

    if (rtfString.StartsWith("{\\rtf1"))
        rtBox.Rtf = rtfString;
    else
        rtBox.Text = rtfString;

    return rtBox.Text;
}

这在大多数情况下都有效,但在某些情况下(一个特定的客户端每次都会得到它)我得到了这个例外:

Exception Message:Error creating window handle.
Stack trace:
at System.Windows.Forms.NativeWindow.CreateHandle(CreateParams cp)
at System.Windows.Forms.Control.CreateHandle()
at System.Windows.Forms.TextBoxBase.CreateHandle()
at System.Windows.Forms.RichTextBox.set_Rtf(String value)
at SmartTrade.Common.API.Tools.RTFHelperUtility.ConvertFromRTFToPlainText(String rtfString)
at SmartTrade.Desktop.Proxy.API.ObjectMapper.InvoiceObjectMapper.CovertToAPIInvoice(Invoice domainInvoice)

对于为什么会发生这种情况或我们如何解决这些问题的任何帮助都将非常感激。

编辑:感谢Jeremy的解释,我正在接受有关RTF转换替代方案的建议。

2 个答案:

答案 0 :(得分:3)

我想说这可能是在没有安装UI库的终端类型机器上抛出的?或者可能没有加载它们(即 - 如果没有用户登录)

在服务中使用UI库通常不是一个好主意,因为如果没有用户登录,则无法保证可以访问这些库。

我会找到一种不同的方法来删除RTF格式

答案 1 :(得分:2)

我最终使用了这个。我知道它可能无法解析100%的RTF文本,但我们针对我们的实时数据运行它来测试它,它适用于我们的目的。

Regex.Replace(rtfString, @"\{\*?\\[^{}]+}|[{}]|\\\n?[A-Za-z]+\n?(?:-?\d+)?[ ]?", "");