40

我正在尝试将存储在 sql 列中的文件的内容转换为 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 已损坏,因为当我在 notepad++ 中打开 pdf 时,我看到了一些垃圾标题(无论文件内容如何,​​它都是相同的)。垃圾标题是 NUL SOH NUL NUL NUL ....

4

2 回答 2

79

您不应该BinaryFormatter为此使用 - 用于将 .Net 类型序列化为二进制文件,以便可以将它们作为 .Net 类型再次读取。

如果它存储在数据库中,希望,作为varbinary- 那么您需要做的就是从中获取字节数组(这将取决于您的数据访问技术 - 例如,EF 和 Linq to Sql 将创建一个映射,使获取字节数组很简单),然后像在最后一行代码中一样将其写入文件。

运气好的话-我希望这fileContent是字节数组?在这种情况下,你可以做

System.IO.File.WriteAllBytes("hello.pdf", fileContent);
于 2013-01-10T13:35:57.017 回答
0

如果字节数组有问题,通常会发生这种情况。

File.WriteAllBytes("filename.PDF", Byte[]);

这将创建一个新文件,将指定的字节数组写入文件,然后关闭文件。如果目标文件已存在,则将其覆盖。

也可以使用异步实现。

public static System.Threading.Tasks.Task WriteAllBytesAsync 
(string path, byte[] bytes, System.Threading.CancellationToken cancellationToken = null);
于 2019-11-06T00:46:04.070 回答