Pregunta

He usado un RichTextBox de WPF para guardar un documento de flujo como byte [] en la base de datos. Ahora necesito recuperar estos datos y mostrarlos en un informe RichTextBox como rtf. cuando trato de convertir el byte [] usando TextRange o en XAMLReader obtengo un FlowDocument de regreso, pero ¿cómo lo convierto a una cadena rtf ya que el informe RichTextBox solo toma rtf.

Gracias

Arvind

¿Fue útil?

Solución

No debe conservar el FlowDocument directamente, ya que debe considerarse la representación en tiempo de ejecución del documento, no el contenido real del documento. En su lugar, use la clase TextRange para guardar y cargar en varios formatos, incluidos < a href = "http://msdn.microsoft.com/en-us/library/system.windows.dataformats.rtf.aspx" rel = "noreferrer"> Rtf .

Una muestra rápida sobre cómo crear una selección y guardarla en una secuencia:

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

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

Cargar contenido en una selección sería similar:

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

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

Otros consejos

Esto funciona como un encanto para mí. Muestra el resultado en un cuadro RTF sin dificultades.

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

Deberá usar su cadena de conexión & amp; Sentencia de selección de SQL ... aparte de eso, esto es todo ...

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top