PDF 生成后无法打开 (vb.net) (asp.net)
Posted
技术标签:
【中文标题】PDF 生成后无法打开 (vb.net) (asp.net)【英文标题】:Unable to open PDF after it's generated (vb.net) (asp.net) 【发布时间】:2018-05-01 16:01:39 【问题描述】:很抱歉这个问题,但我是 .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
【问题讨论】:
您可能想要写入 pdfDoc 的字节。 抱歉,不明白你的意思 【参考方案1】:你的代码全错了。您正在创建一个 Web 应用程序,并创建了一个 Document
类型的 对象,以便您可以将 PDF 文件 写入磁盘。 (您甚至需要磁盘上的那个文件吗?您正在编写一个 Web 应用程序!)然后,您不将文件发送给最终用户,而是将 Document
object 写入 Response
而不是(文件的字节)。那永远都行不通,不是吗?
如果你先在内存中创建PDF文件会更好:
MemoryStream ms = new MemoryStream();
PdfWriter writer = PdfWriter.GetInstance(document, ms);
document.Open();
document.Add(Assinatura());
document.Close();
然后你在内存中获取那个文件的字节,并将它们发送到Response
:
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();
这就是评论的意思。您需要发送 PDF 文件的 byte
数组,而不是 pdfDoc
。另见iTextSharp is producing a corrupt PDF with Response
【讨论】:
非常感谢!我明白了!以上是关于PDF 生成后无法打开 (vb.net) (asp.net)的主要内容,如果未能解决你的问题,请参考以下文章
用C#编写的asp.net 和 vb.net编写的asp.net 有性能上的差异吗?