【问题标题】:IE8 Issue: PDF file is displayed as inlineIE8 问题:PDF 文件显示为内联
【发布时间】:2010-11-29 13:08:45
【问题描述】:

我正在从我的服务器下载 PDF。我将“内容处置”设置为“附件”。它的工作非常好是Firefox。但在 IE8 中它显示为内联。有解决此问题的快速指示吗?

编辑:

我正在使用 Springs 编写 PDF 字节数组流。并在客户端使用JSP来显示。

客户端:

我正在使用 dhtml 网格并保留一个标签。网格中的代码如下所示:

<a href='javascript:viewPDF(14)' target="_self" >View</a>

点击这个方法 viewPDF 被调用。我将此代码保存在我的 javascript 文件中。

function viewPDF(id) {
    $("#pdfID").val(id);
    $("#myform").attr('action',url);
    $("#myform").submit();
}

服务器端代码库:

ByteArrayOutputStream reportBAOS = getPDFByteArrayStream();/*This is my method which returns the byte array stream.*/
response.setContentType("application/pdf");
response.setHeader("Content-Disposition","attachment; filename=testfile");
response.setHeader("Pragma","Public");
response.setHeader("Cache-Control","must-revalidate,post-check=0,pre-check=0");
response.setHeader("Expires","0");
ServletOutputStream os = response.getOutputStream();
os.write(reportBAOS.toByteArray());
os.flush();
os.close();

【问题讨论】:

    标签: internet-explorer-8 pdf-generation inline dhtml ie8-browser-mode


    【解决方案1】:

    添加这些标题:

    header("Pragma: public"); //This one may work by itself.
    header("Expires: 0");
    header("Cache-Control: must-revalidate, post-check=0, pre-check=0");
    header("200 HTTP/1.0 OK"); //HTTP 1.0 Compatible
    

    这将强制 Internet Explorer 从服务器下载文件。

    【讨论】:

    • +1 每当我向用户强制内容时,我都会使用前三行,并且它们可以正常工作。
    • 我包含了所有的标题,但仍然没有帮助我仍然面临这个问题。
    • @Multiplexer:你能在你的问题中发布你用来触发下载的代码吗?
    【解决方案2】:

    我花了一天时间找出问题所在。但最后我明白了。

    我不能说 Evan Mulawski 的回答是错误的。我什至尝试了他的代码。但没有帮助。最后我发现文件扩展名不见了。我只是将 .pdf 附加到 testfile 中。

    response.setHeader("Content-Disposition","attachment; filename=testfile.pdf");
    

    现在我删除了以下内容。

    response.setHeader("Pragma","Public");
    response.setHeader("Cache-Control","must-revalidate,post-check=0,pre-check=0");
    response.setHeader("Expires","0");
    

    即使使用上述代码,我仍将 PDF 作为附件获取。

    【讨论】:

      【解决方案3】:

      我同意多路复用器。 实际上问题在于,如果“文件名”不以与 Windows 中的 Acrobat Reader 关联的后缀结尾。只要添加“.pdf”就可以了。

      然后是Cache-Control: no-cache 的陷阱,它会导致IE 呕吐。 使用Cache-control: private 防止缓存。

      【讨论】:

        猜你喜欢
        • 2014-01-23
        • 1970-01-01
        • 2011-07-25
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2023-04-02
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多