Wie konvertiert man Flowdocument rtf
-
06-07-2019 - |
Frage
Ich habe eine WPF RichTextBox speichern ein Flowdocument aus als byte [] in der Datenbank verwendet. Jetzt muss ich diese Daten und Anzeige in einem Bericht RichTextBox als rtf abzurufen. wenn ich versuche, die byte [] unter Verwendung von Textrange oder in XamlReader zu konvertieren erhalte ich eine Flowdocument zurück, aber wie konvertiere ich es zu rtf String als der Bericht RichTextBox dauert nur rtf.
Danke
Arvind
Lösung
Sie sollten nicht die Flowdocument bestehen direkt, wie es die Laufzeit-Darstellung des Dokuments in Betracht gezogen werden sollte, nicht der tatsächliche Inhalt des Dokuments. Verwenden Sie stattdessen die Textrange-Klasse zum Speichern und Laden in verschiedene Formate einschließlich < a href = "http://msdn.microsoft.com/en-us/library/system.windows.dataformats.rtf.aspx" rel = "noreferrer"> Rtf .
Eine schnelle Probe, wie eine Auswahl zu erstellen und zu einem Strom sparen:
var content = new TextRange(doc.ContentStart, doc.ContentEnd);
if (content.CanSave(DataFormats.Rtf))
{
using (var stream = new MemoryStream())
{
content.Save(stream, DataFormats.Rtf);
}
}
Zum Inhalt in eine Auswahl zu laden wäre ähnlich:
var content = new TextRange(doc.ContentStart, doc.ContentEnd);
if (content.CanLoad(DataFormats.Rtf))
{
content.Load(stream, DataFormats.Rtf);
}
Andere Tipps
Das funktioniert wie ein Zauber für mich. Zeigt das Ergebnis in einer RTF-Box ohne Schwierigkeiten.
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
Sie müssen die Verbindungszeichenfolge und SQL-Select-Anweisung ... anders als das verwenden, das ist es ...