2009-05-06 34 views
8

He usado un WPF RichTextBox 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 un rtf. cuando intento convertir el byte [] usando TextRange o en XAMLReader obtengo un FlowDocument pero como lo convierto en rtf string ya que el informe RichTextBox solo toma rtf.Cómo convertir FlowDocument a rtf

Gracias

Arvind

+0

¿Tal vez podría proporcionar una muestra de código? ¿Qué diferencia entre tu código y la respuesta de Peter (que parece viable según MSDN)? –

Respuesta

25

No debe persistir la FlowDocument directamente, ya que se debe considerar la representación de tiempo de ejecución del documento, no el contenido real del documento. En su lugar, use the TextRange class para guardar y cargar en varios formatos, incluido Rtf.

una muestra rápida sobre cómo crear una selección y guardar en una corriente:

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

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

para 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); 
} 
+0

Gracias por su respuesta pero he probado este método y esto no guarda el formateo realizado en el texto (es decir, hacer que el texto cambie de color en negrita), también necesito guardar el formato, así que lo guardo como un FlowDodcument –

2

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); 
} 
-3
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 

Usted tendrá que utilizar la cadena de conexión de SQL & instrucción de selección ... aparte de eso, este es el lugar ...

+2

¿Puede usted explica qué parte de tu código resuelve el problema? –

+1

Él no aborda el problema. El código simplemente lee una cadena RTF de un campo de base de datos binario (como ASCII>. <), Y luego la carga en un documento de flujo como RTF. – BrainSlugs83

+0

Respuesta aceptada: utilice la clase TextRange para guardar y cargar en varios formatos, incluido Rtf. – user1359009

Cuestiones relacionadas