[英]generating pdf files from excel sheet using xml and windows forms
我需要開發一個Windows窗體應用程序,該程序從excel表格數據生成pdf文件。從excel表格到pdf控件的數據映射應使用xml文件完成。必須為的每一行生成一個pdf文件只需單擊一個按鈕即可打開excel工作表。這是如何完成的?
這是一個庫例程,該例程使用字段名和值的字典填充PDF模板。 對於您的情況,您需要根據Excel行數據創建字典,以將數據正確映射到模板中的字段名稱(區分大小寫)。 除非您要插入默認值,否則無需填寫“缺失”字段。
該項目將需要引用itextsharp。 需要將itextsharp.dll復制到輸出目錄。
Imports iTextSharp.text.pdf
Import System.IO
Public Function FillPDFForm(PDF_MasterPath As String, Flds As Dictionary(Of String, String), Optional PDF_FinalPath As String = "", Optional FlattenForm As Boolean = True) As Boolean
' case matters: Dictionary Keys == PDF Form Field Names
Dim pdfFormFields As AcroFields
Dim pdfReader As PdfReader
Dim pdfStamper As PdfStamper
Try
If PDF_FinalPath = "" Then PDF_FinalPath = PDF_MasterPath.Replace(".pdf", "_Out.pdf")
Dim newFile As String = PDF_FinalPath
pdfReader = New PdfReader(PDF_MasterPath)
pdfStamper = New PdfStamper(pdfReader, New FileStream(newFile, FileMode.Create))
pdfReader.Close()
pdfFormFields = pdfStamper.AcroFields
For Each sKVP As KeyValuePair(Of String, String) In Flds
pdfFormFields.SetField(sKVP.Key, sKVP.Value)
Next
' flatten the form to remove editing options?
' set it to false to leave the form open to subsequent manual edits
If My.Computer.Keyboard.CtrlKeyDown Then
' leave in editable state
pdfStamper.FormFlattening = False
Else
pdfStamper.FormFlattening = FlattenForm
End If
pdfStamper.Close()
Process.Start(newFile)
Return True
Catch ex As Exception
MsgBox(ex.Message)
Return False
Finally
pdfStamper = Nothing
pdfReader = Nothing
End Try
End Function
以下是一些代碼,可從PDF表單中獲取表單字段名稱:
Private Function PDFFieldNames(pdfPath As String) As String
Try
Dim s As String = ""
' create a new PDF reader based on the PDF template document
Dim pdfReader As PdfReader = New PdfReader(pdfPath)
Dim fields As IDictionary(Of String, iTextSharp.text.pdf.AcroFields.Item) = pdfReader.AcroFields.Fields
For Each key As String In fields.Keys
's = "pdfFormFields.SetField(""{fname}"", Row!{fname})".Replace("{fname}", key)
s &= key & "|"
Next
pdfReader.Close()
Return s
Catch ex As Exception
MsgBox(ex.Message)
Return ""
End Try
End Function
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.