如何将FileSteam保存为pdf文件

时间:2011-07-22 09:24:17

标签: c# asp.net pdf save filestream

我正在使用第三方工具从扫描仪获取扫描内容。单击按钮,它将执行代码并将内容作为FileStream提供。现在我需要将这个FileStream内容作为pdf文件保存到指定的文件夹中。保存后我需要在浏览器中打开文件。那么如何将FileStream保存为pdf文件。请帮助我。

5 个答案:

答案 0 :(得分:1)

您可能需要查看SourceForge上的C#PDF库:http://sourceforge.net/projects/pdflibrary/

答案 1 :(得分:1)

如果我理解正确,第三方库会向您发送包含扫描文档数据的流,您需要将其写入文件吗?如果是这种情况,您需要在C#中查找文件I / O.这是一个link和一个例子:

Stream sourceStream = scanner.GetOutput(); // whereever the source stream is
FileStream targetStream = File.OpenWrite(filename, FileMode.Create());
int bytesRead = 0;
byte[] buffer = new byte[2048];
while (true) {
     bytesRead = sourceStream.Read(buffer, 0, buffer.length);
     if (bytesRead == 0)
         break;
     targetStream.Write(buffer, 0, bytesRead);
}
sourceStream.Close();
targetStream.Close();

答案 2 :(得分:1)

您可以将流直接写入响应的输出缓冲区。

因此,如果您的代码中有来自扫描程序的文件流。只需从扫描程序文件流中读取字节并将其写入Response.OutputStream

即可

将contentType设置为application/pdf

确保您没有返回任何其他内容。用户浏览器将执行现在配置的任何操作,保存到磁盘或在浏览器中显示。此时,您还可以将其保存到服务器上的磁盘,以防您需要备份。

我假设你的文件流已经是pdf了,否则你需要使用像itextsharp这样的东西来创建pdf。

修改 这里有一些粗略且准备好的代码。你需要整理一下,比如添加异常捕获以确保文件流得到正确清理。

    public void SaveToOutput(Stream dataStream)
    {
        dataStream.Seek(0, SeekOrigin.Begin);
        FileStream fileout = File.Create("somepath/file.pdf");

        const int chunk = 512;
        byte[] buffer = new byte[512];

        int bytesread = dataStream.Read(buffer,0,chunk);

        while (bytesread == chunk)
        {
            HttpContext.Current.Response.OutputStream.Write(buffer, 0, chunk);
            fileout.Write(buffer, 0, chunk);
            bytesread = dataStream.Read(buffer, 0, chunk);
        }

        HttpContext.Current.Response.OutputStream.Write(buffer, 0, bytesread);
        fileout.Write(buffer, 0, bytesread);
        fileout.Close();

        HttpContext.Current.Response.ContentType = "application/pdf";
    }

西蒙

答案 3 :(得分:0)

答案 4 :(得分:0)

另一个着名的PDF库(我过去也曾使用过)是iTextSharp。您可以查看this tutorial如何您的信息流转换为PDF,然后让用户下载。