使用itextsharp和asp.net将字节转换为pdf

我其实想做一个可编辑的PDF,但无法做到。 所以我想给用户一个网络表格,然后他们填写它,然后从中生成PDF。 通过这种方式,我可以将他/她的条目保存在SQL表中以备将来参考。

我正在使用itextsharp.I有一个aspx页面。 在那我有radgrids,文本框。 我必须将其转换为pdf。 我读转换为字节,然后很容易转换为PDF。 那么,我没有得到它。

  Protected Sub btnGeneratePDF_Click(sender As Object, e As EventArgs) Handles btnGeneratePDF.Click
    Dim strWriter As New StringWriter()
    Dim byteFinalPDF As Byte()
    Dim myClient As New Net.WebClient()
    byteFinalPDF = myClient.DownloadData(HttpContext.Current.Request.Url.AbsoluteUri)
    If byteFinalPDF Is Nothing Then
        Throw New ApplicationException("Could not generate Work Order PDF for Work Order# " & intWorkOrderID)
    End If
    Dim all As Byte()
    Dim fs As New FileStream("C:MyPathInspectionSheet.pdf", FileMode.Create, FileAccess.ReadWrite, FileShare.ReadWrite)

    Using ms As New MemoryStream()
        Dim doc As New iTextSharp.text.Document()
        Dim pdfWriter As PdfWriter = pdfWriter.GetInstance(doc, ms)
        Dim includeHeader As New TableHeader() 'ERROR

        doc.SetPageSize(PageSize.LETTER)
        doc.Open()
        Dim pcb As PdfContentByte = pdfWriter.DirectContent
        Dim page As PdfImportedPage = Nothing
        Dim pdfReader As PdfReader = Nothing
        pdfReader = New PdfReader(byteFinalPDF)
        Dim pages As Integer = pdfReader.NumberOfPages

        For i As Integer = 1 To pages
            doc.SetPageSize(PageSize.LETTER)
            doc.NewPage()
            page = pdfWriter.GetImportedPage(pdfReader, i)
            pcb.AddTemplate(page, 0, 0)
        Next

        doc.Close()
        all = ms.GetBuffer()
        ms.Flush()
        ms.Dispose()
    End Using
      End Sub

这是我尝试过的。 请在上面的代码中看到注释“ERROR”。我在我的Visual Studio中实际评论过它。 只是把它放在这里供大家看。错误提示“Type TableHeader not defined”。

我想点击一个按钮,看到一个pdf可供下载。 我给了我的文件流的路径。 我想它会被保存在那里。 我希望用户在底部看到下载的PDF文件。 当我点击按钮时会发出这样的异常

        iTextSharp.text.exceptions.InvalidPdfException was unhandled by user code
        HResult=-2146232800
         Message=PDF header signature not found.
        Source=itextsharp
           StackTrace:
       at iTextSharp.text.pdf.PdfReader..ctor(IRandomAccessSource byteSource, Boolean partialRead, Byte[] ownerPassword, X509Certificate certificate, ICipherParameters certificateKey, Boolean closeSourceOnConstructorError)
      at iTextSharp.text.pdf.PdfReader..ctor(Byte[] pdfIn, Byte[] ownerPassword)
      at iTextSharp.text.pdf.PdfReader..ctor(Byte[] pdfIn)
   at Web_FolderUser_InspectionForm.btnGeneratePDF_Click(Object sender, EventArgs e) in C:Users...InspectionForm.aspx.vb:line 128
       at System.Web.UI.WebControls.Button.OnClick(EventArgs e)
         at System.Web.UI.WebControls.Button.RaisePostBackEvent(String eventArgument)
      at  System.Web.UI.WebControls.Button.System.Web.UI.IPostBackEventHandler.RaisePostBackEvent(String eventArgument)
   at System.Web.UI.Page.RaisePostBackEvent(IPostBackEventHandler sourceControl, String eventArgument)
     at System.Web.UI.Page.RaisePostBackEvent(NameValueCollection postData)
      at System.Web.UI.Page.ProcessRequestMain(Boolean includeStagesBeforeAsyncPoint,  Boolean includeStagesAfterAsyncPoint)
InnerException: 

128线是

    pdfReader = New PdfReader(byteFinalPDF)

我在哪里以及在想什么?如果您需要更多信息,请告诉我。 谢谢。


请看看我对以下问题的回答:将页面添加到现有PDF com.itextpdf.text.exceptions.InvalidPdfException:未找到PDF标头签名

在你的代码中,你可以像这样定义byteFinalPDF

byteFinalPDF = myClient.DownloadData(HttpContext.Current.Request.Url.AbsoluteUri)

目前还不清楚DownloadData正在做什么,但无论如何:您不下载PDF文件,因为PDF文件以字节%PDF-1.开头%PDF-1. 目前还不清楚为什么您将PdfWriterPdfReader结合使用。 你应该阅读我书中的第6章,然后解释你想达到的目标。

如果我现在不得不猜测,我会假设你希望人们在浏览器中填写一个HTML表单,并且你想在他们点击一个按钮后用PDF填写一个表单。 做到这一点的方法是,检索每个参数的数据参数,并使用PdfReaderPdfStamperAcroFields填写PDF表单。 如果这不是你想要做的,你必须澄清。

链接地址: http://www.djcxy.com/p/46743.html

上一篇: Convert bytes to pdf using itextsharp and asp.net

下一篇: pdf is not opening by Adobe reader, created by using iTextSharp