From 32aa516535792733ae63eec3121b963d31bafb2d Mon Sep 17 00:00:00 2001 From: m-holger Date: Sun, 14 Sep 2025 19:51:31 +0100 Subject: [PATCH] Refactor `QPDFJob::doUnderOverlayForPage`: replace `page_idx` with `PageNo`, eliminate redundant variables, and simplify underlay/overlay page handling logic. --- include/qpdf/QPDFJob.hh | 3 +-- libqpdf/QPDFJob.cc | 42 +++++++----------------------------------- 2 files changed, 8 insertions(+), 37 deletions(-) diff --git a/include/qpdf/QPDFJob.hh b/include/qpdf/QPDFJob.hh index e9941e2..a448695 100644 --- a/include/qpdf/QPDFJob.hh +++ b/include/qpdf/QPDFJob.hh @@ -478,10 +478,9 @@ class QPDFJob QPDF& pdf, UnderOverlay& uo, std::map>>& pagenos, - size_t page_idx, + PageNo const& page_idx, size_t uo_idx, std::map>& fo, - std::vector& pages, QPDFPageObjectHelper& dest_page); void validateUnderOverlay(QPDF& pdf, UnderOverlay* uo); void handleTransformations(QPDF& pdf); diff --git a/libqpdf/QPDFJob.cc b/libqpdf/QPDFJob.cc index d2e3351..1b9aeb3 100644 --- a/libqpdf/QPDFJob.cc +++ b/libqpdf/QPDFJob.cc @@ -1915,26 +1915,25 @@ QPDFJob::doUnderOverlayForPage( QPDF& pdf, UnderOverlay& uo, std::map>>& pagenos, - size_t page_idx, + PageNo const& pageno, size_t uo_idx, std::map>& fo, - std::vector& pages, QPDFPageObjectHelper& dest_page) { - int pageno = 1 + QIntC::to_int(page_idx); - if (!(pagenos.contains(pageno) && pagenos[pageno].contains(uo_idx))) { + if (!(uo.pdf && pagenos.contains(pageno.no) && pagenos[pageno.no].contains(uo_idx))) { return ""; } auto& dest_afdh = dest_page.qpdf()->acroform(); + auto const& pages = uo.pdf->getAllPages(); std::string content; int min_suffix = 1; QPDFObjectHandle resources = dest_page.getAttribute("/Resources", true); - for (PageNo from_no: pagenos[pageno][uo_idx]) { + for (PageNo from_no: pagenos[pageno.no][uo_idx]) { doIfVerbose([&](Pipeline& v, std::string const& prefix) { v << " " << uo.filename << " " << uo.which << " " << from_no.no << "\n"; }); - auto from_page = pages.at(from_no.idx); + QPDFPageObjectHelper from_page = pages.at(from_no.idx); if (!fo[from_no.no].contains(uo_idx)) { fo[from_no.no][uo_idx] = pdf.copyForeignObject(from_page.getFormXObjectForPage()); } @@ -2007,19 +2006,6 @@ QPDFJob::handleUnderOverlay(QPDF& pdf) v << prefix << ": processing underlay/overlay\n"; }); - auto get_pages = [](std::vector& v, - std::vector>& v_out) { - for (auto const& uo: v) { - if (uo.pdf) { - v_out.push_back(QPDFPageDocumentHelper(*(uo.pdf)).getAllPages()); - } - } - }; - std::vector> upages; - get_pages(m->underlay, upages); - std::vector> opages; - get_pages(m->overlay, opages); - std::map> underlay_fo; std::map> overlay_fo; PageNo dest_page_no; @@ -2047,14 +2033,7 @@ QPDFJob::handleUnderOverlay(QPDF& pdf) std::string content; for (auto& underlay: m->underlay) { content += doUnderOverlayForPage( - pdf, - underlay, - underlay_pagenos, - dest_page_no.idx, - uo_idx, - underlay_fo, - upages[uo_idx], - dest_page); + pdf, underlay, underlay_pagenos, dest_page_no, uo_idx, underlay_fo, dest_page); ++uo_idx; } content += dest_page.placeFormXObject( @@ -2067,14 +2046,7 @@ QPDFJob::handleUnderOverlay(QPDF& pdf) uo_idx = 0; for (auto& overlay: m->overlay) { content += doUnderOverlayForPage( - pdf, - overlay, - overlay_pagenos, - dest_page_no.idx, - uo_idx, - overlay_fo, - opages[uo_idx], - dest_page); + pdf, overlay, overlay_pagenos, dest_page_no, uo_idx, overlay_fo, dest_page); ++uo_idx; } dest_page.getObjectHandle().replaceKey("/Contents", pdf.newStream(content)); -- libgit2 0.21.4