1

在服务器端生成一个 PDF 文件并推送到客户端进行下载。虽然下载适用于 windows 上的所有浏览器,但在 IPAD 上失败。请指教。

规格:OS 6、Safari 6.1、Chrome 23.0.1271.100

请注意:在此应用程序中,pdf 不会下载到新的 url(无重定向)。

一般行为: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();
      }
 }
4

2 回答 2

2

经过测试,上面粘贴的下载操作代码似乎工作正常,因为问题是特定于浏览器的。

Andriod Tablet - Firefox 浏览器将 pdf 下载到弹出窗口。iPad:Safari - FIX:强制内容在新标签页中打开,如下所示:

window.open(print_url);

其中 print_url 是 baseurl+action.do+additional_parameter。

于 2013-01-23T00:47:20.857 回答
1

要显示 pdf 而不是要求浏览器保存它,请使用“inline”而不是“attachment”。

response.setHeader("Content-Disposition", "inline;filename=sample.pdf"); 

此外,您设置了两次内容类型,一次在标题中,一次使用setContentType(). 我不确定这两个标题是否相互作用或相互抵消,所以不能肯定它是错误的来源,但似乎需要考虑改变。

于 2013-01-10T20:27:26.293 回答