aboutsummaryrefslogtreecommitdiffstats
path: root/libqpdf/QPDFAcroFormDocumentHelper.cc
diff options
context:
space:
mode:
authorJay Berkenbilt <ejb@ql.org>2021-02-23 13:57:14 +0100
committerJay Berkenbilt <ejb@ql.org>2021-02-23 14:26:21 +0100
commitbe3a8c0e7a5edd30cb8a0f2e7cbc56d0e5bed982 (patch)
tree4ae317e88688112402864345b8a9ed15de8f8b56 /libqpdf/QPDFAcroFormDocumentHelper.cc
parent50037fb33de9681d63bb030bf7d0aca1acbda55a (diff)
downloadqpdf-be3a8c0e7a5edd30cb8a0f2e7cbc56d0e5bed982.tar.zst
Keep only referenced form fields in --pages
Diffstat (limited to 'libqpdf/QPDFAcroFormDocumentHelper.cc')
-rw-r--r--libqpdf/QPDFAcroFormDocumentHelper.cc21
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);
+ }
}
}
}