2

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

1 に答える 1

1

この問題 (MSIE がバイトを受け入れる方法によるもの) は、「iText in Action」の書籍で説明されています。追加のヘッダーを追加することで解決できます: Content-Length(値は vOutPut のバイト数です。

なぜこの問題が発生するのですか? MSIE に期待するバイト数を指定しない場合、MSIE は特定のサイズのブロックをダウンロードします (一度に 1028 バイトなど)。PDF のサイズがこのサイズの正確な倍数でない場合、余分な (ガベージ) 文字が末尾に追加されます。一部の PDF ビューアーは、これらの余分な文字を処理できません。

経験に基づいて、次のヘッダーも追加します。

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

本当に必要かどうかはわかりませんが、害はありません。

于 2012-09-18T09:10:00.937 に答える