summaryrefslogtreecommitdiffstats
path: root/libqpdf/QPDFObjectHandle.cc
diff options
context:
space:
mode:
authorJay Berkenbilt <ejb@ql.org>2021-02-21 12:35:53 +0100
committerJay Berkenbilt <ejb@ql.org>2021-02-21 12:36:30 +0100
commit92fbc6fdf56bad6aff8c9f3f1a3032d5ad36ec51 (patch)
tree583522ecd2468ef78421fb91a99d866098c12625 /libqpdf/QPDFObjectHandle.cc
parent60afe4142e4399b12f21aced476df7ef719008b9 (diff)
downloadqpdf-92fbc6fdf56bad6aff8c9f3f1a3032d5ad36ec51.tar.zst
QPDFObjectHandle::copyStream
Diffstat (limited to 'libqpdf/QPDFObjectHandle.cc')
-rw-r--r--libqpdf/QPDFObjectHandle.cc22
1 files changed, 22 insertions, 0 deletions
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()
{