2011-11-30 35 views
0

我試圖在新的WPF應用程序中顯示一個RTF文件(它是在一個遺留系統中創建的),並且遇到了一些困難。舊的RTF文件包含格式化爲二進制jpegblip的圖片,當讀取到RichTextBox,導致該異常:WPF RichTextBox可以顯示二進制圖片內容嗎?

Unrecognized structure in data format 'Rich Text Format'. Parameter name: stream 

我的文件減少到最低限度,以找出問題,並結束了與以下開口線(對於這個主題的二進制數據已被移除):

{\rtf1{\pict\picw2700\pich2700\picwgoal2700\pichgoal2700\jpegblip\bin9889 

這仍然導致了異常,所以我轉換的二值數據爲十六進制和創建與所述開口線新文件:

{\rtf1{\pict\picw2700\pich2700\picwgoal2700\pichgoal2700\jpegblip 

控件正確顯示了十六進制數據的文件。

有沒有人能夠將包含二進制圖片數據的文件加載到RichTexBox控件中,或者失敗了,是否有關於RichTextBox支持哪些RTF規範的二元語句?

回答

0

我甚至不確定Microsoft知道RichTextBox實現了什麼。他們對RTF的想法漂浮在太空中。請參閱MS Word,寫字板,衆多遺留豐富編輯控件等。

這有一些評論,討論在您的.NET代碼中使用COM對象,這是有點可預見的,但Microsoft並未指定哪些部分他們遵循的規範。 Broken tables in RichTextBox control (word wrap) - 如果你正確包裝它們,你可以在WPF中使用它們。

如果您只需顯示文檔,則可能會詢問您的所有用戶是否都具有Word。然後,您可能能夠嵌入Word文檔查看器,並解決問題。如果您的軟件在辦公室使用,那麼添加它就很容易。

我可能會閱讀這種格式,直到我知道它是如何工作的。然後在我的程序中,我會將RTF文件讀入緩衝區,獲取原始對象數據,以某種方式翻譯它,用更新的對象替換那些對象,然後將它傳遞給控件。

+0

感謝您的鏈接。不幸的是,在所有客戶端計算機上安裝Word並不是一個選項(用於查看和編輯),這就是爲什麼RTF首先用於我們的產品的原因。看起來我們正處於一種情況,那些舊版產品可能需要使用Word自動化進行轉換。 –

-1

對我來說,這段代碼工作正常。我甚至可以從數據庫表中抽取它。

<RichTextBox Height="100" HorizontalAlignment="Left" Margin="306,30,0,0" Name="rtfMain" VerticalAlignment="Top" Width="200" /> 


rtfMain.Selection.Load(new FileStream(@"C:\temp\document.rtf", FileMode.Open), DataFormats.Rtf); 
+0

感謝驅動器,如果它適用於我..... Thx –

+0

這並沒有解決原來的問題。我描述的問題是用二進制圖像數據加載RTF文件。 –

+0

rtf是二進制的,不管它是否包含圖像。我已經嘗試了一個圖像,沒有和二進制rtf文件中的圖像。也許我的回答會幫助別人。歡呼聲 –