1

我正在尝试确定这是 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 在我的开发机器上运行时,无论使用哪种浏览器,我都没有问题。

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

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

感谢您提供的任何想法。

编辑:我发现了这个建议,它强制下载 PDF 而不是在浏览器中打开。绝对不是这个问题的理想解决方案。希望有人有另一个想法。

4

1 回答 1

0

我终于解决了这个问题,尽管我没有 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 按预期显示在浏览器中。

于 2012-06-17T14:57:54.793 回答