起初:抱歉我的英文,我是法国人:p
我正在尝试使用iTextSharp在VB.NET Web应用程序中生成PDF文档,我可以生成它并保存在我的电脑中。
我担心的是,当我用pdf阅读器打开它,然后关闭文档时,它会要求我保存更改。没有做任何改变!我只是想看看我的PDF,没有这个省问。
这就是我生成和保存PDF的方式:
'Déclaration des variables documents'
Dim document = New Document(PageSize.A4, 50, 50, 25, 25)
Dim output = New MemoryStream()
Dim writer = PdfWriter.GetInstance(document, output)
'Ouverture du document - Opening File '
document.Open()
'Ajout du contenu'
'Fermeture du document'
document.Close()
'Génération de l enregistrement'
Response.ContentType = "application/pdf"
Response.AddHeader("Content-Disposition", String.Format("attachment;filename=Receipt-{0}.pdf", btn_test.Text))
Response.BinaryWrite(output.ToArray())
有人可以帮我解决这个问题吗?
答案 0 :(得分:1)
在PDF实际结束后会显示大量随机(?)垃圾。 PDF 1.7规范允许一些绒毛:
3.4.4,“文件预告片”
的18。 Acrobat查看器只需要%% EOF标记出现在文件的最后1024个字节内的某个位置。
但是检查Before文件后,我在最后一行
之后发现了不少于5,576字节的HTMLstartxref
281974
%%EOF
显然,现代阅读器比Adobe推荐的更容错,但为了防止其他阅读器遇到问题,它会敦促您将其保存为正确的PDF。
证明:我使用二进制编辑器删除了最后一行%%EOF
之后的所有内容。 PDF正确打开,并在没有警告的情况下关闭。
至于这个HTML块的来源,以及如何防止它,你将不得不浏览工具链的文档。
答案 1 :(得分:1)
每当您将Response
流更改为ASP.Net期望之外的其他内容时,您需要确保告诉ASP.Net您已完成。在调用Response.BinaryWrite(output.ToArray())
之后,请确保关闭该流,以便ASP.Net不会继续写入它。
Response.End()
此外,您可能希望在流的顶部添加Response.Clear()
。