aboutsummaryrefslogtreecommitdiffstats
path: root/libqpdf/QPDFPageObjectHelper.cc
diff options
context:
space:
mode:
Diffstat (limited to 'libqpdf/QPDFPageObjectHelper.cc')
-rw-r--r--libqpdf/QPDFPageObjectHelper.cc23
1 files changed, 23 insertions, 0 deletions
diff --git a/libqpdf/QPDFPageObjectHelper.cc b/libqpdf/QPDFPageObjectHelper.cc
index b0c77b0c..d5579c72 100644
--- a/libqpdf/QPDFPageObjectHelper.cc
+++ b/libqpdf/QPDFPageObjectHelper.cc
@@ -568,6 +568,29 @@ QPDFPageObjectHelper::removeUnreferencedResourcesHelper(
{
dict.removeKey(*k_iter);
}
+ QPDFObjectHandle resource = dict.getKey(*k_iter);
+ if (resource.isStream() &&
+ resource.getDict().getKey("/Type").isName() &&
+ ("/XObject" == resource.getDict().getKey("/Type").getName()) &&
+ resource.getDict().getKey("/Subtype").isName() &&
+ ("/Form" == resource.getDict().getKey("/Subtype").getName()))
+ {
+ QTC::TC("qpdf", "QPDFPageObjectHelper filter form xobject");
+ removeUnreferencedResourcesHelper(
+ resource.getDict(), seen,
+ [&resource]() {
+ auto result = resource.getDict().getKey("/Resources");
+ if (result.isDictionary())
+ {
+ result = result.shallowCopy();
+ resource.getDict().replaceKey("/Resources", result);
+ }
+ return result;
+ },
+ [&resource](QPDFObjectHandle::TokenFilter* f) {
+ resource.filterAsContents(f);
+ });
+ }
}
}
}