How to convert FlowDocument to rtf

前端 未结 3 1969
-上瘾入骨i
-上瘾入骨i 2020-12-15 10:46

I have used a WPF RichTextBox to save a flowdocument from it as byte[] in database. Now i need to retrieve this data and display in a report RichTextBox as an rtf. when i tr

相关标签:
3条回答
  • 2020-12-15 10:53

    You should not persist the FlowDocument directly as it should be considered the runtime representation of the document, not the actual document content. Instead, use the TextRange class to Save and Load to various formats including Rtf.

    A quick sample on how to create a selection and save to a stream:

    var content = new TextRange(doc.ContentStart, doc.ContentEnd);
    
    if (content.CanSave(DataFormats.Rtf))
    {
        using (var stream = new MemoryStream())
        {
            content.Save(stream, DataFormats.Rtf);
        }
    }
    

    To load content into a selection would be similar:

    var content = new TextRange(doc.ContentStart, doc.ContentEnd);
    
    if (content.CanLoad(DataFormats.Rtf))
    {
        content.Load(stream, DataFormats.Rtf);
    }
    
    0 讨论(0)
  • 2020-12-15 11:04

    This works like a charm for me. Displays the result in an RTF box without difficulties.

    public static string getDocumentAsXaml(IDocumentPaginatorSource flowDocument)
    {
         return XamlWriter.Save(flowDocument);
    }
    
    0 讨论(0)
  • 2020-12-15 11:14
        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
    

    You will need to use your connection string & SQL select statement ... other than that, this is it ...

    0 讨论(0)
提交回复
热议问题