From 43c404b45ab54583a33492adc93f54fa349c2f94 Mon Sep 17 00:00:00 2001 From: Tobias Hoffmann Date: Wed, 27 Jun 2012 06:00:58 +0200 Subject: [PATCH] Add QPDFObjectHandle::newStream(QPDF *, std::string const&) --- examples/pdf-create.cc | 5 +---- include/qpdf/QPDFObjectHandle.hh | 6 ++++++ libqpdf/QPDFObjectHandle.cc | 9 +++++++++ qpdf/pdf_from_scratch.cc | 5 +---- qpdf/test_driver.cc | 5 +---- qpdf/test_large_file.cc | 6 +----- 6 files changed, 19 insertions(+), 17 deletions(-) diff --git a/examples/pdf-create.cc b/examples/pdf-create.cc index e1a3ddd..e1d7575 100644 --- a/examples/pdf-create.cc +++ b/examples/pdf-create.cc @@ -65,10 +65,7 @@ static QPDFObjectHandle createPageContents(QPDF& pdf, std::string const& text) std::string contents = "BT /F1 24 Tf 72 720 Td (" + text + ") Tj ET\n" "q 144 0 0 144 234 324 cm /Im1 Do Q\n"; - PointerHolder b = new Buffer(contents.length()); - unsigned char* bp = b->getBuffer(); - memcpy(bp, (char*)contents.c_str(), contents.length()); - return QPDFObjectHandle::newStream(&pdf, b); + return QPDFObjectHandle::newStream(&pdf, contents); } QPDFObjectHandle newName(std::string const& name) diff --git a/include/qpdf/QPDFObjectHandle.hh b/include/qpdf/QPDFObjectHandle.hh index 350381b..8cfe56f 100644 --- a/include/qpdf/QPDFObjectHandle.hh +++ b/include/qpdf/QPDFObjectHandle.hh @@ -142,6 +142,12 @@ class QPDFObjectHandle QPDF_DLL static QPDFObjectHandle newStream(QPDF* qpdf, PointerHolder data); + // Create new stream with data from string. This method will + // create a copy of the data rather than using the user-provided + // buffer as in the PointerHolder version of newStream. + QPDF_DLL + static QPDFObjectHandle newStream(QPDF* qpdf, std::string const& data); + // Accessor methods. If an accessor method that is valid for only // a particular object type is called on an object of the wrong // type, an exception is thrown. diff --git a/libqpdf/QPDFObjectHandle.cc b/libqpdf/QPDFObjectHandle.cc index b1f7df2..139ca02 100644 --- a/libqpdf/QPDFObjectHandle.cc +++ b/libqpdf/QPDFObjectHandle.cc @@ -681,6 +681,15 @@ QPDFObjectHandle::newStream(QPDF* qpdf, PointerHolder data) } QPDFObjectHandle +QPDFObjectHandle::newStream(QPDF* qpdf, std::string const& data) +{ + PointerHolder b = new Buffer(data.length()); + unsigned char* bp = b->getBuffer(); + memcpy(bp, (char*)data.c_str(), data.length()); + return QPDFObjectHandle::newStream(qpdf, b); +} + +QPDFObjectHandle QPDFObjectHandle::shallowCopy() { assertInitialized(); diff --git a/qpdf/pdf_from_scratch.cc b/qpdf/pdf_from_scratch.cc index 2d7d8a3..2f853c2 100644 --- a/qpdf/pdf_from_scratch.cc +++ b/qpdf/pdf_from_scratch.cc @@ -21,10 +21,7 @@ void usage() static QPDFObjectHandle createPageContents(QPDF& pdf, std::string const& text) { std::string contents = "BT /F1 15 Tf 72 720 Td (" + text + ") Tj ET\n"; - PointerHolder b = new Buffer(contents.length()); - unsigned char* bp = b->getBuffer(); - memcpy(bp, (char*)contents.c_str(), contents.length()); - return QPDFObjectHandle::newStream(&pdf, b); + return QPDFObjectHandle::newStream(&pdf, contents); } QPDFObjectHandle newName(std::string const& name) diff --git a/qpdf/test_driver.cc b/qpdf/test_driver.cc index 6f5414e..e9c63d8 100644 --- a/qpdf/test_driver.cc +++ b/qpdf/test_driver.cc @@ -73,10 +73,7 @@ static void checkPageContents(QPDFObjectHandle page, static QPDFObjectHandle createPageContents(QPDF& pdf, std::string const& text) { std::string contents = "BT /F1 15 Tf 72 720 Td (" + text + ") Tj ET\n"; - PointerHolder b = new Buffer(contents.length()); - unsigned char* bp = b->getBuffer(); - memcpy(bp, (char*)contents.c_str(), contents.length()); - return QPDFObjectHandle::newStream(&pdf, b); + return QPDFObjectHandle::newStream(&pdf, contents); } void runtest(int n, char const* filename) diff --git a/qpdf/test_large_file.cc b/qpdf/test_large_file.cc index ec34651..fc2c7bb 100644 --- a/qpdf/test_large_file.cc +++ b/qpdf/test_large_file.cc @@ -173,11 +173,7 @@ std::string generate_page_contents(int pageno) static QPDFObjectHandle create_page_contents(QPDF& pdf, int pageno) { - std::string contents = generate_page_contents(pageno); - PointerHolder b = new Buffer(contents.length()); - unsigned char* bp = b->getBuffer(); - memcpy(bp, (char*)contents.c_str(), contents.length()); - return QPDFObjectHandle::newStream(&pdf, b); + return QPDFObjectHandle::newStream(&pdf, generate_page_contents(pageno)); } QPDFObjectHandle newName(std::string const& name) -- libgit2 0.21.4