【问题标题】:PDFs served from IIS7.5 only open in Internet Explorer从 IIS7.5 提供的 PDF 仅在 Internet Explorer 中打开
【发布时间】:2012-06-12 19:46:40
【问题描述】:

我正在尝试确定这是 IIS 问题还是代码问题。我倾向于前者,但在那种情况下我不知道如何解决它。

我有几个 Asp.Net Web 应用程序将 PDF 创建为 MemoryStream(使用 iTextSharp),然后使用 MemoryStream.ToArray 方法在屏幕上显示 PDF。下面是我使用的基本代码。

Try 
    Dim m As System.IO.MemoryStream = pdfhelper.createFileMethod(filename)
    Dim data As Byte() = m.ToArray  
    Response.Clear()
    Response.Buffer = True
    Response.AddHeader("Content-Length", data.Length.ToString())
    Response.AddHeader("Content-Disposition", "inline; filename=sample")
    Response.AddHeader("Expires", "0")
    Response.AddHeader("Pragma", "cache")
    Response.AddHeader("Cache-Control", "private")
    Response.ContentType = "application/pdf"
    Response.AddHeader("Accept-Ranges", "bytes")
    Response.BinaryWrite(data)
    Response.Flush()
    Response.End()
Catch ex As Exception
    throw ex
End Try

我从 Windows Server 2008 R2 标准版、64 位、版本 6.1 Build 7601 Service Pack 1 和 IIS 7.5.7600.16385 提供服务。

当我在 Internet Explorer 中使用该应用程序时,我可以毫无问题地打开 PDF 文档。当我使用 Chrome 或 Firefox 时,PDF 只是在加载时挂起。它根本不会加载。我没有收到错误消息。无论我是在服务器上还是在客户端上运行,问题都是一样的。

但是,当我使用 Visual Studio 内置的 IIS 在我的开发机器上运行时,无论使用哪种浏览器,我都没有问题。

我知道this hotfix. 中解决的问题,因此我假设问题出在 IIS 中。但是,我无法应用此修补程序,因为它仅对我的 Windows 版本的 Build 7600 有效。

所以我又想知道 - 这是 IIS 吗?这是我的代码吗,只是 IE 更能容忍我犯的错误?我该如何解决?

感谢您提供的任何想法。

编辑:我找到了this suggestion,它强制下载 PDF 而不是在浏览器中打开。绝对不是这个问题的理想解决方案。希望有人有其他想法。

【问题讨论】:

  • 你试过添加Response.ClearHeaders()
  • 试过了——我把response.ClearHeaders放在response.clear之后,没有任何区别。而且我很有希望.... :(
  • 查看this post - 它很长,但要点似乎是“ws08r2 如何处理字节范围请求”发生了变化,导致“adobe acrobat 中的错误”。
  • 谢谢。看起来这个线程是关于我链接到的修补程序的问题。但随后修补程序包含在服务包 1(我有)中并且应该可以工作。但是,在 cmets 更底层的人说,该修补程序在升级到 Service Pack 1 之前一直有效,此时它再次停止工作。有人当时提出的唯一建议是将服务器 IE 从 9 回滚到 8。我明天会尝试。至少我不是一个人在奇怪的问题上!
  • 如果 application/pdf 则不需要文件名,但不应破坏它。就像流媒体打破了它。在 iTextSharp 中,您是否将其设置为流式传输?我不知道它在 iTextSharp 中叫什么,但在 Acrobat 中它是否像 Web 优化。

标签: .net windows pdf iis-7.5 itextsharp


【解决方案1】:

我终于解决了这个问题,尽管我没有 100% 的“为什么”。

1) 我将后面的代码更改为以下内容,删除了等待缓冲区然后结束响应的命令。

    Response.ClearContent()
    Response.ClearHeaders()
    Response.ContentType = "application/pdf" 
    Response.AppendHeader("Content-Length", data.Length.ToString())
    Response.AppendHeader("Content-Disposition", "inline; filename=" + "Sample.pdf")
    Response.AppendHeader("Accept-Ranges", "bytes")
    Response.BinaryWrite(data)

2) 更新了作为其背后代码的 aspx 页面。它仍然有所有的 html “东西”。我删除了页面上的所有内容,页面指令命令除外。

此时,PDF 将继续与 IE 一起使用。在一些安装了旧版 (9.x) Adob​​e 插件的计算机上,Firefox 在浏览器中的查看毫无困难。在装有 Adob​​e 10.1.3 的计算机上,Firefox 会提示“打开或保存”对话框。但是 Chrome (v. 19.0.1084.56) 仍然挂起。

3) 在 iPad 上使用 Safari 进行测试并没有出现任何问题后,我认为这是 Chrome 的问题。我禁用了 Chrome Adob​​e 插件,现在 PDF 按预期显示在浏览器中。

【讨论】:

    猜你喜欢
    • 2016-09-09
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-07-25
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-10-30
    相关资源
    最近更新 更多