2012-09-18 107 views
2

语言:ASP.NET/VB.NETpdf文件未显示在Internet Explorer中

我正在使用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() 

回答

1

这个问题(由于MSIE接受字节的方式)在“iText的在行动”的书解释的代码。您可以通过添加额外的头部解决这个问题:Content-Length(该值的字节VOUTPUT数量

为什么会出现这种问题的发生。如果你不告诉MSIE多少字节期望,它会下载块?一个特定的大小(例如,一次1028个字节)如果你的PDF的大小不是这个大小的确切倍数,那么额外的(垃圾)字符将被添加到最后,一些PDF查看器不能处理这些。多余的字符

根据经验,我也将添加以下标题:

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

我不知道自己是否真的necess阿里,但他们并没有受伤。

+0

感谢布鲁诺的快速响应,我正在应用这些更改并检查开发服务器。 – raj

+0

我正在检查此项,并在测试后恢复。 – raj

+0

它对我不起作用:( – raj