【问题标题】:Adobe Reader unable to open downloaded file in IE6Adobe Reader 无法在 IE6 中打开下载的文件
【发布时间】:2010-05-13 09:01:40
【问题描述】:

我正在开发一个允许用户下载动态生成的 PDF 文件的网络应用程序。

这在 IE8 和 Firefox 中运行良好,但在 IE6 中失败,Adobe Reader 给出消息“打开此文档时出错。找不到此文件”

如果我先将文件保存到磁盘,那么它会在 Reader 中正常打开。

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

更多信息:PDF 是使用 abcpdf 插件在 asp.net 代码中生成的

【问题讨论】:

    标签: internet-explorer internet-explorer-6 adobe-reader


    【解决方案1】:

    你试过Response.ClearHeaders();吗?

    【讨论】:

      【解决方案2】:

      您的网页真的需要 IE6 支持吗?一个有效的解决方案是简单地要求用户升级到更高版本的 IE 吗?

      IE6 在两个半月前死了。 (IE6 Funeral)

      【讨论】:

      • 或者,如果您真的想继续支持 IE6,只需向 IE6 用户说明如何右键单击链接以将文件保存到他们的 HD 上。
      • 不幸的是,有一个支持 IE6 的业务需求,这让这里的所有开发人员非常懊恼。只是提供解决方法的解释是我的后备解决方案,但想知道为什么会首先出现这个问题
      【解决方案3】:

      可能是因为 Adob​​e Reader Activex for IE 中的超时设置。您使用部分完成的文档响应浏览器,然后您的程序需要一些时间来继续响应文档的其余部分,并且 Adob​​e 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";
      

      【讨论】:

      • 我相信在发送响应之前已完全生成 PDF 文档
      • 检查 MIME 类型以查看您是否将正确的 MIME 类型作为 PDF 响应到浏览器?
      • MIME 类型设置为 application/pdf。
      【解决方案4】:

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

      1. 您是否通过 HTTPS 返回文件?
      2. 检查响应的标头,有什么关于过期的吗?
      3. 静态提供的文件是否存在同样的问题(但在几乎相同的 URL 中,尝试使用浏览器重定向到 /file 的“.../file.pdf”和“.../file.asp”。 pdf)

      【讨论】:

        【解决方案5】:

        恕我直言,这是一个标题解释问题。我不是很熟悉或不喜欢 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-Length:content-disposition: 附件一起设置可能无法在Safari 和IE 中工作。

        希望对你有帮助……

        【讨论】:

          猜你喜欢
          • 2017-01-28
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2018-05-10
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多