C# 从RTF文本获取纯文本

C# 从RTF文本获取纯文本,c#,.net,rtf,C#,.net,Rtf,我的数据库中有一个列,其中包含RTF格式的文本 如何使用C#仅获取它的纯文本 谢谢:D微软提供了他们基本上将rtf文本粘贴在RichTextBox中的位置,然后读取.text属性。。。这感觉有点笨拙,但它确实有效 static public string ConvertToText(string rtf) { using(RichTextBox rtb = new RichTextBox()) { rtb.Rtf = rtf; return rtb.Tex

我的数据库中有一个列,其中包含RTF格式的文本

如何使用C#仅获取它的纯文本

谢谢:D

微软提供了他们基本上将rtf文本粘贴在
RichTextBox
中的位置,然后读取
.text
属性。。。这感觉有点笨拙,但它确实有效

static public string ConvertToText(string rtf)
{
   using(RichTextBox rtb = new RichTextBox())
   {
       rtb.Rtf = rtf;
       return rtb.Text;
   }
}

如果您想要纯代码版本,您可以自己解析rtf并只保留文本位。这是一点工作,但不是很困难的工作-RTF文件有一个非常简单的语法

对于WPF,您可以使用 (使用Xceed WPF Toolkit)此扩展方法:

public static string RTFToPlainText(this string s)
    {
       // for information : default Xceed.Wpf.Toolkit.RichTextBox formatter is RtfFormatter 
        Xceed.Wpf.Toolkit.RichTextBox rtBox = new Xceed.Wpf.Toolkit.RichTextBox(new System.Windows.Documents.FlowDocument());
        rtBox.Text = s;
        rtBox.TextFormatter = new Xceed.Wpf.Toolkit.PlainTextFormatter();
        return rtBox.Text;

    }

是的,直到你看到有列的表格:)但是简单的粗体/斜体格式很容易。这总是让我恼火。另外,您必须在STA线程中执行此操作,这通常会干扰大多数程序的线程模型。。。是的,你会想用它,因为它是一个复杂的野兽。我有一个问题,这造成了内存泄漏。即使
RichTextBox rtb
立即超出范围,它似乎会增加用户对象计数,而不会减少。因此,我认为最好用using语句包装它。请注意,如果RTF包含页眉和页脚,RichTextBox组件将不会捕获该文本。这讨论了regex方法。