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#的主要内容,如果未能解决你的问题,请参考以下文章
如何使用 iText 获取 Pdf 表单字段的自定义格式脚本?