2009-05-06 6 views
8

Bir akış belgesini veritabanında bayt [] olarak kaydetmek için bir WPF RichTextBox kullandım. Şimdi bu verileri almam ve RichTextBox raporunu rtf olarak göstermem gerekiyor. , TextRange veya XAMLReader kullanarak byte [] dönüştürmek çalıştığınızda bir FlowDocument geri almak ama nasıl RichTextBox yalnızca rtf alır rapor olarak rtf dizesine dönüştürün.FlowDocument, rtf'ye dönüştürme

Teşekkür

Arvind

+0

Belki bir kod örneği verebilir misiniz? Siz kod ile Peter'ın cevabı arasındaki fark nedir (MSDN'ye göre uygulanabilir gibi görünüyor)? –

cevap

25

o belgenin çalışma zamanı gösterimi değil, gerçek belge içeriği dikkate alınmalıdır olarak doğrudan FlowDocument ısrar etmemelidir. Bunun yerine, Rtf dahil olmak üzere çeşitli biçimlerde Kaydet ve Yükle'ye the TextRange class kullanın.

bir seçim oluşturmak ve bir akışa kaydedilmesi ile ilgili hızlı bir örnek:

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

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

benzer olacak bir seçim haline içerik yüklemek için:

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

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

Yanıtınız için teşekkürler, ancak bu yöntemi denedim ve bu, metinde yapılan biçimlendirmeyi kaydetmiyor (yani, metni kalın bir şekilde değiştirerek renk değiştirerek), ayrıca kaydetme biçimine ihtiyacım var, böylece bir akışDodcument –

2

Bu benim için bir cazibe gibi çalışır . Sonucu, zorluk çekmeden bir RTF kutusunda görüntüler.

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 
, bu
+2

olarak kaydedebilir miyim Kodunuzun hangi kısmının sorunu çözdüğünü açıklayın. –

+1

Sorunu ele almıyor. Kod, bir ikili veritabanı alanından (ASCII>. <) Bir RTF dizesini okur ve RTF olarak bir akış belgesine yükler. – BrainSlugs83

+0

Kabul Edilen Yanıt: Rtf dahil olmak üzere çeşitli biçimlere Kaydet ve Yükle için TextRange sınıfını kullanın. – user1359009