语言: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()
答案 0 :(得分: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"
我不知道他们是否真的有必要,但他们没有受伤。