PDF不会在浏览器窗口中显示

时间:2014-02-20 19:51:28

标签: c# .net pdf ashx

我正在使用处理程序使用以下代码在浏览器窗口中获取和显示PDF:

byte[] byt = RetrieveDocument(int.Parse(context.Request.Params["id"]), context.Request.Params["title"]);
string file = WriteDocumentFilePDF(byt);
HttpContext.Current.Response.ContentType = "application/pdf";
HttpContext.Current.Response.AddHeader("content-length", byt.Length.ToString());
HttpContext.Current.Response.AddHeader("Content-Disposition", "inline; filename=programdetails.pdf");
HttpContext.Current.Response.BinaryWrite(byt);
HttpContext.Current.Response.End();

函数WriteDocumentFilePDF成功将PDF写入临时目录。我有上面的代码在不同的应用程序中正常工作。我错过了什么吗?

2 个答案:

答案 0 :(得分:2)

在调试这样的问题时,我发现Fiddler是一个非常宝贵的工具;很多次它让我免于简单的错误。此外,此网站http://www.c-sharpcorner.com/uploadfile/prathore/what-is-an-ashx-file-handler-or-web-handler/提供了使用GIF图像执行相同操作的示例。您的示例与他之间的区别似乎是使用Response.WriteFile()而不是使用BinaryWrite()直接写入Response。

在设置content-type之前我会执行一个Response.ClearHeaders(),我会删除对Response.End()的调用。

答案 1 :(得分:0)

如果您先将byte[]传递给memorystream,会不会有所作为?像

这样的东西
byte[] byt = RetrieveDocument(int.Parse(context.Request.Params["id"]), context.Request.Params["title"]);
string file = WriteDocumentFilePDF(byt);
MemoryStream ms = new MemoryStream(byt);

然后添加标题

HttpContext.Current.Response.ContentType = "application/pdf";    
HttpContext.Current.Response.AddHeader("Content-Disposition", "inline;  filename=programdetails.pdf");
HttpContext.Current.Response.BinaryWrite(ms.ToArray());
HttpContext.Current.Response.End();