diff --git a/ChangeLog b/ChangeLog index 9703de5f..79ed223a 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,3 +1,8 @@ +2020-12-31 Jay Berkenbilt + + * Add QPDFObjectHandle::isFormXObject to test whether an object is + a form XObject. + 2020-12-30 Jay Berkenbilt * Add QPDFPageObjectHelper::flattenRotation and --flatten-rotation diff --git a/include/qpdf/QPDFObjectHandle.hh b/include/qpdf/QPDFObjectHandle.hh index ac59d428..e383e274 100644 --- a/include/qpdf/QPDFObjectHandle.hh +++ b/include/qpdf/QPDFObjectHandle.hh @@ -1147,6 +1147,9 @@ class QPDFObjectHandle QPDF_DLL void assertPageObject(); + QPDF_DLL + bool isFormXObject(); + private: QPDFObjectHandle(QPDF*, int objid, int generation); QPDFObjectHandle(QPDFObject*); diff --git a/libqpdf/QPDFObjectHandle.cc b/libqpdf/QPDFObjectHandle.cc index 7b36fffe..181793f4 100644 --- a/libqpdf/QPDFObjectHandle.cc +++ b/libqpdf/QPDFObjectHandle.cc @@ -2962,6 +2962,20 @@ QPDFObjectHandle::isPagesObject() return (this->isDictionary() && this->hasKey("/Kids")); } +bool +QPDFObjectHandle::isFormXObject() +{ + if (! this->isStream()) + { + return false; + } + QPDFObjectHandle dict = this->getDict(); + return (dict.getKey("/Type").isName() && + ("/XObject" == dict.getKey("/Type").getName()) && + dict.getKey("/Subtype").isName() && + ("/Form" == dict.getKey("/Subtype").getName())); +} + void QPDFObjectHandle::assertPageObject() { diff --git a/libqpdf/QPDFPageObjectHelper.cc b/libqpdf/QPDFPageObjectHelper.cc index 58747814..a80ab641 100644 --- a/libqpdf/QPDFPageObjectHelper.cc +++ b/libqpdf/QPDFPageObjectHelper.cc @@ -565,11 +565,7 @@ 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())) + if (resource.isFormXObject()) { QTC::TC("qpdf", "QPDFPageObjectHelper filter form xobject"); removeUnreferencedResourcesHelper(