diff options
author | Jay Berkenbilt <ejb@ql.org> | 2021-02-23 13:57:14 +0100 |
---|---|---|
committer | Jay Berkenbilt <ejb@ql.org> | 2021-02-23 14:26:21 +0100 |
commit | be3a8c0e7a5edd30cb8a0f2e7cbc56d0e5bed982 (patch) | |
tree | 4ae317e88688112402864345b8a9ed15de8f8b56 /libqpdf | |
parent | 50037fb33de9681d63bb030bf7d0aca1acbda55a (diff) | |
download | qpdf-be3a8c0e7a5edd30cb8a0f2e7cbc56d0e5bed982.tar.zst |
Keep only referenced form fields in --pages
Diffstat (limited to 'libqpdf')
-rw-r--r-- | libqpdf/QPDFAcroFormDocumentHelper.cc | 21 |
1 files changed, 18 insertions, 3 deletions
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<QPDFFormFieldObjectHelper> QPDFAcroFormDocumentHelper::getFormFieldsForPage(QPDFPageObjectHelper ph) { + std::set<QPDFObjGen> added; std::vector<QPDFFormFieldObjectHelper> 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<QPDFObjectHandle>* copied_fields) { std::set<QPDFObjGen> 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); + } } } } |