2011-07-22 77 views
4

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

+0

的WebForms或MVC? –

+0

我正在使用WebForms – ANP

回答

0

另一个突出的PDF库(我过去也使用过)是iTextSharp。你可以看看this tutorial关于如何将转换成你的Stream to PDF然后让用户下载它。

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

是的,它正在保存文件。当我打开它显示错误消息,Adobe阅读器无法打开此文件。 – ANP

+0

这只是保存流。但实际数据不是PDF格式。您需要使用单独的库来将流转换为使用其他答案中提到的第三方库进行PDF转换。 –

1

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

所以,如果你在你的代码中的位置,你有扫描仪的文件流。只需从扫描仪FILESTREAM读取的字节,并将其写入到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"; 
    } 

西蒙

+0

是文件流已经是pdf。你能解释一下你的解决方案吗?我想你正在给我正确的解决方案,但我无法正确地得到它。 – ANP

+0

是的,我需要将内容保存到磁盘。那么如何做到这一点? – ANP