簡體   English   中英

使用XML和Windows表單從Excel工作表生成pdf文件

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM