Ich muss eine Windows-Formulare-Anwendung entwickeln, die PDF-Dateien aus Excel-Blatt-Daten generiert. Das Mapping von Daten aus dem Excel-Blatt zu den Steuerelementen in PDF sollte mit einem XML erfolgen Datei.Eine PDF-Datei muss für jede Zeile des Excel-Blattes mit einem Klick erzeugt werden. Wie ist das gemacht?Erstellen von PDF-Dateien aus Excel-Blatt mit Xml und Windows-Formulare
0
A
Antwort
0
Hier ist eine Bibliotheksroutine, die ein Verzeichnis von Feldnamen und Werten verwendet, um eine PDF-Vorlage zu füllen. Für Ihren Fall müssten Sie das Wörterbuch aus Ihren Excel-Zeilendaten erstellen, die die Daten korrekt in die Feldnamen (Groß-/Kleinschreibung beachten) in der Vorlage einordnen. Sie müssen keine "fehlenden" Felder ausfüllen, es sei denn, Sie möchten Standardwerte einfügen.
Das Projekt benötigt einen Verweis auf itextsharp. Die Datei itextsharp.dll muss in das Ausgabeverzeichnis kopiert werden.
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
Hier einige Code der Formularfeldnamen aus einem PDF-Formular zu ernten:
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
Suche nach iTextSharp. Sie könnten eine PDF-Vorlage mit einem Raster erstellen und die Zellen ausfüllen oder das PDF im Handumdrehen erstellen (viel Arbeit wäre meine Vermutung.) – rheitzman
@rheitzman Ich habe bereits eine PDF-Vorlage .wie füllen Sie die spezifischen Felder aus in der pdf mit Werten aus der Excel-Tabellenzeile? und es muss für jede Zeile getan werden. – Rosasiya
Meine "Antwort" unten sollte helfen. Sie müssen den Code zum Lesen der Excel-Zeilen erstellen, die Excel-Spalten den PDF-Feldnamen zuordnen und die Bereitstellungsroutine aufrufen. Viel Glück! – rheitzman