C# itextsharp复制带有空字段的pdf将其添加到pdf,仅读取第一页的字段

C# itextsharp复制带有空字段的pdf将其添加到pdf,仅读取第一页的字段,c#,pdf,itext,C#,Pdf,Itext,当我按下按钮时,checkedlistbox中的项目应以PDF格式写入。PDF文档有1页20个字段,但应该灵活。例如,如果checkedlistbox有52个条目,程序将创建一个包含3页的PDF(复制PDF并添加2次)。这是可行的,但以下页面的字段与第一个页面的字段具有相同的名称。我希望这不是问题 然后读取字段名: PdfReader pdfReader = new PdfReader(path); AcroFields pdfFormFields = pdfReader.AcroFields;

当我按下按钮时,checkedlistbox中的项目应以PDF格式写入。PDF文档有1页20个字段,但应该灵活。例如,如果checkedlistbox有52个条目,程序将创建一个包含3页的PDF(复制PDF并添加2次)。这是可行的,但以下页面的字段与第一个页面的字段具有相同的名称。我希望这不是问题

然后读取字段名:

PdfReader pdfReader = new PdfReader(path);
AcroFields pdfFormFields = pdfReader.AcroFields;
foreach (KeyValuePair<string, AcroFields.Item> kvp in pdfFormFields.Fields) {
    listoffieldnames.Add(kvp.Key.ToString());
}
pdfReader.Close();
PdfReader PdfReader=新的PdfReader(路径);
AcroFields pdfFormFields=pdfReader.AcroFields;
foreach(pdfFormFields.Fields中的KeyValuePair kvp){
添加(kvp.Key.ToString());
}
pdfReader.Close();
我的问题是,阅读器只读取第一页的字段

该程序创建一个包含3页的PDF(复制PDF并添加2次)。这是可行的,但以下页面的字段与第一个页面的字段具有相同的名称。我希望这不是问题

这是个问题

PDF只有一个抽象表单定义,其中字段由其完全限定名唯一标识。另一方面,一个字段可以有多个小部件,即多个可视化,这些小部件的显示细节可能不同(例如,可能使用不同的字体或字体大小),但它们都显示相同的值

将同一源PDF的多个副本复制到目标PDF的代码可能会以不同的方式处理此问题:

  • 它可能会忽略字段唯一性问题,并创建一个包含多个同名表单字段的PDF
  • 它可能会识别重复的字段名,并将这些字段与单个字段的多个窗口小部件合并在一起
  • 它可能会识别重复的字段名,并重命名重复的字段名,以最终获得唯一的名称
(如果使用iTextSharp创建这些副本:iTextSharp可以以不同的方式合并PDF,可以是快速和哑,也可以不是非常快速和智能,实现第二个或第三个选项。)

PDF查看器处理以dumb first方式创建的PDF的方式因不同的查看器甚至同一查看器的不同版本而有所不同:重复字段要么被解释为同一字段的多个窗口小部件,要么只有一个具有相同名称的字段被处理为正确的字段,而其他字段处于非活动/失效状态

与您的情况一样,以下页面的字段与第一个页面的字段具有相同的名称,您的复制代码是前两种类型之一,因此,如果同一字段的多个副本都可以正常工作,则它们表示同一个表单字段