【发布时间】:2011-07-22 09:24:17
【问题描述】:
我正在使用第三方工具从扫描仪获取扫描的内容。单击按钮时,它会执行代码并将内容作为 FileStream 提供。现在我需要将此 FileStream 内容作为 pdf 文件保存到指定文件夹中。
保存后我需要在浏览器中打开文件。如何将 FileStream 保存为 PDF 文件?
【问题讨论】:
标签: c# asp.net pdf save filestream
我正在使用第三方工具从扫描仪获取扫描的内容。单击按钮时,它会执行代码并将内容作为 FileStream 提供。现在我需要将此 FileStream 内容作为 pdf 文件保存到指定文件夹中。
保存后我需要在浏览器中打开文件。如何将 FileStream 保存为 PDF 文件?
【问题讨论】:
标签: c# asp.net pdf save 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";
}
西蒙
【讨论】:
您可能想查看 SourceForge 上的 C# PDF 库:http://sourceforge.net/projects/pdflibrary/
【讨论】:
如果我的理解正确,第三方库正在向您发送包含扫描文档数据的流,您需要将其写入文件吗?如果是这种情况,您需要在 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();
【讨论】:
另一个著名的 PDF 库(我过去也使用过)是 iTextSharp。您可以查看this tutorial,了解如何将您的 Stream 转换为 PDF,然后让用户下载。
【讨论】: