使用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.
目前还不清楚为什么您将PdfWriter
与PdfReader
结合使用。 你应该阅读我书中的第6章,然后解释你想达到的目标。
如果我现在不得不猜测,我会假设你希望人们在浏览器中填写一个HTML表单,并且你想在他们点击一个按钮后用PDF填写一个表单。 做到这一点的方法是,检索每个参数的数据参数,并使用PdfReader
, PdfStamper
和AcroFields
填写PDF表单。 如果这不是你想要做的,你必须澄清。
上一篇: Convert bytes to pdf using itextsharp and asp.net
下一篇: pdf is not opening by Adobe reader, created by using iTextSharp