Tidy example pdf-double-page-size

Also fix typo in pdf-attach-file example.
This commit is contained in:
m-holger 2022-03-02 18:37:51 +00:00 committed by Jay Berkenbilt
parent c0fc776ba4
commit 78aa3b6c2b
2 changed files with 15 additions and 21 deletions

View File

@ -98,7 +98,7 @@ static void process(char const* infilename, char const* password,
// apdict.replaceKey("/Type", QPDFObjectHandle::newName("/XObject"));
// apdict.replaceKey("/Subtype", QPDFObjectHandle::newName("/Form"));
// apdict.replaceKey("/BBox", QPDFObjectHandle::parse("[ 0 0 20 20 ]"));
apdict.replaceKey("/Resources", "<< >>"_qpdf"");
apdict.replaceKey("/Resources", "<< >>"_qpdf);
apdict.replaceKey("/Type", "/XObject"_qpdf);
apdict.replaceKey("/Subtype", "/Form"_qpdf);
apdict.replaceKey("/BBox", "[ 0 0 20 20 ]"_qpdf);

View File

@ -19,28 +19,30 @@ void usage()
exit(2);
}
static void doubleBoxSize(QPDFObjectHandle& page, char const* box_name)
// If there is a box of name box_name, replace it with a new box whose
// elements are double the values of the original box.
static void doubleBoxSize(QPDFPageObjectHelper& page, char const* box_name)
{
// If there is a box of this name, replace it with a new box whose
// elements are double the values of the original box.
QPDFObjectHandle box = page.getKey(box_name);
// We need to use getAttribute rather than getKey as some boxes could
// be inherited.
auto box = page.getAttribute(box_name, true);
if (box.isNull())
{
return;
}
if (! (box.isArray() && (box.getArrayNItems() == 4)))
if (! box.isRectangle())
{
throw std::runtime_error(std::string("box ") + box_name +
" is not an array of four elements");
}
std::vector<QPDFObjectHandle> doubled;
for (int i = 0; i < 4; ++i)
for (auto& item : box.aitems())
{
doubled.push_back(
QPDFObjectHandle::newReal(
box.getArrayItem(i).getNumericValue() * 2.0, 2));
QPDFObjectHandle::newReal(item.getNumericValue() * 2.0, 2));
}
page.replaceKey(box_name, QPDFObjectHandle::newArray(doubled));
page.getObjectHandle()
.replaceKey(box_name, QPDFObjectHandle::newArray(doubled));
}
int main(int argc, char* argv[])
@ -79,17 +81,10 @@ int main(int argc, char* argv[])
QPDF qpdf;
qpdf.processFile(infilename, password);
std::vector<QPDFPageObjectHelper> pages =
QPDFPageDocumentHelper(qpdf).getAllPages();
for (std::vector<QPDFPageObjectHelper>::iterator iter =
pages.begin();
iter != pages.end(); ++iter)
for (auto& page : QPDFPageDocumentHelper(qpdf).getAllPages())
{
QPDFPageObjectHelper& ph(*iter);
QPDFObjectHandle page = ph.getObjectHandle();
// Prepend the buffer to the page's contents
ph.addPageContents(
page.addPageContents(
QPDFObjectHandle::newStream(&qpdf, content), true);
// Double the size of each of the content boxes
@ -104,8 +99,7 @@ int main(int argc, char* argv[])
QPDFWriter w(qpdf, outfilename);
if (static_id)
{
// For the test suite, uncompress streams and use static
// IDs.
// For the test suite, uncompress streams and use static IDs.
w.setStaticID(true); // for testing only
w.setStreamDataMode(qpdf_s_uncompress);
}