diff options
author | Jay Berkenbilt <ejb@ql.org> | 2021-01-02 15:47:27 +0100 |
---|---|---|
committer | Jay Berkenbilt <ejb@ql.org> | 2021-01-02 20:08:17 +0100 |
commit | 98da4fd83527f47a28132ff4a120bc043d9e58f6 (patch) | |
tree | 350e2b436b6ac7d43b72ac16fa29c03ee0463a3e /libqpdf | |
parent | bedf35d6a55a9092485d56002b50bc9003ce7931 (diff) | |
download | qpdf-98da4fd83527f47a28132ff4a120bc043d9e58f6.tar.zst |
Externalize inline images now includes form XObjects
Diffstat (limited to 'libqpdf')
-rw-r--r-- | libqpdf/QPDFPageObjectHelper.cc | 56 |
1 files changed, 43 insertions, 13 deletions
diff --git a/libqpdf/QPDFPageObjectHelper.cc b/libqpdf/QPDFPageObjectHelper.cc index ef563dc2..f7fcd395 100644 --- a/libqpdf/QPDFPageObjectHelper.cc +++ b/libqpdf/QPDFPageObjectHelper.cc @@ -486,20 +486,50 @@ QPDFPageObjectHelper::getFormXObjects() void QPDFPageObjectHelper::externalizeInlineImages(size_t min_size) { - QPDFObjectHandle resources = getAttribute("/Resources", true); - // Calling mergeResources also ensures that /XObject becomes - // direct and is not shared with other pages. - resources.mergeResources( - QPDFObjectHandle::parse("<< /XObject << >> >>")); - InlineImageTracker iit(this->oh.getOwningQPDF(), min_size, resources); - Pl_Buffer b("new page content"); - filterContents(&iit, &b); - if (iit.any_images) + externalizeInlineImages(min_size, false); +} + +void +QPDFPageObjectHelper::externalizeInlineImages(size_t min_size, bool shallow) +{ + if (shallow) + { + QPDFObjectHandle resources = getAttribute("/Resources", true); + // Calling mergeResources also ensures that /XObject becomes + // direct and is not shared with other pages. + resources.mergeResources( + QPDFObjectHandle::parse("<< /XObject << >> >>")); + InlineImageTracker iit(this->oh.getOwningQPDF(), min_size, resources); + Pl_Buffer b("new page content"); + filterContents(&iit, &b); + if (iit.any_images) + { + if (this->oh.isFormXObject()) + { + this->oh.replaceStreamData( + b.getBuffer(), + QPDFObjectHandle::newNull(), + QPDFObjectHandle::newNull()); + } + else + { + this->oh.replaceKey( + "/Contents", + QPDFObjectHandle::newStream( + this->oh.getOwningQPDF(), b.getBuffer())); + } + } + } + else { - getObjectHandle().replaceKey( - "/Contents", - QPDFObjectHandle::newStream( - this->oh.getOwningQPDF(), b.getBuffer())); + externalizeInlineImages(min_size, true); + forEachFormXObject( + true, + [min_size](QPDFObjectHandle& obj, + QPDFObjectHandle&, std::string const&) { + QPDFPageObjectHelper(obj).externalizeInlineImages( + min_size, true); + }); } } |