Domanda

Ho usato un RichTextBox WPF per salvare un documento di flusso da esso come byte [] nel database. Ora ho bisogno di recuperare questi dati e visualizzarli in un rapporto RichTextBox come RTF. quando provo a convertire il byte [] utilizzando TextRange o in XAMLReader ottengo un FlowDocument ma come faccio a convertirlo in stringa RTF poiché il rapporto RichTextBox richiede solo RTF.

Grazie

Arvind

È stato utile?

Soluzione

Non dovresti perseguire direttamente FlowDocument poiché dovrebbe essere considerato la rappresentazione runtime del documento, non il contenuto del documento effettivo. Utilizza invece la classe TextRange per salvare e caricare in vari formati tra cui < a href = "http://msdn.microsoft.com/en-us/library/system.windows.dataformats.rtf.aspx" rel = "noreferrer"> Rtf .

Un rapido esempio su come creare una selezione e salvarla in uno stream:

var content = new TextRange(doc.ContentStart, doc.ContentEnd);

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

Caricare il contenuto in una selezione sarebbe simile:

var content = new TextRange(doc.ContentStart, doc.ContentEnd);

if (content.CanLoad(DataFormats.Rtf))
{
    content.Load(stream, DataFormats.Rtf);
}

Altri suggerimenti

Questo funziona come un incantesimo per me. Visualizza il risultato in una casella RTF senza difficoltà.

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

Dovrai usare la stringa di connessione & amp; Istruzione SQL select ... a parte questo, eccola qui ...

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top