PDF表单与itext合并。c#

PDF表单与itext合并。c#,c#,pdf,itext,C#,Pdf,Itext,我必须把两张PDF表格合并成一张。输入PDF有可填充的字段,输出PDF也应该有相同的字段。我能够做到这一点,但是,当我合并具有相同字段值的PDF时,只有第一个字段作为字段出现,第二个字段变平。(假设pdf 1包含字段“Name”和“Comment1”;pdf 2包含字段“Name”和“Comment2”;当我合并时,在输出pdf中,第二个“Name”字段变平。) 在代码中,您使用的是PdfStamper。这是一个填写表单的类,而不是合并表单的类。使用PdfCopy合并表单: public voi

我必须把两张PDF表格合并成一张。输入PDF有可填充的字段,输出PDF也应该有相同的字段。我能够做到这一点,但是,当我合并具有相同字段值的PDF时,只有第一个字段作为字段出现,第二个字段变平。(假设pdf 1包含字段“Name”和“Comment1”;pdf 2包含字段“Name”和“Comment2”;当我合并时,在输出pdf中,第二个“Name”字段变平。)


在代码中,您使用的是
PdfStamper
。这是一个填写表单的类,而不是合并表单的类。使用
PdfCopy
合并表单:

public void createPdf(String filename, PdfReader[] readers) throws IOException, DocumentException {
    Document document = new Document();
    PdfCopy copy = new PdfCopy(document, new FileOutputStream(filename));
    copy.setMergeFields();
    document.open();
    for (PdfReader reader : readers) {
        copy.addDocument(reader);
    }
    document.close();
    for (PdfReader reader : readers) {
        reader.close();
    }
}
您可以找到完整的代码示例。您必须将其调整为C#(方法名称略有不同,但代码类似)

非常重要的是,不要忘记告诉
PdfCopy
您要合并字段,否则表单将不会被复制


您解释说,一个PDF中有一个名为
Name
的字段,另一个PDF中有一个名为
Name
的字段。如果合并两个表单,这将导致只有一个值的单个字段
Name
。一页上不能有一个字段
名称
,另一页上不能有另一个字段
名称
。这就是为什么我们还提供了一个重命名字段的示例。你可以找到这个例子。你可能不需要这个例子;我只是为了完整起见才添加它。

谢谢Bruno,你的例子帮助很大!!
public void createPdf(String filename, PdfReader[] readers) throws IOException, DocumentException {
    Document document = new Document();
    PdfCopy copy = new PdfCopy(document, new FileOutputStream(filename));
    copy.setMergeFields();
    document.open();
    for (PdfReader reader : readers) {
        copy.addDocument(reader);
    }
    document.close();
    for (PdfReader reader : readers) {
        reader.close();
    }
}