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,10 +478,9 @@ class QPDFJob | ||
| 478 | QPDF& pdf, | 478 | QPDF& pdf, |
| 479 | UnderOverlay& uo, | 479 | UnderOverlay& uo, |
| 480 | std::map<int, std::map<size_t, std::vector<int>>>& pagenos, | 480 | std::map<int, std::map<size_t, std::vector<int>>>& pagenos, |
| 481 | - size_t page_idx, | 481 | + PageNo const& page_idx, |
| 482 | size_t uo_idx, | 482 | size_t uo_idx, |
| 483 | std::map<int, std::map<size_t, QPDFObjectHandle>>& fo, | 483 | std::map<int, std::map<size_t, QPDFObjectHandle>>& fo, |
| 484 | - std::vector<QPDFPageObjectHelper>& pages, | ||
| 485 | QPDFPageObjectHelper& dest_page); | 484 | QPDFPageObjectHelper& dest_page); |
| 486 | void validateUnderOverlay(QPDF& pdf, UnderOverlay* uo); | 485 | void validateUnderOverlay(QPDF& pdf, UnderOverlay* uo); |
| 487 | void handleTransformations(QPDF& pdf); | 486 | void handleTransformations(QPDF& pdf); |
libqpdf/QPDFJob.cc
| @@ -1915,26 +1915,25 @@ QPDFJob::doUnderOverlayForPage( | @@ -1915,26 +1915,25 @@ QPDFJob::doUnderOverlayForPage( | ||
| 1915 | QPDF& pdf, | 1915 | QPDF& pdf, |
| 1916 | UnderOverlay& uo, | 1916 | UnderOverlay& uo, |
| 1917 | std::map<int, std::map<size_t, std::vector<int>>>& pagenos, | 1917 | std::map<int, std::map<size_t, std::vector<int>>>& pagenos, |
| 1918 | - size_t page_idx, | 1918 | + PageNo const& pageno, |
| 1919 | size_t uo_idx, | 1919 | size_t uo_idx, |
| 1920 | std::map<int, std::map<size_t, QPDFObjectHandle>>& fo, | 1920 | std::map<int, std::map<size_t, QPDFObjectHandle>>& fo, |
| 1921 | - std::vector<QPDFPageObjectHelper>& pages, | ||
| 1922 | QPDFPageObjectHelper& dest_page) | 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 | return ""; | 1924 | return ""; |
| 1927 | } | 1925 | } |
| 1928 | auto& dest_afdh = dest_page.qpdf()->acroform(); | 1926 | auto& dest_afdh = dest_page.qpdf()->acroform(); |
| 1929 | 1927 | ||
| 1928 | + auto const& pages = uo.pdf->getAllPages(); | ||
| 1930 | std::string content; | 1929 | std::string content; |
| 1931 | int min_suffix = 1; | 1930 | int min_suffix = 1; |
| 1932 | QPDFObjectHandle resources = dest_page.getAttribute("/Resources", true); | 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 | doIfVerbose([&](Pipeline& v, std::string const& prefix) { | 1933 | doIfVerbose([&](Pipeline& v, std::string const& prefix) { |
| 1935 | v << " " << uo.filename << " " << uo.which << " " << from_no.no << "\n"; | 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 | if (!fo[from_no.no].contains(uo_idx)) { | 1937 | if (!fo[from_no.no].contains(uo_idx)) { |
| 1939 | fo[from_no.no][uo_idx] = pdf.copyForeignObject(from_page.getFormXObjectForPage()); | 1938 | fo[from_no.no][uo_idx] = pdf.copyForeignObject(from_page.getFormXObjectForPage()); |
| 1940 | } | 1939 | } |
| @@ -2007,19 +2006,6 @@ QPDFJob::handleUnderOverlay(QPDF& pdf) | @@ -2007,19 +2006,6 @@ QPDFJob::handleUnderOverlay(QPDF& pdf) | ||
| 2007 | v << prefix << ": processing underlay/overlay\n"; | 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 | std::map<int, std::map<size_t, QPDFObjectHandle>> underlay_fo; | 2009 | std::map<int, std::map<size_t, QPDFObjectHandle>> underlay_fo; |
| 2024 | std::map<int, std::map<size_t, QPDFObjectHandle>> overlay_fo; | 2010 | std::map<int, std::map<size_t, QPDFObjectHandle>> overlay_fo; |
| 2025 | PageNo dest_page_no; | 2011 | PageNo dest_page_no; |
| @@ -2047,14 +2033,7 @@ QPDFJob::handleUnderOverlay(QPDF& pdf) | @@ -2047,14 +2033,7 @@ QPDFJob::handleUnderOverlay(QPDF& pdf) | ||
| 2047 | std::string content; | 2033 | std::string content; |
| 2048 | for (auto& underlay: m->underlay) { | 2034 | for (auto& underlay: m->underlay) { |
| 2049 | content += doUnderOverlayForPage( | 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 | ++uo_idx; | 2037 | ++uo_idx; |
| 2059 | } | 2038 | } |
| 2060 | content += dest_page.placeFormXObject( | 2039 | content += dest_page.placeFormXObject( |
| @@ -2067,14 +2046,7 @@ QPDFJob::handleUnderOverlay(QPDF& pdf) | @@ -2067,14 +2046,7 @@ QPDFJob::handleUnderOverlay(QPDF& pdf) | ||
| 2067 | uo_idx = 0; | 2046 | uo_idx = 0; |
| 2068 | for (auto& overlay: m->overlay) { | 2047 | for (auto& overlay: m->overlay) { |
| 2069 | content += doUnderOverlayForPage( | 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 | ++uo_idx; | 2050 | ++uo_idx; |
| 2079 | } | 2051 | } |
| 2080 | dest_page.getObjectHandle().replaceKey("/Contents", pdf.newStream(content)); | 2052 | dest_page.getObjectHandle().replaceKey("/Contents", pdf.newStream(content)); |