2013-01-10 101 views
24

我想將存儲在sql列中的文件的內容轉換爲pdf。字節數組爲pdf

我用下面的代碼段:

byte[] bytes; 
BinaryFormatter bf = new BinaryFormatter(); 
MemoryStream ms = new MemoryStream(); 
bf.Serialize(ms, fileContent); 
bytes = ms.ToArray(); 
System.IO.File.WriteAllBytes("hello.pdf", bytes); 

生成的PDF是腐敗在這個意義上,當我在記事本中打開PDF ++,我看到一些垃圾報頭(它是fileContent的相同無關) 。垃圾郵件頭是NUL SOH NUL NUL NUL ....

+4

'BinaryFormatter'與pdf沒有任何關係。在一個句子中使用這兩個是一個很大的錯誤。什麼是'fileContent'這裏? (即那種*類型是什麼) –

+0

您的SQL列是否保存了序列化的PDF文件或者是否可以通過任何二進制數據? –

+0

我使用類似的方法,但在移動版本的Adobe閱讀器中不能打開pdf。 – Mukund

回答

43

您不應該使用BinaryFormatter - 這是爲了將.Net類型序列化爲二進制文件,以便它們可以作爲.Net類型再次讀回。

如果它存儲在數據庫中,希望作爲varbinary - 那麼你需要做的就是從中獲取字節數組(這取決於你的數據訪問技術 - 例如EF和Linq到Sql)創建一個映射使得獲得一個字節數組變得微不足道),然後像在最後一行代碼中那樣將它寫入文件。

隨着任何運氣 - 我希望fileContent這裏是字節數組?在這種情況下,你可以做

System.IO.File.WriteAllBytes("hello.pdf", fileContent); 
+0

謝謝。你是對的。我已經將fileContent定義爲ds.Tables [0] .Rows [0] [「fileData」]。所以我所做的只是byte [] b =(byte [])fileContent。沒有必要使用BinaryFormatter。謝謝馬克和蒂姆! –

+0

我正在尋找解決方案,但我在這裏,我可以知道變量類型「fileContent」在此先感謝。 – sidhewsar

+0

嗨@sidhewsar - 它是'byte []' –