使用文本和图像从 RTF 中提取文本

Extracting text from RTF with text and image

我有一个从 WPF RichTextControl 中提取的字节数组,我从中提取文本。我成功地使用了以下代码:

FlowDocument document = new FlowDocument();
TextRange txtRange = null;
using (MemoryStream stream = new MemoryStream(data))
{
    txtRange = new TextRange(document.ContentStart, document.ContentEnd);
    txtRange.Load(stream, DataFormats.XamlPackage);
}

当 rtf 中嵌入了图像时,问题就出现了。我仍然想提取文本,但上面的代码将因 Load 方法上的 XamlParseException 而失败。

我尝试使用以下方法:

using (RichTextBox rtb = new RichTextbox())
{
  rtb.Rtf = System.Text.Encoding.Default.GetString(data);
  // use rtb.Text
}

但是 rtb.Rtf 的设置失败 ArgumentException。原因可能是 explained here,因为 GetString 确实不是 return 预期的 rtf 格式,而是混合了 text/binary 数据和 xaml 的提及(同样的格式也 returns 仅用于文本,已使用之前的方法成功提取)。我无法升级框架。

如果我能找到成功加载文档的方法,如果需要提取文本,我不介意遍历 FlowDocument 树。

是否有其他阅读 RTF 的方法?

显然,当 RTF 中包含图像时,代码将在 STA 中 运行 时运行。例如:

Thread t = new Thread(() => Foo(data));
t.SetApartmentState(Apartment.STA);
t.Start();
t.Join();

Foo()
{
  FlowDocument document = new FlowDocument();
  TextRange txtRange = null;
  using (MemoryStream stream = new MemoryStream(data))
  {
      txtRange = new TextRange(document.ContentStart, document.ContentEnd);
      txtRange.Load(stream, DataFormats.XamlPackage);
  }
}