填写与iTextSharp的PDF表格(Fill PDF Form with Itextsharp)

2019-08-08 03:31发布

我试图填补了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的例子

有任何想法吗?

编辑::

Answer 1:

事实证明,在PDF“格式”填写实际根本不是一个形式(PDF格式条款)。 因此,你有两个选择:

  1. 您的文本添加到页面内容直接使用硬编码或配置的“场”的位置,并通过@ tschmit007在注释中说明他的回答尺寸。

  2. 您实际添加PDF表单域到PDF生成,你需要为模板后,填补了一个真正的PDF格式。

你可以使用一些图形化工具,允许的是,如使用Adobe Acrobat添加实际表单字段或者,也可以使用的iText(夏普)。 看一看的第8章在行动iText的-第二版 ,并提供样品这里的Java和这里的.Net 。

这些样品大多添加表单域到新生成的PDF文档。 您几乎可以使用相同的代码,但是,添加表单字段暴露出使用其内部PdfWriter一个PdfStamper stamper.getWriter()在Java中和stamper.Writer在C#。 取而代之的writer.addAnnotation(field)必须使用stamper.addAnnotation(field, page) ,虽然。



Answer 2:

尝试:

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


文章来源: Fill PDF Form with Itextsharp