如何使用iTextSharp阅读PDF表格数据?

我试图找出是否可以使用iTextSharp阅读PDF表格数据(表格填写并与表格一起保存)。 我怎样才能做到这一点?

您必须在PDF表单中找到字段名称。 获取字段然后读取它们的值。

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

显然,在上面的代码中,字段名称是PDF表单字段的名称,GetField方法返回该值的字符串表示forms。 这是一篇文章,其中包含您可能使用的示例代码。 它显示了如何使用iTextSharp读取和写入表单字段。

也许iTextSharp库最近发生了变化,但我无法得到已接受的工作答案。 这是我的解决方案:

 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); } } 

由于reader.AcroFields.Fields返回IDictionary而不仅仅是AcroFields对象,这是一个非常微妙的区别。

如果您使用的是Powershell,则字段的发现代码为:

  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 

该代码将为您提供PDF文档中所有字段的名称,“something_important.pdf”。

这是您在知道字段名称后访问每个字段的方式:

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

这对我有用! 在定义压模时请注意参数! ‘\ 0’,是的

  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() 

PDF名称是“report.pdf”..

要读入TextBox1的数据字段是PDF中的“TextField25”。

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

重要说明只有在使用iTextSharp创建PDF时, 如果 PDF未展平(意味着字段应该是可编辑的),则只能使用此选项。

  pdfStamper.FormFlattening = False 

这很简单..它就像一个魅力.. 🙂