2013-01-10 62 views
1

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

规格:OS 6,使用Safari 6.1,Chrome的23.0.1271.100

请注意:在这个应用PDF不会下载到一个新的URL(NO重定向)。

一般行为:IPad浏览器(safari/chrome)不支持下载窗口,因此它预计会打开pdf并提供选项来查看PDF兼容的应用程序。目前没有发生。

当调试下载下面的servlet的动作代码,在服务器,但浏览器在iPad上成功生成PDF文件不显示:-(

代码示例:

/**设置响应头**/

 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(); 
     } 
} 

回答

1

要显示pdf而不是要求浏览器保存它,请使用“内联”而不是“附件”。

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

此外,你设置的内容类型两次,一次在头,并使用setContentType()一次。 我不确定这两个标题是否相互作用或互相取消,所以不能确定它是错误的来源,但它似乎是要考虑更改的东西。

+0

1. Content-Disposition“inline”在OS上似乎起作用。试用Safari和Chrome浏览器。 2.有趣的一点是setHeader(Content-Type,xxx)v/s setContentType 尝试过排列组合并没有帮助Ipad,但在Windows上Firefox明确显示setContentType是必须的。 我的问题仍未解决。你的洞察力会有很大的帮助。 –

2

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

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

window.open(print_url);

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

相关问题