IE8问题:PDF文件显示为内联

时间:2010-11-29 13:08:45

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

我正从服务器下载PDF。我将“Content-Disposition”设置为“附件”。它的工作非常好,是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();

3 个答案:

答案 0 :(得分:2)

添加以下标题:

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 :(得分: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作为附件。

答案 2 :(得分:1)

我同意Multiplexer。 实际上问题是,如果'filename'没有以与Windows中的Acrobat Reader相关联的后缀结尾。只要添加“.pdf”就可以了。

然后是Cache-Control: no-cache的pitfal会导致IE呕吐。 使用Cache-control: private来阻止缓存。