From be3a8c0e7a5edd30cb8a0f2e7cbc56d0e5bed982 Mon Sep 17 00:00:00 2001 From: Jay Berkenbilt Date: Tue, 23 Feb 2021 07:57:14 -0500 Subject: Keep only referenced form fields in --pages --- libqpdf/QPDFAcroFormDocumentHelper.cc | 21 ++++++++++++++++++--- 1 file changed, 18 insertions(+), 3 deletions(-) (limited to 'libqpdf/QPDFAcroFormDocumentHelper.cc') diff --git a/libqpdf/QPDFAcroFormDocumentHelper.cc b/libqpdf/QPDFAcroFormDocumentHelper.cc index 611d469a..78d3c5c7 100644 --- a/libqpdf/QPDFAcroFormDocumentHelper.cc +++ b/libqpdf/QPDFAcroFormDocumentHelper.cc @@ -135,15 +135,21 @@ QPDFAcroFormDocumentHelper::getWidgetAnnotationsForPage(QPDFPageObjectHelper h) std::vector QPDFAcroFormDocumentHelper::getFormFieldsForPage(QPDFPageObjectHelper ph) { + std::set added; std::vector result; auto widget_annotations = getWidgetAnnotationsForPage(ph); for (auto annot: widget_annotations) { auto field = getFieldForAnnotation(annot); field = field.getTopLevelField(); - if (field.getObjectHandle().isDictionary()) + auto og = field.getObjectHandle().getObjGen(); + if (! added.count(og)) { - result.push_back(field); + added.insert(og); + if (field.getObjectHandle().isDictionary()) + { + result.push_back(field); + } } } return result; @@ -674,18 +680,27 @@ QPDFAcroFormDocumentHelper::transformAnnotations( void QPDFAcroFormDocumentHelper::copyFieldsFromForeignPage( QPDFPageObjectHelper foreign_page, - QPDFAcroFormDocumentHelper& foreign_afdh) + QPDFAcroFormDocumentHelper& foreign_afdh, + std::vector* copied_fields) { std::set added; for (auto field: foreign_afdh.getFormFieldsForPage(foreign_page)) { auto new_field = this->qpdf.copyForeignObject( field.getObjectHandle()); + if (! new_field.isIndirect()) + { + new_field = this->qpdf.makeIndirectObject(new_field); + } auto og = new_field.getObjGen(); if (! added.count(og)) { addFormField(new_field); added.insert(og); + if (copied_fields) + { + copied_fields->push_back(new_field); + } } } } -- cgit v1.2.3-54-g00ecf