Commit 32aa516535792733ae63eec3121b963d31bafb2d

Authored by m-holger
1 parent e62cf819

Refactor `QPDFJob::doUnderOverlayForPage`: replace `page_idx` with `PageNo`, eli…

…minate redundant variables, and simplify underlay/overlay page handling logic.
include/qpdf/QPDFJob.hh
... ... @@ -478,10 +478,9 @@ class QPDFJob
478 478 QPDF& pdf,
479 479 UnderOverlay& uo,
480 480 std::map<int, std::map<size_t, std::vector<int>>>& pagenos,
481   - size_t page_idx,
  481 + PageNo const& page_idx,
482 482 size_t uo_idx,
483 483 std::map<int, std::map<size_t, QPDFObjectHandle>>& fo,
484   - std::vector<QPDFPageObjectHelper>& pages,
485 484 QPDFPageObjectHelper& dest_page);
486 485 void validateUnderOverlay(QPDF& pdf, UnderOverlay* uo);
487 486 void handleTransformations(QPDF& pdf);
... ...
libqpdf/QPDFJob.cc
... ... @@ -1915,26 +1915,25 @@ QPDFJob::doUnderOverlayForPage(
1915 1915 QPDF& pdf,
1916 1916 UnderOverlay& uo,
1917 1917 std::map<int, std::map<size_t, std::vector<int>>>& pagenos,
1918   - size_t page_idx,
  1918 + PageNo const& pageno,
1919 1919 size_t uo_idx,
1920 1920 std::map<int, std::map<size_t, QPDFObjectHandle>>& fo,
1921   - std::vector<QPDFPageObjectHelper>& pages,
1922 1921 QPDFPageObjectHelper& dest_page)
1923 1922 {
1924   - int pageno = 1 + QIntC::to_int(page_idx);
1925   - if (!(pagenos.contains(pageno) && pagenos[pageno].contains(uo_idx))) {
  1923 + if (!(uo.pdf && pagenos.contains(pageno.no) && pagenos[pageno.no].contains(uo_idx))) {
1926 1924 return "";
1927 1925 }
1928 1926 auto& dest_afdh = dest_page.qpdf()->acroform();
1929 1927  
  1928 + auto const& pages = uo.pdf->getAllPages();
1930 1929 std::string content;
1931 1930 int min_suffix = 1;
1932 1931 QPDFObjectHandle resources = dest_page.getAttribute("/Resources", true);
1933   - for (PageNo from_no: pagenos[pageno][uo_idx]) {
  1932 + for (PageNo from_no: pagenos[pageno.no][uo_idx]) {
1934 1933 doIfVerbose([&](Pipeline& v, std::string const& prefix) {
1935 1934 v << " " << uo.filename << " " << uo.which << " " << from_no.no << "\n";
1936 1935 });
1937   - auto from_page = pages.at(from_no.idx);
  1936 + QPDFPageObjectHelper from_page = pages.at(from_no.idx);
1938 1937 if (!fo[from_no.no].contains(uo_idx)) {
1939 1938 fo[from_no.no][uo_idx] = pdf.copyForeignObject(from_page.getFormXObjectForPage());
1940 1939 }
... ... @@ -2007,19 +2006,6 @@ QPDFJob::handleUnderOverlay(QPDF&amp; pdf)
2007 2006 v << prefix << ": processing underlay/overlay\n";
2008 2007 });
2009 2008  
2010   - auto get_pages = [](std::vector<UnderOverlay>& v,
2011   - std::vector<std::vector<QPDFPageObjectHelper>>& v_out) {
2012   - for (auto const& uo: v) {
2013   - if (uo.pdf) {
2014   - v_out.push_back(QPDFPageDocumentHelper(*(uo.pdf)).getAllPages());
2015   - }
2016   - }
2017   - };
2018   - std::vector<std::vector<QPDFPageObjectHelper>> upages;
2019   - get_pages(m->underlay, upages);
2020   - std::vector<std::vector<QPDFPageObjectHelper>> opages;
2021   - get_pages(m->overlay, opages);
2022   -
2023 2009 std::map<int, std::map<size_t, QPDFObjectHandle>> underlay_fo;
2024 2010 std::map<int, std::map<size_t, QPDFObjectHandle>> overlay_fo;
2025 2011 PageNo dest_page_no;
... ... @@ -2047,14 +2033,7 @@ QPDFJob::handleUnderOverlay(QPDF&amp; pdf)
2047 2033 std::string content;
2048 2034 for (auto& underlay: m->underlay) {
2049 2035 content += doUnderOverlayForPage(
2050   - pdf,
2051   - underlay,
2052   - underlay_pagenos,
2053   - dest_page_no.idx,
2054   - uo_idx,
2055   - underlay_fo,
2056   - upages[uo_idx],
2057   - dest_page);
  2036 + pdf, underlay, underlay_pagenos, dest_page_no, uo_idx, underlay_fo, dest_page);
2058 2037 ++uo_idx;
2059 2038 }
2060 2039 content += dest_page.placeFormXObject(
... ... @@ -2067,14 +2046,7 @@ QPDFJob::handleUnderOverlay(QPDF&amp; pdf)
2067 2046 uo_idx = 0;
2068 2047 for (auto& overlay: m->overlay) {
2069 2048 content += doUnderOverlayForPage(
2070   - pdf,
2071   - overlay,
2072   - overlay_pagenos,
2073   - dest_page_no.idx,
2074   - uo_idx,
2075   - overlay_fo,
2076   - opages[uo_idx],
2077   - dest_page);
  2049 + pdf, overlay, overlay_pagenos, dest_page_no, uo_idx, overlay_fo, dest_page);
2078 2050 ++uo_idx;
2079 2051 }
2080 2052 dest_page.getObjectHandle().replaceKey("/Contents", pdf.newStream(content));
... ...