diff options
Diffstat (limited to 'libqpdf')
-rw-r--r-- | libqpdf/QPDF.cc | 4 | ||||
-rw-r--r-- | libqpdf/QPDFObjectHandle.cc | 22 |
2 files changed, 26 insertions, 0 deletions
diff --git a/libqpdf/QPDF.cc b/libqpdf/QPDF.cc index 5dfc9224..023e0469 100644 --- a/libqpdf/QPDF.cc +++ b/libqpdf/QPDF.cc @@ -2596,6 +2596,10 @@ QPDF::replaceForeignIndirectObjects( void QPDF::copyStreamData(QPDFObjectHandle result, QPDFObjectHandle foreign) { + // This method was originally written for copying foreign streams, + // but it is used by QPDFObjectHandle to copy streams from the + // same QPDF object as well. + QPDFObjectHandle dict = result.getDict(); QPDFObjectHandle old_dict = foreign.getDict(); if (this->m->copied_stream_data_provider == 0) diff --git a/libqpdf/QPDFObjectHandle.cc b/libqpdf/QPDFObjectHandle.cc index ceb91630..f6ba3093 100644 --- a/libqpdf/QPDFObjectHandle.cc +++ b/libqpdf/QPDFObjectHandle.cc @@ -2877,6 +2877,28 @@ QPDFObjectHandle::copyObject(std::set<QPDFObjGen>& visited, } } +QPDFObjectHandle +QPDFObjectHandle::copyStream() +{ + assertStream(); + QPDFObjectHandle result = newStream(this->getOwningQPDF()); + QPDFObjectHandle dict = result.getDict(); + QPDFObjectHandle old_dict = getDict(); + for (auto& iter: QPDFDictItems(old_dict)) + { + if (iter.second.isIndirect()) + { + dict.replaceKey(iter.first, iter.second); + } + else + { + dict.replaceKey(iter.first, iter.second.shallowCopy()); + } + } + QPDF::StreamCopier::copyStreamData(getOwningQPDF(), result, *this); + return result; +} + void QPDFObjectHandle::makeDirect() { |