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

War es hilfreich?

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 ...

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top