Как преобразовать FlowDocument в rtf
-
06-07-2019 - |
Вопрос
Я использовал WPF RichTextBox для сохранения flowdocument из него как byte[] в базе данных.Теперь мне нужно извлечь эти данные и отобразить в отчете RichTextBox в формате rtf.когда я пытаюсь преобразовать byte[] с помощью TextRange или в XamlReader, я получаю FlowDocument обратно, но как мне преобразовать его в строку rtf, поскольку отчет RichTextBox принимает только rtf.
Спасибо
Арвинд
Решение
Вы не должны сохранять FlowDocument напрямую, поскольку его следует рассматривать как представление документа во время выполнения, а не как фактическое содержимое документа.Вместо этого используйте класс TextRange ( текстовый диапазон ) сохранять и загружать в различные форматы, включая Rtf.
Краткий пример того, как создать выделение и сохранить его в потоке:
var content = new TextRange(doc.ContentStart, doc.ContentEnd);
if (content.CanSave(DataFormats.Rtf))
{
using (var stream = new MemoryStream())
{
content.Save(stream, DataFormats.Rtf);
}
}
Загрузить содержимое в выделенную область было бы аналогично:
var content = new TextRange(doc.ContentStart, doc.ContentEnd);
if (content.CanLoad(DataFormats.Rtf))
{
content.Load(stream, DataFormats.Rtf);
}
Другие советы
Для меня это работает как заклинание.Выводит результат в формате RTF без затруднений.
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
Вам нужно будет использовать вашу строку подключения и инструкцию SQL select ...в остальном, это все ...