PDF表格与itext合并。 C#

时间:2014-06-19 14:42:26

标签: c# pdf itext

我必须将2个pdfs表单合并为一个。输入pdf具有可填写字段,输出也应具有相同的字段。我能够实现这一点,但是,当我合并具有相同值的字段的PDF时,只有第一个字段来自字段而第二个字段是扁平化的。 (让我们说pdf 1有字段'姓名'评论1&#39 ;; pdf 2有字段,'姓名'评论2&#39 ;;当我合并,在输出pdf中,第二个'名称'字段是flattend。)

     _stamp = new PdfStamper(_reader, pdfStream);

         AcroFields fields = _stamp.AcroFields;

            if (!(fields == null))
                    {
                    _stamp.FormFlattening = false;

                    }

                    _stamp.Close();
                    _stamp = null;

1 个答案:

答案 0 :(得分:1)

在您的代码中,您使用的是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();
    }
}

您可以找到完整的代码示例here。您必须使其适应C#(方法名称略有不同,但代码类似)。

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

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