【问题标题】:pdf file not showing up in Internet explorerpdf 文件未显示在 Internet Explorer 中
【发布时间】:2012-09-18 08:43:47
【问题描述】:

语言:ASP.NET/VB.NET

我正在使用 itextsharp 库创建 pdf 文件。在我的开发机器上生成的文件打开没有任何问题。但是当我在生产服务器上上传编译好的程序时,Internet Explorer 只是打开和关闭窗口,但不显示 pdf 文件。其他浏览器正在显示 pdf 文件。

这是我正在使用的代码

        Dim LABNO As Integer = Request.QueryString("LABNO")
        Dim vDoc As New iTextSharp.text.Document(PageSize.A4, 20, 20, 50, 50)

        Dim vOutPut As New IO.MemoryStream
        Dim vWriter = pdf.PdfWriter.GetInstance(vDoc, vOutPut)
        Dim cb As New PdfContentByte(vWriter)
        MakeReceipt(LABNO, vDoc, cb)
        vDoc.NewPage()
        MakeReceipt(LABNO, vDoc, cb)
        'MakeSheet(LABNO)
        vDoc.Close()

        Dim rnd As New Random
        Response.Clear()
        Response.ClearContent()
        Response.ClearHeaders()

        Response.ContentType = "Application/pdf"
        Response.AddHeader("Content-Disposition", String.Format("attachment;filename=Rct-{0}.pdf", rnd.Next.ToString()))
        Response.BinaryWrite(vOutPut.ToArray())
        Response.Flush()

【问题讨论】:

    标签: asp.net pdf-generation itextsharp


    【解决方案1】:

    这个问题(由于 MSIE 接受字节的方式)在“iText in Action”书籍中进行了解释。您可以通过添加额外的标头来解决它:Content-Length(值是 vOutPut 中的字节数。

    为什么会出现这个问题?如果您不告诉 MSIE 需要多少字节,它将下载特定大小的块(例如,一次 1028 个字节)。如果您的 PDF 的大小不是此大小的精确倍数,则将在末尾添加额外的(垃圾)字符。一些 PDF 查看器无法处理这些多余的字符。

    根据经验,我还添加了以下标题:

    "Expires", "0"
    "Cache-Control", "must-revalidate, post-check=0, pre-check=0"
    "Pragma", "public"
    

    我不知道它们是否真的有必要,但它们不会造成伤害。

    【讨论】:

    • 感谢 Bruno 的快速响应,我正在应用这些更改并检查开发服务器。
    • 我正在检查这个,测试后会恢复。
    • 但它可以在其他浏览器和其他机器上运行吗?那么它可能是无法在服务器端修复的问题,但需要在客户端修复:您确定您没有面临本地配置错误吗?
    • 它与 Internet Explorer 中的安全设置有关。将 Intranet 的安全设置从 medium 更改为 low。这显示了 pdf 文件的打开文件对话框,但此对话框继续尝试下载文件。在其他浏览器上测试后将恢复。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-02-20
    • 2017-04-23
    • 2019-08-27
    • 2017-11-02
    • 2020-03-30
    • 1970-01-01
    相关资源
    最近更新 更多