Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/300.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 如何将FileTeam另存为PDF文件_C#_Asp.net_Pdf_Save_Filestream - Fatal编程技术网

C# 如何将FileTeam另存为PDF文件

C# 如何将FileTeam另存为PDF文件,c#,asp.net,pdf,save,filestream,C#,Asp.net,Pdf,Save,Filestream,我正在使用第三方工具从扫描仪获取扫描内容。单击按钮时,它执行代码并将内容作为文件流提供。现在,我需要将此FileStream内容作为pdf文件保存到指定的文件夹中 保存后,我需要在浏览器中打开文件。如何将FileStream保存为PDF文件?您可能想查看SourceForge上的C#PDF库:不确定,但可能需要检查一下 另一个著名的PDF库(我过去也使用过)是。您可以查看如何将流转换为PDF格式,然后让用户下载。如果我理解正确,第三方库将向您提供一个包含扫描文档数据的流,您需要将其写入文件吗?

我正在使用第三方工具从扫描仪获取扫描内容。单击按钮时,它执行代码并将内容作为文件流提供。现在,我需要将此FileStream内容作为pdf文件保存到指定的文件夹中


保存后,我需要在浏览器中打开文件。如何将FileStream保存为PDF文件?

您可能想查看SourceForge上的C#PDF库:

不确定,但可能需要检查一下


另一个著名的PDF库(我过去也使用过)是。您可以查看如何将流转换为PDF格式,然后让用户下载。

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

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();

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

因此,如果您的代码中有来自扫描仪的文件流。只需从扫描程序文件流中读取字节并将其写入
响应。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";
    }

Simon

是,它正在保存文件。当我打开它时,会显示一条错误消息,adobe reader无法打开此文件。这只是保存流。但实际数据不是PDF格式的。您需要使用其他答案中提到的第三方库,使用单独的库将该流转换为PDF。是的,文件流已经是PDF。你能再解释一下你的解决方案吗。我想你给了我正确的解决方案,但我无法正确地得到它。是的,我需要将内容保存到磁盘。那么如何做到这一点呢?