Commit 1562d34c096424b4916be09e8dcd2f0f3effb17f

Authored by Jay Berkenbilt
1 parent c97bd632

Add QPDFObjectHandle::isFormXObject

ChangeLog
  1 +2020-12-31 Jay Berkenbilt <ejb@ql.org>
  2 +
  3 + * Add QPDFObjectHandle::isFormXObject to test whether an object is
  4 + a form XObject.
  5 +
1 2020-12-30 Jay Berkenbilt <ejb@ql.org> 6 2020-12-30 Jay Berkenbilt <ejb@ql.org>
2 7
3 * Add QPDFPageObjectHelper::flattenRotation and --flatten-rotation 8 * Add QPDFPageObjectHelper::flattenRotation and --flatten-rotation
include/qpdf/QPDFObjectHandle.hh
@@ -1147,6 +1147,9 @@ class QPDFObjectHandle @@ -1147,6 +1147,9 @@ class QPDFObjectHandle
1147 QPDF_DLL 1147 QPDF_DLL
1148 void assertPageObject(); 1148 void assertPageObject();
1149 1149
  1150 + QPDF_DLL
  1151 + bool isFormXObject();
  1152 +
1150 private: 1153 private:
1151 QPDFObjectHandle(QPDF*, int objid, int generation); 1154 QPDFObjectHandle(QPDF*, int objid, int generation);
1152 QPDFObjectHandle(QPDFObject*); 1155 QPDFObjectHandle(QPDFObject*);
libqpdf/QPDFObjectHandle.cc
@@ -2962,6 +2962,20 @@ QPDFObjectHandle::isPagesObject() @@ -2962,6 +2962,20 @@ QPDFObjectHandle::isPagesObject()
2962 return (this->isDictionary() && this->hasKey("/Kids")); 2962 return (this->isDictionary() && this->hasKey("/Kids"));
2963 } 2963 }
2964 2964
  2965 +bool
  2966 +QPDFObjectHandle::isFormXObject()
  2967 +{
  2968 + if (! this->isStream())
  2969 + {
  2970 + return false;
  2971 + }
  2972 + QPDFObjectHandle dict = this->getDict();
  2973 + return (dict.getKey("/Type").isName() &&
  2974 + ("/XObject" == dict.getKey("/Type").getName()) &&
  2975 + dict.getKey("/Subtype").isName() &&
  2976 + ("/Form" == dict.getKey("/Subtype").getName()));
  2977 +}
  2978 +
2965 void 2979 void
2966 QPDFObjectHandle::assertPageObject() 2980 QPDFObjectHandle::assertPageObject()
2967 { 2981 {
libqpdf/QPDFPageObjectHelper.cc
@@ -565,11 +565,7 @@ QPDFPageObjectHelper::removeUnreferencedResourcesHelper( @@ -565,11 +565,7 @@ QPDFPageObjectHelper::removeUnreferencedResourcesHelper(
565 dict.removeKey(*k_iter); 565 dict.removeKey(*k_iter);
566 } 566 }
567 QPDFObjectHandle resource = dict.getKey(*k_iter); 567 QPDFObjectHandle resource = dict.getKey(*k_iter);
568 - if (resource.isStream() &&  
569 - resource.getDict().getKey("/Type").isName() &&  
570 - ("/XObject" == resource.getDict().getKey("/Type").getName()) &&  
571 - resource.getDict().getKey("/Subtype").isName() &&  
572 - ("/Form" == resource.getDict().getKey("/Subtype").getName())) 568 + if (resource.isFormXObject())
573 { 569 {
574 QTC::TC("qpdf", "QPDFPageObjectHelper filter form xobject"); 570 QTC::TC("qpdf", "QPDFPageObjectHelper filter form xobject");
575 removeUnreferencedResourcesHelper( 571 removeUnreferencedResourcesHelper(