2010-05-13 57 views
1

我正在研究一个允许用户下载动态生成的PDF文件的网络应用程序。Adob​​e Reader无法在IE6中打开下载的文件

这工作正常,在IE8和Firefox,但未能在IE6使用Adobe Reader给消息“有一个错误打开此文件。该文件无法找到”

如果我将文件保存到硬盘的第一个那么它在Reader中打开罚款。

我已经给文件一个简单的短文件名,没有空格,所以不知道还有什么要尝试。任何建议都非常受欢迎。

更多信息:PDF使用abcpdf插件

回答

0

也许是因为在Adobe Reader中的ActiveX IE超时设置在asp.net代码生成。您使用部分完成的文档回复浏览器,然后程序花费一些时间继续响应文档的其余部分,并且Adobe Reader超时。尝试生成整个PDF文档,然后回应http请求。例如在PHP中。

$s = ""; 
for(int i=0;i<10;i++) 
    $s .= "1"; 
echo #s; 

代替

for(int i=0;i<10;i++) 
    echo "1"; 
+0

PDF文档在发送响应之前完全生成我相信 – chillysapien 2010-05-13 09:44:33

+0

检查MIME类型以查看您是否将正确的MIME类型作为PDF响应给浏览器? – VOX 2010-05-13 10:30:47

+0

MIME类型设置为application/pdf。 – chillysapien 2010-05-13 12:57:29

1

是否真的有必要对您的网页IE6的支持?一个有效的解决方案是否只需要用户升级到更高版本的IE?

IE6在两个半月前死亡。 (IE6 Funeral

+2

或者,如果您确实想继续支持IE6,只需向IE6用户提供有关如何右键单击链接以将文件保存在HD上的说明。 – nico 2010-05-19 17:49:35

+1

不幸的是,在这里所有的开发者都感到懊恼,因此有一个支持IE6的业务需求。只是提供解决方法的解释是我的回退解决方案,但想知道为什么这个问题首先发生 – chillysapien 2010-05-20 09:20:26

0

恕我直言,这是一个头解释问题。我不是很熟悉或喜欢的ASP.NET但至少在PHP,你需要有这些:

ob_start(); (* should be equivalent to HttpContext.Current.Response.Buffer = true *) 

header('Content-Description: File Transfer'); 
header('Content-Type: application/octet-stream'); 
header('Content-Disposition: attachment; filename=somefile.pdf'); 
header('Content-Transfer-Encoding: binary'); 
header('Expires: 0'); 
header('Cache-Control: must-revalidate, post-check=0, pre-check=0'); 
header('Pragma: public'); 
//header('Content-Length: ' . filesize($file)); 

ob_flush(); (* should be equivalent to HttpContext.Current.Response.Flush() *) 
** output the pdf contents here 

(* header() should be similar to HttpContext.Current.Response.AddHeader() function *) 

注意与content-disposition:附件设置Content-Length:在一起可能会失败,在Safari和IE浏览器的工作。

希望它可以帮助...

0

我想我已经在IE6中观察到这种最令人讨厌的行为(错误),如果我记得,该错误的原因是,该文件并没有存储在缓存中,但已过期/立即删除。请检查以下内容:

  1. 您是否通过HTTPS返回文件?
  2. 检查响应的标题,关于过期的任何事情?
  3. 你是否与静态提供的文件有相同的问题(但在几乎相同的URL中,尝试使用浏览器重定向到/ file的'.../file.pdf'和'.../file.asp'。 pdf)
相关问题