2014-06-19 46 views
0

我必须将2个pdf格式合并为一个。输入的pdf有可填写的字段,输出也应该有相同的字段。我能够实现这一点,但是,当我合并具有相同值的字段的PDF时,只有第一个字段将成为字段,而第二个字段将变为平坦。 (假设pdf 1有'Name'和'Comment1'两个字段; pdf 2有字段'Name'和'Comment2';当我合并时,在输出pdf中,第二个'Name'字段是平坦的)。PDF表格与itext合并。 c#

 _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的字段,另一个字段中的字段名为Name。如果合并这两个表单,这将导致只有一个值的单个字段Name。一个页面上不能有一个字段Name,另一个页面上的字段Name可能具有另一个值。这就是为什么我们还提供了一个样本,其中的字段被重新命名。你可以找到那个例子here。你可能不需要这个例子;我只是为了完整而添加它。

+0

谢谢布鲁诺,你的例子帮了很多! –