From 1f5a7cee8501bef5ac569a145870863961f12fc9 Mon Sep 17 00:00:00 2001 From: m-holger Date: Mon, 15 Sep 2025 17:24:14 +0100 Subject: [PATCH] Refactor `QPDFJob`: move `remove_unreferenced` logic to `Input`, simplify resource removal handling, and cleanup redundant code in `handlePageSpecs`. --- libqpdf/QPDFJob.cc | 27 +++++++++------------------ libqpdf/qpdf/QPDFJob_private.hh | 1 + qpdf/qtest/qpdf/disable-kfo.out | 104 ++++++++++++++++++++++++++++++++++++++++++++++++++++---------------------------------------------------- qpdf/qtest/qpdf/enable-kfo.out | 22 +++++++++++----------- qpdf/qtest/qpdf/kfo-n.out | 18 +++++++++--------- qpdf/qtest/qpdf/kfo-y.out | 18 +++++++++--------- qpdf/qtest/qpdf/uo-6.out | 2 +- qpdf/qtest/qpdf/uo-8.out | 2 +- qpdf/qtest/qpdf/verbose-merge.out | 8 ++++---- 9 files changed, 97 insertions(+), 105 deletions(-) diff --git a/libqpdf/QPDFJob.cc b/libqpdf/QPDFJob.cc index a59bec0..ba89d6e 100644 --- a/libqpdf/QPDFJob.cc +++ b/libqpdf/QPDFJob.cc @@ -2372,6 +2372,11 @@ QPDFJob::Inputs::process(std::string const& filename, QPDFJob::Input& input) input.qpdf = input.qpdf_p.get(); input.orig_pages = input.qpdf->getAllPages(); input.n_pages = QIntC::to_int(input.orig_pages.size()); + + if (job.m->remove_unreferenced_page_resources != QPDFJob::re_no) { + input.remove_unreferenced = job.shouldRemoveUnreferencedResources(*input.qpdf); + } + if (input.cfis) { input.cfis->stayOpen(false); } @@ -2407,6 +2412,9 @@ QPDFJob::handlePageSpecs(QPDF& pdf) in_file.qpdf = &pdf; in_file.orig_pages = pdf.getAllPages(); in_file.n_pages = QIntC::to_int(in_file.orig_pages.size()); + if (m->remove_unreferenced_page_resources != QPDFJob::re_no) { + in_file.remove_unreferenced = shouldRemoveUnreferencedResources(pdf); + } // Parse all page specifications and translate them into lists of actual pages. @@ -2442,23 +2450,6 @@ QPDFJob::handlePageSpecs(QPDF& pdf) } } - std::map remove_unreferenced; - if (m->remove_unreferenced_page_resources != QPDFJob::re_no) { - for (auto const& [filename, input]: m->inputs.files) { - if (input.cfis) { - input.cfis->stayOpen(true); - } - QPDF& other(*input.qpdf); - auto other_uuid = other.getUniqueId(); - if (!remove_unreferenced.contains(other_uuid)) { - remove_unreferenced[other_uuid] = shouldRemoveUnreferencedResources(other); - } - if (input.cfis) { - input.cfis->stayOpen(false); - } - } - } - // Clear all pages out of the primary QPDF's pages tree but leave the objects in place in the // file so they can be re-added without changing their object numbers. This enables other things // in the original file, such as outlines, to continue to work. @@ -2540,7 +2531,7 @@ QPDFJob::handlePageSpecs(QPDF& pdf) to_copy = to_copy.shallowCopyPage(); } else { copied_pages[from_uuid].insert(to_copy_og); - if (remove_unreferenced[from_uuid]) { + if (input.remove_unreferenced) { to_copy.removeUnreferencedResources(); } } diff --git a/libqpdf/qpdf/QPDFJob_private.hh b/libqpdf/qpdf/QPDFJob_private.hh index 9efaa39..b9aacd5 100644 --- a/libqpdf/qpdf/QPDFJob_private.hh +++ b/libqpdf/qpdf/QPDFJob_private.hh @@ -44,6 +44,7 @@ struct QPDFJob::Input ClosedFileInputSource* cfis{}; std::vector orig_pages; int n_pages; + bool remove_unreferenced{false}; }; // All PDF input files for a job. diff --git a/qpdf/qtest/qpdf/disable-kfo.out b/qpdf/qtest/qpdf/disable-kfo.out index f8f4622..f68a2ca 100644 --- a/qpdf/qtest/qpdf/disable-kfo.out +++ b/qpdf/qtest/qpdf/disable-kfo.out @@ -1,157 +1,157 @@ -qpdf: selecting --keep-open-files=n -qpdf: processing 001-kfo.pdf -qpdf: processing 002-kfo.pdf -qpdf: processing 003-kfo.pdf -qpdf: processing 004-kfo.pdf -qpdf: processing 005-kfo.pdf -qpdf: processing 006-kfo.pdf -qpdf: processing 007-kfo.pdf -qpdf: processing 008-kfo.pdf -qpdf: processing 009-kfo.pdf -qpdf: processing 010-kfo.pdf -qpdf: processing 011-kfo.pdf -qpdf: processing 012-kfo.pdf -qpdf: processing 013-kfo.pdf -qpdf: processing 014-kfo.pdf -qpdf: processing 015-kfo.pdf -qpdf: processing 016-kfo.pdf -qpdf: processing 017-kfo.pdf -qpdf: processing 018-kfo.pdf -qpdf: processing 019-kfo.pdf -qpdf: processing 020-kfo.pdf -qpdf: processing 021-kfo.pdf -qpdf: processing 022-kfo.pdf -qpdf: processing 023-kfo.pdf -qpdf: processing 024-kfo.pdf -qpdf: processing 025-kfo.pdf -qpdf: processing 026-kfo.pdf -qpdf: processing 027-kfo.pdf -qpdf: processing 028-kfo.pdf -qpdf: processing 029-kfo.pdf -qpdf: processing 030-kfo.pdf -qpdf: processing 031-kfo.pdf -qpdf: processing 032-kfo.pdf -qpdf: processing 033-kfo.pdf -qpdf: processing 034-kfo.pdf -qpdf: processing 035-kfo.pdf -qpdf: processing 036-kfo.pdf -qpdf: processing 037-kfo.pdf -qpdf: processing 038-kfo.pdf -qpdf: processing 039-kfo.pdf -qpdf: processing 040-kfo.pdf -qpdf: processing 041-kfo.pdf -qpdf: processing 042-kfo.pdf -qpdf: processing 043-kfo.pdf -qpdf: processing 044-kfo.pdf -qpdf: processing 045-kfo.pdf -qpdf: processing 046-kfo.pdf -qpdf: processing 047-kfo.pdf -qpdf: processing 048-kfo.pdf -qpdf: processing 049-kfo.pdf -qpdf: processing 050-kfo.pdf -qpdf: processing 051-kfo.pdf qpdf: empty PDF: checking for shared resources qpdf: no shared resources found +qpdf: selecting --keep-open-files=n +qpdf: processing 001-kfo.pdf qpdf: 001-kfo.pdf: checking for shared resources qpdf: no shared resources found +qpdf: processing 002-kfo.pdf qpdf: 002-kfo.pdf: checking for shared resources qpdf: no shared resources found +qpdf: processing 003-kfo.pdf qpdf: 003-kfo.pdf: checking for shared resources qpdf: no shared resources found +qpdf: processing 004-kfo.pdf qpdf: 004-kfo.pdf: checking for shared resources qpdf: no shared resources found +qpdf: processing 005-kfo.pdf qpdf: 005-kfo.pdf: checking for shared resources qpdf: no shared resources found +qpdf: processing 006-kfo.pdf qpdf: 006-kfo.pdf: checking for shared resources qpdf: no shared resources found +qpdf: processing 007-kfo.pdf qpdf: 007-kfo.pdf: checking for shared resources qpdf: no shared resources found +qpdf: processing 008-kfo.pdf qpdf: 008-kfo.pdf: checking for shared resources qpdf: no shared resources found +qpdf: processing 009-kfo.pdf qpdf: 009-kfo.pdf: checking for shared resources qpdf: no shared resources found +qpdf: processing 010-kfo.pdf qpdf: 010-kfo.pdf: checking for shared resources qpdf: no shared resources found +qpdf: processing 011-kfo.pdf qpdf: 011-kfo.pdf: checking for shared resources qpdf: no shared resources found +qpdf: processing 012-kfo.pdf qpdf: 012-kfo.pdf: checking for shared resources qpdf: no shared resources found +qpdf: processing 013-kfo.pdf qpdf: 013-kfo.pdf: checking for shared resources qpdf: no shared resources found +qpdf: processing 014-kfo.pdf qpdf: 014-kfo.pdf: checking for shared resources qpdf: no shared resources found +qpdf: processing 015-kfo.pdf qpdf: 015-kfo.pdf: checking for shared resources qpdf: no shared resources found +qpdf: processing 016-kfo.pdf qpdf: 016-kfo.pdf: checking for shared resources qpdf: no shared resources found +qpdf: processing 017-kfo.pdf qpdf: 017-kfo.pdf: checking for shared resources qpdf: no shared resources found +qpdf: processing 018-kfo.pdf qpdf: 018-kfo.pdf: checking for shared resources qpdf: no shared resources found +qpdf: processing 019-kfo.pdf qpdf: 019-kfo.pdf: checking for shared resources qpdf: no shared resources found +qpdf: processing 020-kfo.pdf qpdf: 020-kfo.pdf: checking for shared resources qpdf: no shared resources found +qpdf: processing 021-kfo.pdf qpdf: 021-kfo.pdf: checking for shared resources qpdf: no shared resources found +qpdf: processing 022-kfo.pdf qpdf: 022-kfo.pdf: checking for shared resources qpdf: no shared resources found +qpdf: processing 023-kfo.pdf qpdf: 023-kfo.pdf: checking for shared resources qpdf: no shared resources found +qpdf: processing 024-kfo.pdf qpdf: 024-kfo.pdf: checking for shared resources qpdf: no shared resources found +qpdf: processing 025-kfo.pdf qpdf: 025-kfo.pdf: checking for shared resources qpdf: no shared resources found +qpdf: processing 026-kfo.pdf qpdf: 026-kfo.pdf: checking for shared resources qpdf: no shared resources found +qpdf: processing 027-kfo.pdf qpdf: 027-kfo.pdf: checking for shared resources qpdf: no shared resources found +qpdf: processing 028-kfo.pdf qpdf: 028-kfo.pdf: checking for shared resources qpdf: no shared resources found +qpdf: processing 029-kfo.pdf qpdf: 029-kfo.pdf: checking for shared resources qpdf: no shared resources found +qpdf: processing 030-kfo.pdf qpdf: 030-kfo.pdf: checking for shared resources qpdf: no shared resources found +qpdf: processing 031-kfo.pdf qpdf: 031-kfo.pdf: checking for shared resources qpdf: no shared resources found +qpdf: processing 032-kfo.pdf qpdf: 032-kfo.pdf: checking for shared resources qpdf: no shared resources found +qpdf: processing 033-kfo.pdf qpdf: 033-kfo.pdf: checking for shared resources qpdf: no shared resources found +qpdf: processing 034-kfo.pdf qpdf: 034-kfo.pdf: checking for shared resources qpdf: no shared resources found +qpdf: processing 035-kfo.pdf qpdf: 035-kfo.pdf: checking for shared resources qpdf: no shared resources found +qpdf: processing 036-kfo.pdf qpdf: 036-kfo.pdf: checking for shared resources qpdf: no shared resources found +qpdf: processing 037-kfo.pdf qpdf: 037-kfo.pdf: checking for shared resources qpdf: no shared resources found +qpdf: processing 038-kfo.pdf qpdf: 038-kfo.pdf: checking for shared resources qpdf: no shared resources found +qpdf: processing 039-kfo.pdf qpdf: 039-kfo.pdf: checking for shared resources qpdf: no shared resources found +qpdf: processing 040-kfo.pdf qpdf: 040-kfo.pdf: checking for shared resources qpdf: no shared resources found +qpdf: processing 041-kfo.pdf qpdf: 041-kfo.pdf: checking for shared resources qpdf: no shared resources found +qpdf: processing 042-kfo.pdf qpdf: 042-kfo.pdf: checking for shared resources qpdf: no shared resources found +qpdf: processing 043-kfo.pdf qpdf: 043-kfo.pdf: checking for shared resources qpdf: no shared resources found +qpdf: processing 044-kfo.pdf qpdf: 044-kfo.pdf: checking for shared resources qpdf: no shared resources found +qpdf: processing 045-kfo.pdf qpdf: 045-kfo.pdf: checking for shared resources qpdf: no shared resources found +qpdf: processing 046-kfo.pdf qpdf: 046-kfo.pdf: checking for shared resources qpdf: no shared resources found +qpdf: processing 047-kfo.pdf qpdf: 047-kfo.pdf: checking for shared resources qpdf: no shared resources found +qpdf: processing 048-kfo.pdf qpdf: 048-kfo.pdf: checking for shared resources qpdf: no shared resources found +qpdf: processing 049-kfo.pdf qpdf: 049-kfo.pdf: checking for shared resources qpdf: no shared resources found +qpdf: processing 050-kfo.pdf qpdf: 050-kfo.pdf: checking for shared resources qpdf: no shared resources found +qpdf: processing 051-kfo.pdf qpdf: 051-kfo.pdf: checking for shared resources qpdf: no shared resources found qpdf: removing unreferenced pages from primary input diff --git a/qpdf/qtest/qpdf/enable-kfo.out b/qpdf/qtest/qpdf/enable-kfo.out index e49e7a1..64a38ef 100644 --- a/qpdf/qtest/qpdf/enable-kfo.out +++ b/qpdf/qtest/qpdf/enable-kfo.out @@ -1,34 +1,34 @@ -qpdf: selecting --keep-open-files=y -qpdf: processing 010-kfo.pdf -qpdf: processing 011-kfo.pdf -qpdf: processing 012-kfo.pdf -qpdf: processing 013-kfo.pdf -qpdf: processing 014-kfo.pdf -qpdf: processing 015-kfo.pdf -qpdf: processing 016-kfo.pdf -qpdf: processing 017-kfo.pdf -qpdf: processing 018-kfo.pdf -qpdf: processing 019-kfo.pdf qpdf: empty PDF: checking for shared resources qpdf: no shared resources found +qpdf: selecting --keep-open-files=y +qpdf: processing 010-kfo.pdf qpdf: 010-kfo.pdf: checking for shared resources qpdf: no shared resources found +qpdf: processing 011-kfo.pdf qpdf: 011-kfo.pdf: checking for shared resources qpdf: no shared resources found +qpdf: processing 012-kfo.pdf qpdf: 012-kfo.pdf: checking for shared resources qpdf: no shared resources found +qpdf: processing 013-kfo.pdf qpdf: 013-kfo.pdf: checking for shared resources qpdf: no shared resources found +qpdf: processing 014-kfo.pdf qpdf: 014-kfo.pdf: checking for shared resources qpdf: no shared resources found +qpdf: processing 015-kfo.pdf qpdf: 015-kfo.pdf: checking for shared resources qpdf: no shared resources found +qpdf: processing 016-kfo.pdf qpdf: 016-kfo.pdf: checking for shared resources qpdf: no shared resources found +qpdf: processing 017-kfo.pdf qpdf: 017-kfo.pdf: checking for shared resources qpdf: no shared resources found +qpdf: processing 018-kfo.pdf qpdf: 018-kfo.pdf: checking for shared resources qpdf: no shared resources found +qpdf: processing 019-kfo.pdf qpdf: 019-kfo.pdf: checking for shared resources qpdf: no shared resources found qpdf: removing unreferenced pages from primary input diff --git a/qpdf/qtest/qpdf/kfo-n.out b/qpdf/qtest/qpdf/kfo-n.out index 1964bcd..f295aee 100644 --- a/qpdf/qtest/qpdf/kfo-n.out +++ b/qpdf/qtest/qpdf/kfo-n.out @@ -1,30 +1,30 @@ -qpdf: processing 001-kfo.pdf -qpdf: processing 002-kfo.pdf -qpdf: processing 003-kfo.pdf -qpdf: processing 004-kfo.pdf -qpdf: processing 005-kfo.pdf -qpdf: processing 006-kfo.pdf -qpdf: processing 007-kfo.pdf -qpdf: processing 008-kfo.pdf -qpdf: processing 009-kfo.pdf qpdf: empty PDF: checking for shared resources qpdf: no shared resources found +qpdf: processing 001-kfo.pdf qpdf: 001-kfo.pdf: checking for shared resources qpdf: no shared resources found +qpdf: processing 002-kfo.pdf qpdf: 002-kfo.pdf: checking for shared resources qpdf: no shared resources found +qpdf: processing 003-kfo.pdf qpdf: 003-kfo.pdf: checking for shared resources qpdf: no shared resources found +qpdf: processing 004-kfo.pdf qpdf: 004-kfo.pdf: checking for shared resources qpdf: no shared resources found +qpdf: processing 005-kfo.pdf qpdf: 005-kfo.pdf: checking for shared resources qpdf: no shared resources found +qpdf: processing 006-kfo.pdf qpdf: 006-kfo.pdf: checking for shared resources qpdf: no shared resources found +qpdf: processing 007-kfo.pdf qpdf: 007-kfo.pdf: checking for shared resources qpdf: no shared resources found +qpdf: processing 008-kfo.pdf qpdf: 008-kfo.pdf: checking for shared resources qpdf: no shared resources found +qpdf: processing 009-kfo.pdf qpdf: 009-kfo.pdf: checking for shared resources qpdf: no shared resources found qpdf: removing unreferenced pages from primary input diff --git a/qpdf/qtest/qpdf/kfo-y.out b/qpdf/qtest/qpdf/kfo-y.out index 1964bcd..f295aee 100644 --- a/qpdf/qtest/qpdf/kfo-y.out +++ b/qpdf/qtest/qpdf/kfo-y.out @@ -1,30 +1,30 @@ -qpdf: processing 001-kfo.pdf -qpdf: processing 002-kfo.pdf -qpdf: processing 003-kfo.pdf -qpdf: processing 004-kfo.pdf -qpdf: processing 005-kfo.pdf -qpdf: processing 006-kfo.pdf -qpdf: processing 007-kfo.pdf -qpdf: processing 008-kfo.pdf -qpdf: processing 009-kfo.pdf qpdf: empty PDF: checking for shared resources qpdf: no shared resources found +qpdf: processing 001-kfo.pdf qpdf: 001-kfo.pdf: checking for shared resources qpdf: no shared resources found +qpdf: processing 002-kfo.pdf qpdf: 002-kfo.pdf: checking for shared resources qpdf: no shared resources found +qpdf: processing 003-kfo.pdf qpdf: 003-kfo.pdf: checking for shared resources qpdf: no shared resources found +qpdf: processing 004-kfo.pdf qpdf: 004-kfo.pdf: checking for shared resources qpdf: no shared resources found +qpdf: processing 005-kfo.pdf qpdf: 005-kfo.pdf: checking for shared resources qpdf: no shared resources found +qpdf: processing 006-kfo.pdf qpdf: 006-kfo.pdf: checking for shared resources qpdf: no shared resources found +qpdf: processing 007-kfo.pdf qpdf: 007-kfo.pdf: checking for shared resources qpdf: no shared resources found +qpdf: processing 008-kfo.pdf qpdf: 008-kfo.pdf: checking for shared resources qpdf: no shared resources found +qpdf: processing 009-kfo.pdf qpdf: 009-kfo.pdf: checking for shared resources qpdf: no shared resources found qpdf: removing unreferenced pages from primary input diff --git a/qpdf/qtest/qpdf/uo-6.out b/qpdf/qtest/qpdf/uo-6.out index d11b034..3319594 100644 --- a/qpdf/qtest/qpdf/uo-6.out +++ b/qpdf/qtest/qpdf/uo-6.out @@ -1,6 +1,6 @@ -qpdf: selecting --keep-open-files=y qpdf: fxo-red.pdf: checking for shared resources qpdf: no shared resources found +qpdf: selecting --keep-open-files=y qpdf: removing unreferenced pages from primary input qpdf: adding pages from fxo-red.pdf qpdf: processing underlay/overlay diff --git a/qpdf/qtest/qpdf/uo-8.out b/qpdf/qtest/qpdf/uo-8.out index a2d67f8..b34a573 100644 --- a/qpdf/qtest/qpdf/uo-8.out +++ b/qpdf/qtest/qpdf/uo-8.out @@ -1,6 +1,6 @@ -qpdf: selecting --keep-open-files=y qpdf: fxo-red.pdf: checking for shared resources qpdf: no shared resources found +qpdf: selecting --keep-open-files=y qpdf: removing unreferenced pages from primary input qpdf: adding pages from fxo-red.pdf qpdf: processing underlay/overlay diff --git a/qpdf/qtest/qpdf/verbose-merge.out b/qpdf/qtest/qpdf/verbose-merge.out index 3299416..9222230 100644 --- a/qpdf/qtest/qpdf/verbose-merge.out +++ b/qpdf/qtest/qpdf/verbose-merge.out @@ -1,15 +1,15 @@ +qpdf: page-labels-and-outlines.pdf: checking for shared resources +qpdf: no shared resources found qpdf: selecting --keep-open-files=y qpdf: processing ./20-pages.pdf -qpdf: processing 20-pages.pdf -qpdf: processing minimal.pdf qpdf: ./20-pages.pdf: checking for shared resources qpdf: no shared resources found +qpdf: processing 20-pages.pdf qpdf: 20-pages.pdf: checking for shared resources qpdf: no shared resources found +qpdf: processing minimal.pdf qpdf: minimal.pdf: checking for shared resources qpdf: no shared resources found -qpdf: page-labels-and-outlines.pdf: checking for shared resources -qpdf: no shared resources found qpdf: removing unreferenced pages from primary input qpdf: adding pages from page-labels-and-outlines.pdf qpdf: adding pages from 20-pages.pdf -- libgit2 0.21.4