使用Itextsharp填写PDF表单

8

我正在尝试使用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循环始终为null计数。我需要对文件本身做些什么吗?因为我尝试了这里的示例,它可以正常工作:here这是我要填写的PDF的示例,有什么想法吗?
编辑: Null Error on PDF Fields
2个回答

6

尝试:

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

@Sam1 你的PDF文件不是AcroForm :(。你需要在PDF文档中正确位置(即使用笛卡尔坐标系)插入文本框。 - tschmit007
从这里开始:https://dev59.com/tm865IYBdhLWcg3wFqjY - tschmit007
这个可以工作,但只能一次处理一页...我该如何使整个页面都被包含进去? - Zaki
如果我可以将其转换为可编辑格式,因为有很多框,而且位置不理想。 - Zaki

6
事实证明,要填写的PDF“表格”实际上根本不是一个表格(在PDF术语中)。因此,你有两个选择:
1. 根据@tschmit007在其答案评论中描述的硬编码或配置的“字段”位置和尺寸,直接将文本添加到页面内容中。 2. 向PDF添加实际的表单字段,以生成真正的PDF表单,然后将其作为模板进行填写。
你可以使用一些允许这样做的图形工具(如Adobe Acrobat),或者使用iText(Sharp)添加实际的表单字段。请参阅iText in Action — 2nd Edition第8章以及这里的Java示例.Net示例
那些示例主要是向新生成的PDF文档添加表单字段。但是,您可以几乎使用相同的代码将表单字段添加到PdfStamper中,该PdfStamper使用Java中的stamper.getWriter()暴露其内部PdfWriter,而在C#中使用stamper.Writer。但是,您需要使用stamper.addAnnotation(field, page)而不是writer.addAnnotation(field)。请保留HTML标签。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接