PDF 表单与 itext 合并。 C#

Posted

技术标签:

【中文标题】PDF 表单与 itext 合并。 C#【英文标题】:PDF Form merging with itext. c# 【发布时间】:2014-06-19 14:42:25 【问题描述】:

我必须将 2 个 pdf 表单合并为一个。输入 pdf 具有可填写的字段,输出也应具有相同的字段。我能够做到这一点,但是,当我合并具有相同字段值的 PDF 时,只有第一个字段作为字段出现,第二个字段被展平。 (假设 pdf 1 有字段“名称”和“评论 1”;pdf 2 有字段“名称”和“评论 2”;当我合并时,在输出 pdf 中,第二个“名称”字段是扁平的。)

     _stamp = new PdfStamper(_reader, pdfStream);

         AcroFields fields = _stamp.AcroFields;

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

                    

                    _stamp.Close();
                    _stamp = null;

【问题讨论】:

【参考方案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。你可能不需要那个例子;我只是为了完整性而添加它。

【讨论】:

感谢布鲁诺,你的例子帮了大忙!!

以上是关于PDF 表单与 itext 合并。 C#的主要内容,如果未能解决你的问题,请参考以下文章

PDF 表单填写 iText 错误

如何使用 iText 获取 Pdf 表单字段的自定义格式脚本?

iText:如何在提交 Pdf 表单后重定向到 url,当它显示在 iframe 中时?

pdf格式在itext7中为空

itext7 pdf与书签合并

编译itext提供的示例程序