从ASP.NET 3.5站点将PDF文件推送到IE

时间:2009-05-09 17:45:51

标签: asp.net internet-explorer .net-3.5 pdf

我的应用程序将PDF文件推送到弹出窗口(例如没有菜单/工具栏)浏览器窗口(响应用户单击按钮)。这适用于除IE7之外的每个浏览器。在IE7中,我得到的只是一个空白窗口。

以下是推出PDF的服务器端代码:

private void StreamPDFReport(string ReportPath, HttpContext context)
{
    context.Response.Buffer = false;
    context.Response.Clear();
    context.Response.ClearContent();
    context.Response.ClearHeaders();        

    // Set the appropriate ContentType.
    context.Response.ContentType = "application/pdf";
    context.Response.AddHeader("Content-Disposition", "inline; filename=Report.pdf");
    context.Response.Cache.SetCacheability(HttpCacheability.NoCache);        

    // Write the file directly to the HTTP content output stream.
    context.Response.WriteFile(ReportPath);
    HttpContext.Current.ApplicationInstance.CompleteRequest();
    //context.Response.End();
}

在客户端,当用户按下按钮时,onClick处理程序中会发生以下情况:

onclick =“window.open('RptHandler.ashx?RptType = CaseInfo','Report','top = 10,left = 10,width = 1000,height = 750')

我错过了一些非常基本的东西吗?为什么它适用于所有浏览器而不是IE?

3 个答案:

答案 0 :(得分:4)

事实证明,以下语句导致IE无法显示PDF:

context.Response.Cache.SetCacheability(HttpCacheability.NoCache); 

不确定原因。

答案 1 :(得分:3)

使用IE7,我们发现您需要添加一个额外的标题'content-length'设置为您发送的PDF的大小。类似的东西:

Response.AddHeader(“content-length”, {pdf的大小} );

答案 2 :(得分:2)

似乎context.Response.Cache.SetCacheability(HttpCacheability.NoCache);只会在使用IIS7时起作用。

我将其更改为context.Response.AddHeader("Cache-Control", "no-cache");,它似乎与IE7和IE8一起使用。