2013-01-10 67 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 []' –