簡體   English   中英

pdf文件未顯示在Internet Explorer中

[英]pdf file not showing up in Internet explorer

語言: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()

在“ iText in Action”一書中解釋了此問題(由於MSIE接受字節的方式)。 您可以通過添加一個額外的標頭來解決它: Content-Length (值是vOutPut中的字節數。

為什么會出現此問題? 如果您不告訴MSIE期望多少字節,它將下載特定大小的塊(例如一次下載1028個字節)。 如果PDF的大小不是該大小的精確倍數,則會在末尾添加多余的(垃圾)字符。 某些PDF查看器無法處理這些多余的字符。

根據經驗,我還會添加以下標頭:

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

我不知道它們是否真的必要,但它們不會受傷。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM