我必须将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;
答案 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。你可能不需要那个例子;我只是为了完整而添加它。