【问题标题】:ITextSharp exported PDF is not supported or damaged visual basic不支持 ITextSharp 导出的 PDF 或损坏了 Visual Basic
【发布时间】:2021-03-22 23:12:29
【问题描述】:

我是使用 ITextSharp 的新手,我正在尝试将 PDF 导出为附件。下面的代码工作正常

Dim pdfTemplate As String = "C:\Users\mrogers\Documents\ERCP_CA_Template2.pdf"
Dim newFile As String = "C:\Users\mrogers\Documents\ERCP_CA_Template3.pdf"
Dim pdfReader As New PdfReader(pdfTemplate)
Dim pdfStamper As New PdfStamper(pdfReader, New System.IO.FileStream(newFile, System.IO.FileMode.Create))
Dim pdfFormFields As AcroFields = pdfStamper.AcroFields

pdfFormFields.SetField("BUSINESS_SITE_ADDRESS_A5", "Demo")
pdfStamper.FormFlattening = True

pdfStamper.Close()

但是,当我尝试将其转换为导出附件时,Adobe Acrobat Reader 无法打开该文件,因为它不是受支持的类型或已损坏。我的代码如下。

    Dim ms As MemoryStream = New MemoryStream()
    Dim pdfTemplate As String = "C:\Users\mrogers\Documents\ERCP_CA_Template2.pdf"
    Dim pdfReader As New PdfReader(pdfTemplate)
    Dim pdfStamper As New PdfStamper(pdfReader, ms)
    Dim pdfFormFields As AcroFields = pdfStamper.AcroFields

    pdfFormFields.SetField("BUSINESS_SITE_ADDRESS_A5", "Demo")
    pdfStamper.FormFlattening = True

    HttpContext.Current.Response.Cache.SetCacheability(HttpCacheability.NoCache)
    HttpContext.Current.Response.ContentType = "application/pdf"
    HttpContext.Current.Response.AddHeader("content-disposition", "attachment;filename=testingPdf2.pdf")
    HttpContext.Current.Response.Write(ms.ToArray())
    HttpContext.Current.Response.BufferOutput = True
    HttpContext.Current.Response.Flush()
    HttpContext.Current.Response.Close()

    pdfStamper.Close()

我一直在努力寻找任何好的示例或文档。任何关于我哪里出错的帮助将不胜感激。

【问题讨论】:

    标签: vb.net itext


    【解决方案1】:

    对于遇到类似问题的任何人,我都想通了。

        Dim output As New MemoryStream()
        Dim pdfTemplate As String = "C:\Users\mrogers\Documents\ERCP_CA_Template2.pdf"
        Dim pdfReader As New PdfReader(pdfTemplate)
        Dim pdfStamper As New PdfStamper(pdfReader, output)
        Dim pdfFormFields As AcroFields = pdfStamper.AcroFields
    
        pdfFormFields.SetField("BUSINESS_SITE_ADDRESS_A5", "Demo")
        pdfStamper.FormFlattening = True
    
        pdfStamper.Close()
    
        Dim mergedBytes() As Byte = output.GetBuffer()
        HttpContext.Current.Response.Clear()
        HttpContext.Current.Response.AddHeader("Content-Disposition", "attachment; filename=demo4.pdf")
        HttpContext.Current.Response.AddHeader("Content-Length", mergedBytes.Length.ToString())
        HttpContext.Current.Response.ContentType = "application/octet-stream"
        HttpContext.Current.Response.BinaryWrite(mergedBytes.ToArray)
        HttpContext.Current.Response.Flush()
        HttpContext.Current.Response.End()
    

    【讨论】:

    • 您可能应该提到,与原始代码的主要变化是您现在在在写入结果之前关闭了压模。这是必要的,因为在关闭压模过程中会确定 pdf。
    • 请过几天再回来看看并接受您的回答。它不会为您赢得代表,但会帮助未来的读者。
    猜你喜欢
    • 1970-01-01
    • 2016-10-02
    • 1970-01-01
    • 2011-01-12
    • 1970-01-01
    • 2011-09-16
    • 2016-01-25
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多