aboutsummaryrefslogtreecommitdiffstats
path: root/libqpdf/QPDFJob.cc
diff options
context:
space:
mode:
Diffstat (limited to 'libqpdf/QPDFJob.cc')
-rw-r--r--libqpdf/QPDFJob.cc35
1 files changed, 18 insertions, 17 deletions
diff --git a/libqpdf/QPDFJob.cc b/libqpdf/QPDFJob.cc
index b2f905a1..a7cb3e3a 100644
--- a/libqpdf/QPDFJob.cc
+++ b/libqpdf/QPDFJob.cc
@@ -1,10 +1,6 @@
#include <qpdf/QPDFJob.hh>
-#include <cctype>
-#include <cstdio>
-#include <cstdlib>
#include <cstring>
-#include <fcntl.h>
#include <iostream>
#include <memory>
@@ -14,13 +10,11 @@
#include <qpdf/Pl_DCT.hh>
#include <qpdf/Pl_Discard.hh>
#include <qpdf/Pl_Flate.hh>
-#include <qpdf/Pl_OStream.hh>
#include <qpdf/Pl_StdioFile.hh>
#include <qpdf/Pl_String.hh>
#include <qpdf/QIntC.hh>
#include <qpdf/QPDF.hh>
#include <qpdf/QPDFAcroFormDocumentHelper.hh>
-#include <qpdf/QPDFArgParser.hh>
#include <qpdf/QPDFCryptoProvider.hh>
#include <qpdf/QPDFEmbeddedFileDocumentHelper.hh>
#include <qpdf/QPDFExc.hh>
@@ -2419,26 +2413,32 @@ QPDFJob::handlePageSpecs(QPDF& pdf, std::vector<std::unique_ptr<QPDF>>& page_hea
dh.removePage(page);
}
- if (m->collate && (parsed_specs.size() > 1)) {
+ auto n_collate = m->collate.size();
+ auto n_specs = parsed_specs.size();
+ if (n_collate > 0 && n_specs > 1) {
// Collate the pages by selecting one page from each spec in order. When a spec runs out of
// pages, stop selecting from it.
std::vector<QPDFPageData> new_parsed_specs;
- size_t nspecs = parsed_specs.size();
- size_t cur_page = 0;
+ // Make sure we have a collate value for each spec. We have already checked that a non-empty
+ // collate has either one value or one value per spec.
+ for (auto i = n_collate; i < n_specs; ++i) {
+ m->collate.push_back(m->collate.at(0));
+ }
+ std::vector<size_t> cur_page(n_specs, 0);
bool got_pages = true;
while (got_pages) {
got_pages = false;
- for (size_t i = 0; i < nspecs; ++i) {
+ for (size_t i = 0; i < n_specs; ++i) {
QPDFPageData& page_data = parsed_specs.at(i);
- for (size_t j = 0; j < m->collate; ++j) {
- if (cur_page + j < page_data.selected_pages.size()) {
+ for (size_t j = 0; j < m->collate.at(i); ++j) {
+ if (cur_page.at(i) + j < page_data.selected_pages.size()) {
got_pages = true;
new_parsed_specs.emplace_back(
- page_data, page_data.selected_pages.at(cur_page + j));
+ page_data, page_data.selected_pages.at(cur_page.at(i) + j));
}
}
+ cur_page.at(i) += m->collate.at(i);
}
- cur_page += m->collate;
}
parsed_specs = new_parsed_specs;
}
@@ -3019,9 +3019,10 @@ QPDFJob::writeOutfile(QPDF& pdf)
try {
QUtil::remove_file(backup.c_str());
} catch (QPDFSystemError& e) {
- *m->log->getError() << m->message_prefix << ": unable to delete original file ("
- << e.what() << ");" << " original file left in " << backup
- << ", but the input was successfully replaced\n";
+ *m->log->getError()
+ << m->message_prefix << ": unable to delete original file (" << e.what() << ");"
+ << " original file left in " << backup
+ << ", but the input was successfully replaced\n";
}
}
}