Commit 32aa516535792733ae63eec3121b963d31bafb2d
1 parent
e62cf819
Refactor `QPDFJob::doUnderOverlayForPage`: replace `page_idx` with `PageNo`, eli…
…minate redundant variables, and simplify underlay/overlay page handling logic.
Showing
2 changed files
with
8 additions
and
37 deletions
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& 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& 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& 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)); | ... | ... |