C# 用Itextsharp填写PDF表格

C# 用Itextsharp填写PDF表格,c#,forms,pdf,itextsharp,fill,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 pdfRe

我正在尝试使用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格式)。因此,您有两种选择:

  • 您可以使用@tschmit007在其答案注释中描述的硬编码或配置的“字段”位置和尺寸,直接将文本添加到页面内容中

  • 您可以将实际的PDF表单字段添加到PDF中,以生成真正的PDF表单,并将其作为模板稍后填充

  • 您可以使用某些允许的图形工具(例如Adobe Acrobat)添加实际表单字段,也可以使用iText(Sharp)。请参阅的第8章以及可用的示例和


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

    @Sam1您的pdf文件不是AcroForm:(.Ypu将在正确的位置插入文本框(即页面中的笛卡尔坐标)在pdf文档中。例如,from这可以工作,但一次只能包含一个页面…如何使整个页面都包含在内?或者如果我可以将其转换为可编辑,因为有大量的框,并且通过定位并不理想
    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();
    }