对不起这个问题,但我是.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
答案 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