使用Itextsharp填写PDF表格

时间:2013-01-24 10:21:33

标签: c# forms pdf itextsharp fill

我正在尝试使用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循环始终为空计数。我是否需要做一些事情来提交自己,因为我已经尝试了here中的示例并且它运行正常... this is an example of pdf I am trying to fill

任何想法?

编辑::

Null Error on PDF Fields

2 个答案:

答案 0 :(得分:4)

尝试:

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

答案 1 :(得分:3)

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

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

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

  3. 您可以使用某种图形工具添加实际的表单字段,例如, Adobe Acrobat,或者您可以使用iText(夏普)。请查看iText in Action — 2nd Edition的第8章以及可用的示例here for Javahere for .Net

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