diff options
-rw-r--r-- | include/qpdf/QPDFObjectHandle.hh | 9 | ||||
-rw-r--r-- | libqpdf/QPDFObjectHandle.cc | 20 |
2 files changed, 25 insertions, 4 deletions
diff --git a/include/qpdf/QPDFObjectHandle.hh b/include/qpdf/QPDFObjectHandle.hh index a1819d99..2c24f481 100644 --- a/include/qpdf/QPDFObjectHandle.hh +++ b/include/qpdf/QPDFObjectHandle.hh @@ -363,6 +363,15 @@ class QPDFObjectHandle QPDFObjectHandle const& filter, QPDFObjectHandle const& decode_parms); + // Replace the stream's stream data with the given string. + // This method will create a copy of the data rather than using + // the user-provided buffer as in the PointerHolder<Buffer> version + // of replaceStreamData. + QPDF_DLL + void replaceStreamData(std::string const& data, + QPDFObjectHandle const& filter, + QPDFObjectHandle const& decode_parms); + // As above, replace this stream's stream data. Instead of // directly providing a buffer with the stream data, call the // given provider's provideStreamData method. See comments on the diff --git a/libqpdf/QPDFObjectHandle.cc b/libqpdf/QPDFObjectHandle.cc index 6bb182e8..54897b83 100644 --- a/libqpdf/QPDFObjectHandle.cc +++ b/libqpdf/QPDFObjectHandle.cc @@ -442,6 +442,19 @@ QPDFObjectHandle::replaceStreamData(PointerHolder<Buffer> data, } void +QPDFObjectHandle::replaceStreamData(std::string const& data, + QPDFObjectHandle const& filter, + QPDFObjectHandle const& decode_parms) +{ + assertStream(); + PointerHolder<Buffer> b = new Buffer(data.length()); + unsigned char* bp = b->getBuffer(); + memcpy(bp, (char*)data.c_str(), data.length()); + dynamic_cast<QPDF_Stream*>(obj.getPointer())->replaceStreamData( + b, filter, decode_parms); +} + +void QPDFObjectHandle::replaceStreamData(PointerHolder<StreamDataProvider> provider, QPDFObjectHandle const& filter, QPDFObjectHandle const& decode_parms) @@ -978,10 +991,9 @@ QPDFObjectHandle QPDFObjectHandle::newStream(QPDF* qpdf, std::string const& data) { QTC::TC("qpdf", "QPDFObjectHandle newStream with string"); - PointerHolder<Buffer> b = new Buffer(data.length()); - unsigned char* bp = b->getBuffer(); - memcpy(bp, (char*)data.c_str(), data.length()); - return QPDFObjectHandle::newStream(qpdf, b); + QPDFObjectHandle result = newStream(qpdf); + result.replaceStreamData(data, newNull(), newNull()); + return result; } QPDFObjectHandle |