C# 如何将FileTeam另存为PDF文件
我正在使用第三方工具从扫描仪获取扫描内容。单击按钮时,它执行代码并将内容作为文件流提供。现在,我需要将此FileStream内容作为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文件?您可能想查看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。你能再解释一下你的解决方案吗。我想你给了我正确的解决方案,但我无法正确地得到它。是的,我需要将内容保存到磁盘。那么如何做到这一点呢?