Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/asp.net/34.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 在BinaryWrite之后的某段时间内,Pdf无法打开_C#_Asp.net_Pdf_Itextsharp - Fatal编程技术网

C# 在BinaryWrite之后的某段时间内,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

我创建了编辑现有PDf内容(添加一些文本和图像)的功能,然后打开此PDf文件进行打印或下载,并使用此代码 Pdf在
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
。出于调试目的,如果这些更改不起作用,请尝试将字节写入服务器上的磁盘,然后传输/重定向到该文件。