我使用 WPF RichTextBox 将流文档保存为数据库中的字节 []。现在我需要检索这些数据并在报告 RichTextBox 中显示为 rtf。当我尝试使用 TextRange 或在 XAMLReader 中转换字节 [] 时,我得到了一个 FlowDocument,但是我如何将它转换为 rtf 字符串,因为报告 RichTextBox 只需要 rtf。
谢谢
阿尔文德
我使用 WPF RichTextBox 将流文档保存为数据库中的字节 []。现在我需要检索这些数据并在报告 RichTextBox 中显示为 rtf。当我尝试使用 TextRange 或在 XAMLReader 中转换字节 [] 时,我得到了一个 FlowDocument,但是我如何将它转换为 rtf 字符串,因为报告 RichTextBox 只需要 rtf。
谢谢
阿尔文德
您不应该直接保留 FlowDocument,因为它应该被视为文档的运行时表示,而不是实际的文档内容。相反,使用TextRange 类来保存和加载各种格式,包括Rtf。
有关如何创建选择并保存到流的快速示例:
var content = new TextRange(doc.ContentStart, doc.ContentEnd);
if (content.CanSave(DataFormats.Rtf))
{
using (var stream = new MemoryStream())
{
content.Save(stream, DataFormats.Rtf);
}
}
将内容加载到选择中将是类似的:
var content = new TextRange(doc.ContentStart, doc.ContentEnd);
if (content.CanLoad(DataFormats.Rtf))
{
content.Load(stream, DataFormats.Rtf);
}
这对我来说就像一个魅力。毫无困难地在 RTF 框中显示结果。
public static string getDocumentAsXaml(IDocumentPaginatorSource flowDocument)
{
return XamlWriter.Save(flowDocument);
}
Using conn As New System.Data.SqlClient.SqlConnection(connectionSTRING)
Dim adapter As New System.Data.SqlClient.SqlDataAdapter(selectSTRING, conn)
Dim DS As System.Data.DataSet = New System.Data.DataSet
adapter.Fill(DS)
Dim ba() As Byte = Text.Encoding.ASCII.GetBytes(DS.Tables(0).Rows(0)("RTF_Field").ToString())
Dim ms As MemoryStream = New MemoryStream(ba)
Dim fd As FlowDocument = New FlowDocument
Dim tr As TextRange = New TextRange(fd.ContentStart, fd.ContentEnd)
tr.Load(ms, System.Windows.DataFormats.Rtf)
ms.Close()
RichTextBox.Document = fd
End Using
您将需要使用连接字符串和 SQL 选择语句……除此之外,就是这样……