PDF文件下载不仅适用于iPad特定浏览器

时间:2013-01-10 20:12:31

标签: ipad google-chrome pdf safari

在服务器端生成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();
      }
 }

2 个答案:

答案 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()。 我不确定这两个标题是否相互影响或相互抵消,所以不能肯定它是错误的来源,但似乎需要考虑改变。