使用Itextsharp填写PDF表格

我正在尝试使用ITextsharp填写表单,并尝试使用以下代码来获取pdf中的所有字段:

string pdfTemplate = @"c:\Temp\questionnaire.pdf"; PdfReader pdfReader = new PdfReader(pdfTemplate); StringBuilder sb = new StringBuilder(); foreach (var de in pdfReader.AcroFields.Fields) { sb.Append(de.Key.ToString() + Environment.NewLine); } 

但foreach循环始终为空计数。 我是否需要做一些事情来提交自己,因为我从这里尝试了这个例子,它工作得很好…… 这是我试图填写的pdf的一个例子

有任何想法吗?

编辑::

PDF字段的空错误

事实certificate,实际填写的PDF“表格”根本不是表格(PDF格式)。 因此,您有两个选择:

  1. 您可以使用硬编码或配置的“字段”位置和尺寸直接将文本添加到页面内容,如@ tschmit007所述,对他的答案进行评论。

  2. 您可以将实际的PDF表单字段添加到PDF中以生成真正的PDF表单,您可以将其作为模板以便稍后填写。

您可以使用某些图形工具添加实际表单字段,例如Adobe Acrobat,或者您可以使用iText(夏普)。 看一下iText in Action – 2nd Edition的第8章以及这里可用于Java的示例和此处的.Net示例。

这些样本主要将表单字段添加到新生成的PDF文档中。 但是,您可以使用相同的代码将表单字段添加到PdfStamper中,该stamper.getWriter()使用Java中的stamper.getWriter()和C#中的stamper.Writer公开其内部PdfWriter。 而不是writer.addAnnotation(field)你必须使用stamper.addAnnotation(field, page)

尝试:

 using (FileStream outFile = new FileStream("result.pdf", FileMode.Create)) { PdfReader pdfReader = new PdfReader("file.pdf"); PdfStamper pdfStamper = new PdfStamper(pdfReader, outFile); AcroFields fields = pdfStamper.AcroFields; //rest of the code here //fields.SetField("n°1", "value"); //... pdfStamper.Close(); pdfReader.Close(); }