Question

J'ai utilisé un fichier WPF RichTextBox pour enregistrer un document de flux sous forme d'octet [] dans la base de données. Maintenant, je dois récupérer ces données et les afficher dans un rapport RichTextBox en tant que fichier RTF. Lorsque j'essaie de convertir l'octet [] à l'aide de TextRange ou dans XAMLReader, je récupère un FlowDocument, mais comment le convertir en chaîne RTF car le rapport RichTextBox ne prend que RTF.

Merci

Arvind

Était-ce utile?

La solution

Vous ne devez pas conserver le FlowDocument directement, car il doit être considéré comme la représentation du document au moment de l'exécution, et non pas le contenu du document. A la place, utilisez la la classe TextRange pour enregistrer et charger dans divers formats, notamment < a href = "http://msdn.microsoft.com/en-us/library/system.windows.dataformats.rtf.aspx" rel = "noreferrer"> Rtf .

Un exemple rapide sur la façon de créer une sélection et de l'enregistrer dans un flux:

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

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

Charger du contenu dans une sélection serait similaire:

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

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

Autres conseils

Cela fonctionne comme un charme pour moi. Affiche le résultat dans une boîte RTF sans difficulté.

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

Vous devrez utiliser votre chaîne de connexion & amp; Instruction de sélection SQL ... autre que cela, c'est ça ...

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top