Comment convertir FlowDocument en RTF
-
06-07-2019 - |
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
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 ...