Come leggere i dati dei moduli PDF usando iTextSharp?

Sto cercando di scoprire se è ansible leggere i dati del modulo PDF (moduli compilati e salvati con il modulo) utilizzando iTextSharp. Come posso fare questo?

Dovresti trovare i nomi dei campi nel modulo PDF. Prendi i campi e poi leggi il loro valore.

string pdfTemplate = "my.pdf"; PdfReader pdfReader = new PdfReader(pdfTemplate); AcroFields fields = pdfReader.AcroFields.Fields; string val = fields.GetField("fieldname"); 

Ovviamente nel codice sopra, il nome del campo è il nome del campo del modulo PDF e il metodo GetField restituisce una rappresentazione di stringa di quel valore. Ecco un articolo con codice di esempio che probabilmente potresti usare. Mostra come puoi leggere e scrivere i campi dei moduli usando iTextSharp.

Forse la libreria iTextSharp è cambiata di recente ma non sono riuscito a far funzionare la risposta accettata. Ecco la mia soluzione:

 var pdf_filename = "pdf2read.pdf"; using (var reader = new PdfReader(pdf_filename)) { var fields = reader.AcroFields.Fields; foreach (var key in fields.Keys) { var value = reader.AcroFields.GetField(key); Console.WriteLine(key + " : " + value); } } 

Una differenza molto sottile, dovuta a reader.AcroFields.Fields che restituisce un IDictionary invece di un object AcroFields.

Se si utilizza Powershell, il codice di individuazione per i campi è:

  Add-Type -Path C:\Users\Micah\Desktop\PDF_Test\itextsharp.dll $MyPDF = "C:\Users\Micah\Desktop\PDF_Test\something_important.pdf" $PDFDoc = New-Object iTextSharp.text.pdf.pdfreader -ArgumentList $MyPDF $PDFDoc.AcroFields.Fields 

Tale codice ti darà i nomi di tutti i campi sul documento PDF, “something_important.pdf”.

In questo modo accedi a ciascun campo una volta che conosci il nome del campo:

  $PDFDoc.AcroFields.GetField("Name of the field here") 

Questo ha funzionato per me! Annota i parametri quando definisci il timbro! ‘\ 0’, vero

  string TempFilename = Path.GetTempFileName(); PdfReader pdfReader = new PdfReader(FileName); //PdfStamper stamper = new PdfStamper(pdfReader, new FileStream(TempFilename, FileMode.Create)); PdfStamper stamper = new PdfStamper(pdfReader, new FileStream(TempFilename, FileMode.Create), '\0', true); AcroFields fields = stamper.AcroFields; AcroFields pdfFormFields = pdfReader.AcroFields; foreach (KeyValuePair kvp in fields.Fields) { string FieldValue = GetXMLNode(XMLFile, kvp.Key); if (FieldValue != "") { fields.SetField(kvp.Key, FieldValue); } } stamper.FormFlattening = false; stamper.Close(); pdfReader.Close() 

Il nome PDF è “report.pdf” ..

Il campo dati da leggere in TextBox1 è “TextField25” nel PDF ..

  Dim pdf As String = "report.pdf" Dim reader As New PdfReader(pdf) Dim fields As AcroFields = reader.AcroFields TextBox1.Text = fields.GetField("TextField25") 

Nota importante : Questo può essere usato SOLO SE il PDF non è appiattito (significa che i campi dovrebbero essere modificabili) mentre è stato creato usando iTextSharp ..

vale a dire

  pdfStamper.FormFlattening = False 

Questo è molto semplice .. E funziona come un fascino .. 🙂