C# 在BinaryWrite之后的某段时间内,Pdf无法打开
我创建了编辑现有PDf内容(添加一些文本和图像)的功能,然后打开此PDf文件进行打印或下载,并使用此代码 Pdf在C# 在BinaryWrite之后的某段时间内,Pdf无法打开,c#,asp.net,pdf,itextsharp,C#,Asp.net,Pdf,Itextsharp,我创建了编辑现有PDf内容(添加一些文本和图像)的功能,然后打开此PDf文件进行打印或下载,并使用此代码 Pdf在BinaryWrite byte[] outBuf = outStream1.GetBuffer(); HttpContext.Current.Response.Expires = 0; HttpContext.Current.Response.Buffer = true; HttpContext.Current.Response.ClearContent(); HttpContex
BinaryWrite
byte[] outBuf = outStream1.GetBuffer();
HttpContext.Current.Response.Expires = 0;
HttpContext.Current.Response.Buffer = true;
HttpContext.Current.Response.ClearContent();
HttpContext.Current.Response.AddHeader("content-disposition", "attachment;filename="test.pdf");
HttpContext.Current.Response.ContentType = "application/pdf";
HttpContext.Current.Response.ContentEncoding = new System.Text.UTF8Encoding();
HttpContext.Current.Response.BinaryWrite(outBuf);
outStream.Close();
HttpContext.Current.Response.End();
它在本地机器或开发服务器上运行良好,在服务器上运行一段时间。
在服务器上打开一段时间后,它将打开空白页。在浏览器缓存清除或临时文件清除后,它会工作
我不明白问题出在哪里,可能是客户端浏览器内存问题。
但是如果是浏览器内存问题,它也应该在本地出现,因为我使用的是同一个浏览器
请给我一些想法或解决方案,以便我可以对我们的这件事进行排序。如果内存流是从一个字节数组创建为只读流,则仅返回内存流的内容。否则,它将返回内部缓冲区,该缓冲区的末尾可能包含未使用的字节
使用获取内存流的确切内容,仅此而已:
byte[] outBuf = outStream1.ToArray();
另一件有时会触发某些浏览器将流视为PDF的事情是在URL中附加一些伪参数,使其以“.PDF”结尾。我不确定这在您的情况下是否真的有必要,因为您正在将“内容处置”设置为“附件”。不过不会有什么害处。绝对同意@Guffa的说法。另外,也许我需要更多的咖啡,但我似乎不明白
ContentEncoding
将设置为UTF8
。出于调试目的,如果这些更改不起作用,请尝试将字节写入服务器上的磁盘,然后传输/重定向到该文件。