Как конвертировать FlowDocument в RTF - PullRequest
9 голосов
/ 06 мая 2009

Я использовал WPF RichTextBox для сохранения потокового документа из него как байта [] в базе данных. Теперь мне нужно получить эти данные и отобразить в отчете RichTextBox как RTF. Когда я пытаюсь преобразовать byte [] с помощью TextRange или в XAMLReader, я получаю FlowDocument обратно, но как мне преобразовать его в строку RTF, так как отчет RichTextBox принимает только RTF.

Спасибо

Арвинд

Ответы [ 3 ]

26 голосов
/ 06 мая 2009

Вы не должны сохранять 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);
}
2 голосов
/ 22 мая 2009

Это работает как очарование для меня. Отображает результат в окне RTF без затруднений.

public static string getDocumentAsXaml(IDocumentPaginatorSource flowDocument)
{
     return XamlWriter.Save(flowDocument);
}
0 голосов
/ 26 апреля 2012
    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 ... кроме этого, вот оно ...

...