生成后无法打开PDF(vb.net)(asp.net)

时间:2017-11-17 19:35:26

标签: asp.net .net vb.net pdf itext

对不起这个问题,但我是.net和vb.net的新手。我真的需要你的帮助!我在asp.net(vb.net)中生成一个PDF文件。它应该在浏览器中自动打开,但它会出错 - 无法加载PDF文档。我看到它是在驱动器上创建的并正确打开。可能是什么问题?

Protected Sub ExportToPDF(sender As Object, e As EventArgs)

    Response.ContentType = "application/pdf"
    Dim pdfDoc As New Document(PageSize.A4, 50.0F, 10.0F, 10.0F, 10.0F)
    PdfWriter.GetInstance(pdfDoc, New 
       FileStream(Context.Server.MapPath("~/ejik.pdf"), FileMode.CreateNew))
    pdfDoc.Open()
    pdfDoc.Add(New Paragraph("What is going on?")) 
    pdfDoc.Close()
    Response.Write(pdfDoc)
    Response.End()

End Sub

提前谢谢!

P.S。:抱歉,我忘了提到我使用iTextSharp来创建PDF

1 个答案:

答案 0 :(得分:1)

你的代码都错了。您正在创建一个Web应用程序,并创建一个类型为Document对象,以便您可以将PDF 文件写入磁盘。 (你甚至需要在磁盘上使用该文件吗?你正在编写一个Web应用程序!)然后,你不是将文件发送给最终用户,而是将Document 对象写入{{ 1}} 而不是文件的(字节)。那可能永远不会奏效,是吗?

如果您首先在内存中创建PDF文件会更好:

Response

然后将该文件的字节记在内存中,并将它们发送到MemoryStream ms = new MemoryStream(); PdfWriter writer = PdfWriter.GetInstance(document, ms); document.Open(); document.Add(Assinatura()); document.Close();

Response

这就是评论的意思。您需要发送PDF文件的byte[] bytes = ms.ToArray(); ms.Close(); Response.Clear(); Response.ContentType = "application/pdf"; Response.AddHeader("Content-Disposition", "attachment;filename=ejik.pdf"); Response.Buffer = true; Response.Cache.SetCacheability(HttpCacheability.NoCache); Response.BinaryWrite(bytes); Response.End(); 数组,而不是pdfDoc。另请参阅iTextSharp is producing a corrupt PDF with Response