Come convertire FlowDocument in RTF
-
06-07-2019 - |
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
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 ...