在服务器端生成PDF文件并推送到客户端进行下载。虽然下载适用于Windows上的所有浏览器,但在IPAD上失败。 请指教。
规格:OS 6,Safari 6.1,Chrome 23.0.1271.100
请注意:在此申请中,pdf不会下载到新网址(无重定向)。
一般行为:iPad浏览器(safari / chrome)不支持下载窗口,因此预计打开pdf并提供在pdf兼容应用程序中查看的选项。目前还没有发生。
当我调试下面的servlet操作代码进行下载时,pdf文件在服务器上成功生成,但Ipad上的浏览器没有显示:-(
代码示例:
/ **设置响应标题** /
response.setHeader("Content-Type", "application/pdf");
response.setHeader("Content-Disposition", "attachment;filename=sample.pdf");
response.setHeader("Connection", "close");
response.setHeader("Cache-Control","cache");
response.setHeader("Pragma","cache");
response.setDateHeader ("Expires", dt.getTime() + 100000);
/ **写入输出** /
InputStream stream = info.getInputStream();
OutputStream os = response.getOutputStream();
try {
response.setContentType(contentType);
copy(stream, response.getOutputStream());
}
finally {
if (stream != null) {
stream.close();
}
}
答案 0 :(得分:2)
经过测试,上面粘贴的下载操作代码似乎工作正常,因为问题是特定于BROWSER的。
Andriod Tablet - Firefox浏览器将pdf下载到弹出窗口。 iPad:Safari - FIX:强制在新标签页中打开内容,如下所示:
<强> window.open(print_url); 强>
其中print_url是baseurl + action.do + additional_parameter。
答案 1 :(得分:1)
要显示pdf而不是要求浏览器保存,请使用“内联”而不是“附件”。
response.setHeader("Content-Disposition", "inline;filename=sample.pdf");
此外,您要设置内容类型两次,一次在标题中,一次使用setContentType()
。
我不确定这两个标题是否相互影响或相互抵消,所以不能肯定它是错误的来源,但似乎需要考虑改变。