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