保存PDF的问题

时间:2014-04-01 06:54:42

标签: vb.net pdf itextsharp

起初:抱歉我的英文,我是法国人: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())

有人可以帮我解决这个问题吗?

2 个答案:

答案 0 :(得分:1)

在PDF实际结束后会显示大量随机(?)垃圾。 PDF 1.7规范允许一些绒毛:

  

3.4.4,“文件预告片”

     

的18。 Acrobat查看器只需要%% EOF标记出现在文件的最后1024个字节内的某个位置。

但是检查Before文件后,我在最后一行

之后发现了不少于5,576字节的HTML
startxref
281974
%%EOF

显然,现代阅读器比Adobe推荐的更容错,但为了防止其他阅读器遇到问题,它会敦促您将其保存为正确的PDF。

证明:我使用二进制编辑器删除了最后一行%%EOF之后的所有内容。 PDF正确打开,并在没有警告的情况下关闭。


至于这个HTML块的来源,以及如何防止它,你将不得不浏览工具链的文档。

答案 1 :(得分:1)

每当您将Response流更改为ASP.Net期望之外的其他内容时,您需要确保告诉ASP.Net您已完成。在调用Response.BinaryWrite(output.ToArray())之后,请确保关闭该流,以便ASP.Net不会继续写入它。

Response.End()

此外,您可能希望在流的顶部添加Response.Clear()