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



我有一个从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而失败。这里可能解释了原因,因为GetString确实没有返回预期的rtf格式,而是混合了文本/二进制数据,并提到了xaml(同样的格式也只返回文本,这是用以前的方法成功提取的(。我无法升级框架。

如果我能找到成功加载文档的方法,如果需要提取文本,我不介意遍历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);
}
}

最新更新