diff --git a/include/qpdf/QPDFJob.hh b/include/qpdf/QPDFJob.hh index dee75ef1..8dab9f03 100644 --- a/include/qpdf/QPDFJob.hh +++ b/include/qpdf/QPDFJob.hh @@ -443,6 +443,7 @@ class QPDFJob ClosedFileInputSource* cfis{}; std::vector orig_pages; int n_pages; + bool remove_unreferenced{false}; }; class FileStore diff --git a/libqpdf/QPDFJob.cc b/libqpdf/QPDFJob.cc index cb691043..f3ede74c 100644 --- a/libqpdf/QPDFJob.cc +++ b/libqpdf/QPDFJob.cc @@ -2392,6 +2392,11 @@ QPDFJob::FileStore::process_file(std::string const& filename, QPDFJob::InputFile file_spec.qpdf = file_spec.qpdf_p.get(); file_spec.orig_pages = file_spec.qpdf->getAllPages(); file_spec.n_pages = QIntC::to_int(file_spec.orig_pages.size()); + + if (job.m->remove_unreferenced_page_resources != QPDFJob::re_no) { + file_spec.remove_unreferenced = job.shouldRemoveUnreferencedResources(*file_spec.qpdf); + } + if (cis) { cis->stayOpen(false); file_spec.cfis = cis; @@ -2427,6 +2432,9 @@ QPDFJob::handlePageSpecs(QPDF& pdf) auto res = m->file_store.files.insert({m->infilename, &pdf}); res.first->second.orig_pages = pdf.getAllPages(); res.first->second.n_pages = QIntC::to_int(res.first->second.orig_pages.size()); + if (m->remove_unreferenced_page_resources != QPDFJob::re_no) { + res.first->second.remove_unreferenced = shouldRemoveUnreferencedResources(pdf); + } // Parse all page specifications and translate them into lists of actual pages. @@ -2459,23 +2467,6 @@ QPDFJob::handlePageSpecs(QPDF& pdf) } } - std::map remove_unreferenced; - if (m->remove_unreferenced_page_resources != QPDFJob::re_no) { - for (auto const& [filename, file_spec]: m->file_store.files) { - if (file_spec.cfis) { - file_spec.cfis->stayOpen(true); - } - QPDF& other(*file_spec.qpdf); - auto other_uuid = other.getUniqueId(); - if (remove_unreferenced.count(other_uuid) == 0) { - remove_unreferenced[other_uuid] = shouldRemoveUnreferencedResources(other); - } - if (file_spec.cfis) { - file_spec.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. @@ -2560,7 +2551,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 (file_spec.remove_unreferenced) { to_copy.removeUnreferencedResources(); } } diff --git a/qpdf/qtest/qpdf/disable-kfo.out b/qpdf/qtest/qpdf/disable-kfo.out index f8f4622e..f68a2ca2 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 e49e7a12..64a38ef5 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 1964bcdd..f295aee8 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 1964bcdd..f295aee8 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 d11b034b..3319594c 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 a2d67f8d..b34a573b 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 3299416a..92222307 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