aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorJay Berkenbilt <ejb@ql.org>2023-02-25 17:13:45 +0100
committerJay Berkenbilt <ejb@ql.org>2023-02-25 17:25:28 +0100
commit48bacbf2e66b08c9f738416044d5797554ffa203 (patch)
tree056bdb6aacd65b2b5fe8383c4024ee1a0002c204
parente65bb2c5c2ee2911b364ce569f347ab66964ca1e (diff)
downloadqpdf-48bacbf2e66b08c9f738416044d5797554ffa203.tar.zst
Refactor overlay/underlay in preparation for change
-rw-r--r--include/qpdf/QPDFJob.hh5
-rw-r--r--libqpdf/QPDFJob.cc45
2 files changed, 23 insertions, 27 deletions
diff --git a/include/qpdf/QPDFJob.hh b/include/qpdf/QPDFJob.hh
index 01307573..3e2a73a0 100644
--- a/include/qpdf/QPDFJob.hh
+++ b/include/qpdf/QPDFJob.hh
@@ -526,15 +526,14 @@ class QPDFJob
void
getUOPagenos(UnderOverlay& uo, std::map<int, std::vector<int>>& pagenos);
void handleUnderOverlay(QPDF& pdf);
- void doUnderOverlayForPage(
+ std::string doUnderOverlayForPage(
QPDF& pdf,
UnderOverlay& uo,
std::map<int, std::vector<int>>& pagenos,
size_t page_idx,
std::map<int, QPDFObjectHandle>& fo,
std::vector<QPDFPageObjectHelper>& pages,
- QPDFPageObjectHelper& dest_page,
- bool before);
+ QPDFPageObjectHelper& dest_page);
void validateUnderOverlay(QPDF& pdf, UnderOverlay* uo);
void handleTransformations(QPDF& pdf);
void addAttachments(QPDF& pdf);
diff --git a/libqpdf/QPDFJob.cc b/libqpdf/QPDFJob.cc
index e311a1e4..06d93fd7 100644
--- a/libqpdf/QPDFJob.cc
+++ b/libqpdf/QPDFJob.cc
@@ -2056,7 +2056,7 @@ get_afdh_for_qpdf(
return afdh_map[uid].get();
}
-void
+std::string
QPDFJob::doUnderOverlayForPage(
QPDF& pdf,
UnderOverlay& uo,
@@ -2064,12 +2064,11 @@ QPDFJob::doUnderOverlayForPage(
size_t page_idx,
std::map<int, QPDFObjectHandle>& fo,
std::vector<QPDFPageObjectHelper>& pages,
- QPDFPageObjectHelper& dest_page,
- bool before)
+ QPDFPageObjectHelper& dest_page)
{
int pageno = 1 + QIntC::to_int(page_idx);
if (!pagenos.count(pageno)) {
- return;
+ return "";
}
std::map<unsigned long long, std::shared_ptr<QPDFAcroFormDocumentHelper>>
@@ -2121,14 +2120,7 @@ QPDFJob::doUnderOverlayForPage(
content += new_content;
}
}
- if (!content.empty()) {
- if (before) {
- dest_page.addPageContents(pdf.newStream(content), true);
- } else {
- dest_page.addPageContents(pdf.newStream("q\n"), true);
- dest_page.addPageContents(pdf.newStream("\nQ\n" + content), false);
- }
- }
+ return content;
}
void
@@ -2182,24 +2174,29 @@ QPDFJob::handleUnderOverlay(QPDF& pdf)
doIfVerbose([&](Pipeline& v, std::string const& prefix) {
v << " page " << 1 + i << "\n";
});
- doUnderOverlayForPage(
+ auto pageno = QIntC::to_int(i) + 1;
+ if (!(underlay_pagenos.count(pageno) ||
+ overlay_pagenos.count(pageno))) {
+ continue;
+ }
+ auto& dest_page = main_pages.at(i);
+ auto content = doUnderOverlayForPage(
pdf,
m->underlay,
underlay_pagenos,
i,
underlay_fo,
upages,
- main_pages.at(i),
- true);
- doUnderOverlayForPage(
- pdf,
- m->overlay,
- overlay_pagenos,
- i,
- overlay_fo,
- opages,
- main_pages.at(i),
- false);
+ dest_page);
+ if (!content.empty()) {
+ dest_page.addPageContents(pdf.newStream(content), true);
+ }
+ content = doUnderOverlayForPage(
+ pdf, m->overlay, overlay_pagenos, i, overlay_fo, opages, dest_page);
+ if (!content.empty()) {
+ dest_page.addPageContents(pdf.newStream("q\n"), true);
+ dest_page.addPageContents(pdf.newStream("\nQ\n" + content), false);
+ }
}
}