Commit 1f5a7cee8501bef5ac569a145870863961f12fc9

Authored by m-holger
1 parent 7aab94c8

Refactor `QPDFJob`: move `remove_unreferenced` logic to `Input`, simplify resour…

…ce removal handling, and cleanup redundant code in `handlePageSpecs`.
libqpdf/QPDFJob.cc
... ... @@ -2372,6 +2372,11 @@ QPDFJob::Inputs::process(std::string const& filename, QPDFJob::Input& input)
2372 2372 input.qpdf = input.qpdf_p.get();
2373 2373 input.orig_pages = input.qpdf->getAllPages();
2374 2374 input.n_pages = QIntC::to_int(input.orig_pages.size());
  2375 +
  2376 + if (job.m->remove_unreferenced_page_resources != QPDFJob::re_no) {
  2377 + input.remove_unreferenced = job.shouldRemoveUnreferencedResources(*input.qpdf);
  2378 + }
  2379 +
2375 2380 if (input.cfis) {
2376 2381 input.cfis->stayOpen(false);
2377 2382 }
... ... @@ -2407,6 +2412,9 @@ QPDFJob::handlePageSpecs(QPDF& pdf)
2407 2412 in_file.qpdf = &pdf;
2408 2413 in_file.orig_pages = pdf.getAllPages();
2409 2414 in_file.n_pages = QIntC::to_int(in_file.orig_pages.size());
  2415 + if (m->remove_unreferenced_page_resources != QPDFJob::re_no) {
  2416 + in_file.remove_unreferenced = shouldRemoveUnreferencedResources(pdf);
  2417 + }
2410 2418  
2411 2419 // Parse all page specifications and translate them into lists of actual pages.
2412 2420  
... ... @@ -2442,23 +2450,6 @@ QPDFJob::handlePageSpecs(QPDF& pdf)
2442 2450 }
2443 2451 }
2444 2452  
2445   - std::map<unsigned long long, bool> remove_unreferenced;
2446   - if (m->remove_unreferenced_page_resources != QPDFJob::re_no) {
2447   - for (auto const& [filename, input]: m->inputs.files) {
2448   - if (input.cfis) {
2449   - input.cfis->stayOpen(true);
2450   - }
2451   - QPDF& other(*input.qpdf);
2452   - auto other_uuid = other.getUniqueId();
2453   - if (!remove_unreferenced.contains(other_uuid)) {
2454   - remove_unreferenced[other_uuid] = shouldRemoveUnreferencedResources(other);
2455   - }
2456   - if (input.cfis) {
2457   - input.cfis->stayOpen(false);
2458   - }
2459   - }
2460   - }
2461   -
2462 2453 // Clear all pages out of the primary QPDF's pages tree but leave the objects in place in the
2463 2454 // file so they can be re-added without changing their object numbers. This enables other things
2464 2455 // in the original file, such as outlines, to continue to work.
... ... @@ -2540,7 +2531,7 @@ QPDFJob::handlePageSpecs(QPDF&amp; pdf)
2540 2531 to_copy = to_copy.shallowCopyPage();
2541 2532 } else {
2542 2533 copied_pages[from_uuid].insert(to_copy_og);
2543   - if (remove_unreferenced[from_uuid]) {
  2534 + if (input.remove_unreferenced) {
2544 2535 to_copy.removeUnreferencedResources();
2545 2536 }
2546 2537 }
... ...
libqpdf/qpdf/QPDFJob_private.hh
... ... @@ -44,6 +44,7 @@ struct QPDFJob::Input
44 44 ClosedFileInputSource* cfis{};
45 45 std::vector<QPDFObjectHandle> orig_pages;
46 46 int n_pages;
  47 + bool remove_unreferenced{false};
47 48 };
48 49  
49 50 // All PDF input files for a job.
... ...
qpdf/qtest/qpdf/disable-kfo.out
1   -qpdf: selecting --keep-open-files=n
2   -qpdf: processing 001-kfo.pdf
3   -qpdf: processing 002-kfo.pdf
4   -qpdf: processing 003-kfo.pdf
5   -qpdf: processing 004-kfo.pdf
6   -qpdf: processing 005-kfo.pdf
7   -qpdf: processing 006-kfo.pdf
8   -qpdf: processing 007-kfo.pdf
9   -qpdf: processing 008-kfo.pdf
10   -qpdf: processing 009-kfo.pdf
11   -qpdf: processing 010-kfo.pdf
12   -qpdf: processing 011-kfo.pdf
13   -qpdf: processing 012-kfo.pdf
14   -qpdf: processing 013-kfo.pdf
15   -qpdf: processing 014-kfo.pdf
16   -qpdf: processing 015-kfo.pdf
17   -qpdf: processing 016-kfo.pdf
18   -qpdf: processing 017-kfo.pdf
19   -qpdf: processing 018-kfo.pdf
20   -qpdf: processing 019-kfo.pdf
21   -qpdf: processing 020-kfo.pdf
22   -qpdf: processing 021-kfo.pdf
23   -qpdf: processing 022-kfo.pdf
24   -qpdf: processing 023-kfo.pdf
25   -qpdf: processing 024-kfo.pdf
26   -qpdf: processing 025-kfo.pdf
27   -qpdf: processing 026-kfo.pdf
28   -qpdf: processing 027-kfo.pdf
29   -qpdf: processing 028-kfo.pdf
30   -qpdf: processing 029-kfo.pdf
31   -qpdf: processing 030-kfo.pdf
32   -qpdf: processing 031-kfo.pdf
33   -qpdf: processing 032-kfo.pdf
34   -qpdf: processing 033-kfo.pdf
35   -qpdf: processing 034-kfo.pdf
36   -qpdf: processing 035-kfo.pdf
37   -qpdf: processing 036-kfo.pdf
38   -qpdf: processing 037-kfo.pdf
39   -qpdf: processing 038-kfo.pdf
40   -qpdf: processing 039-kfo.pdf
41   -qpdf: processing 040-kfo.pdf
42   -qpdf: processing 041-kfo.pdf
43   -qpdf: processing 042-kfo.pdf
44   -qpdf: processing 043-kfo.pdf
45   -qpdf: processing 044-kfo.pdf
46   -qpdf: processing 045-kfo.pdf
47   -qpdf: processing 046-kfo.pdf
48   -qpdf: processing 047-kfo.pdf
49   -qpdf: processing 048-kfo.pdf
50   -qpdf: processing 049-kfo.pdf
51   -qpdf: processing 050-kfo.pdf
52   -qpdf: processing 051-kfo.pdf
53 1 qpdf: empty PDF: checking for shared resources
54 2 qpdf: no shared resources found
  3 +qpdf: selecting --keep-open-files=n
  4 +qpdf: processing 001-kfo.pdf
55 5 qpdf: 001-kfo.pdf: checking for shared resources
56 6 qpdf: no shared resources found
  7 +qpdf: processing 002-kfo.pdf
57 8 qpdf: 002-kfo.pdf: checking for shared resources
58 9 qpdf: no shared resources found
  10 +qpdf: processing 003-kfo.pdf
59 11 qpdf: 003-kfo.pdf: checking for shared resources
60 12 qpdf: no shared resources found
  13 +qpdf: processing 004-kfo.pdf
61 14 qpdf: 004-kfo.pdf: checking for shared resources
62 15 qpdf: no shared resources found
  16 +qpdf: processing 005-kfo.pdf
63 17 qpdf: 005-kfo.pdf: checking for shared resources
64 18 qpdf: no shared resources found
  19 +qpdf: processing 006-kfo.pdf
65 20 qpdf: 006-kfo.pdf: checking for shared resources
66 21 qpdf: no shared resources found
  22 +qpdf: processing 007-kfo.pdf
67 23 qpdf: 007-kfo.pdf: checking for shared resources
68 24 qpdf: no shared resources found
  25 +qpdf: processing 008-kfo.pdf
69 26 qpdf: 008-kfo.pdf: checking for shared resources
70 27 qpdf: no shared resources found
  28 +qpdf: processing 009-kfo.pdf
71 29 qpdf: 009-kfo.pdf: checking for shared resources
72 30 qpdf: no shared resources found
  31 +qpdf: processing 010-kfo.pdf
73 32 qpdf: 010-kfo.pdf: checking for shared resources
74 33 qpdf: no shared resources found
  34 +qpdf: processing 011-kfo.pdf
75 35 qpdf: 011-kfo.pdf: checking for shared resources
76 36 qpdf: no shared resources found
  37 +qpdf: processing 012-kfo.pdf
77 38 qpdf: 012-kfo.pdf: checking for shared resources
78 39 qpdf: no shared resources found
  40 +qpdf: processing 013-kfo.pdf
79 41 qpdf: 013-kfo.pdf: checking for shared resources
80 42 qpdf: no shared resources found
  43 +qpdf: processing 014-kfo.pdf
81 44 qpdf: 014-kfo.pdf: checking for shared resources
82 45 qpdf: no shared resources found
  46 +qpdf: processing 015-kfo.pdf
83 47 qpdf: 015-kfo.pdf: checking for shared resources
84 48 qpdf: no shared resources found
  49 +qpdf: processing 016-kfo.pdf
85 50 qpdf: 016-kfo.pdf: checking for shared resources
86 51 qpdf: no shared resources found
  52 +qpdf: processing 017-kfo.pdf
87 53 qpdf: 017-kfo.pdf: checking for shared resources
88 54 qpdf: no shared resources found
  55 +qpdf: processing 018-kfo.pdf
89 56 qpdf: 018-kfo.pdf: checking for shared resources
90 57 qpdf: no shared resources found
  58 +qpdf: processing 019-kfo.pdf
91 59 qpdf: 019-kfo.pdf: checking for shared resources
92 60 qpdf: no shared resources found
  61 +qpdf: processing 020-kfo.pdf
93 62 qpdf: 020-kfo.pdf: checking for shared resources
94 63 qpdf: no shared resources found
  64 +qpdf: processing 021-kfo.pdf
95 65 qpdf: 021-kfo.pdf: checking for shared resources
96 66 qpdf: no shared resources found
  67 +qpdf: processing 022-kfo.pdf
97 68 qpdf: 022-kfo.pdf: checking for shared resources
98 69 qpdf: no shared resources found
  70 +qpdf: processing 023-kfo.pdf
99 71 qpdf: 023-kfo.pdf: checking for shared resources
100 72 qpdf: no shared resources found
  73 +qpdf: processing 024-kfo.pdf
101 74 qpdf: 024-kfo.pdf: checking for shared resources
102 75 qpdf: no shared resources found
  76 +qpdf: processing 025-kfo.pdf
103 77 qpdf: 025-kfo.pdf: checking for shared resources
104 78 qpdf: no shared resources found
  79 +qpdf: processing 026-kfo.pdf
105 80 qpdf: 026-kfo.pdf: checking for shared resources
106 81 qpdf: no shared resources found
  82 +qpdf: processing 027-kfo.pdf
107 83 qpdf: 027-kfo.pdf: checking for shared resources
108 84 qpdf: no shared resources found
  85 +qpdf: processing 028-kfo.pdf
109 86 qpdf: 028-kfo.pdf: checking for shared resources
110 87 qpdf: no shared resources found
  88 +qpdf: processing 029-kfo.pdf
111 89 qpdf: 029-kfo.pdf: checking for shared resources
112 90 qpdf: no shared resources found
  91 +qpdf: processing 030-kfo.pdf
113 92 qpdf: 030-kfo.pdf: checking for shared resources
114 93 qpdf: no shared resources found
  94 +qpdf: processing 031-kfo.pdf
115 95 qpdf: 031-kfo.pdf: checking for shared resources
116 96 qpdf: no shared resources found
  97 +qpdf: processing 032-kfo.pdf
117 98 qpdf: 032-kfo.pdf: checking for shared resources
118 99 qpdf: no shared resources found
  100 +qpdf: processing 033-kfo.pdf
119 101 qpdf: 033-kfo.pdf: checking for shared resources
120 102 qpdf: no shared resources found
  103 +qpdf: processing 034-kfo.pdf
121 104 qpdf: 034-kfo.pdf: checking for shared resources
122 105 qpdf: no shared resources found
  106 +qpdf: processing 035-kfo.pdf
123 107 qpdf: 035-kfo.pdf: checking for shared resources
124 108 qpdf: no shared resources found
  109 +qpdf: processing 036-kfo.pdf
125 110 qpdf: 036-kfo.pdf: checking for shared resources
126 111 qpdf: no shared resources found
  112 +qpdf: processing 037-kfo.pdf
127 113 qpdf: 037-kfo.pdf: checking for shared resources
128 114 qpdf: no shared resources found
  115 +qpdf: processing 038-kfo.pdf
129 116 qpdf: 038-kfo.pdf: checking for shared resources
130 117 qpdf: no shared resources found
  118 +qpdf: processing 039-kfo.pdf
131 119 qpdf: 039-kfo.pdf: checking for shared resources
132 120 qpdf: no shared resources found
  121 +qpdf: processing 040-kfo.pdf
133 122 qpdf: 040-kfo.pdf: checking for shared resources
134 123 qpdf: no shared resources found
  124 +qpdf: processing 041-kfo.pdf
135 125 qpdf: 041-kfo.pdf: checking for shared resources
136 126 qpdf: no shared resources found
  127 +qpdf: processing 042-kfo.pdf
137 128 qpdf: 042-kfo.pdf: checking for shared resources
138 129 qpdf: no shared resources found
  130 +qpdf: processing 043-kfo.pdf
139 131 qpdf: 043-kfo.pdf: checking for shared resources
140 132 qpdf: no shared resources found
  133 +qpdf: processing 044-kfo.pdf
141 134 qpdf: 044-kfo.pdf: checking for shared resources
142 135 qpdf: no shared resources found
  136 +qpdf: processing 045-kfo.pdf
143 137 qpdf: 045-kfo.pdf: checking for shared resources
144 138 qpdf: no shared resources found
  139 +qpdf: processing 046-kfo.pdf
145 140 qpdf: 046-kfo.pdf: checking for shared resources
146 141 qpdf: no shared resources found
  142 +qpdf: processing 047-kfo.pdf
147 143 qpdf: 047-kfo.pdf: checking for shared resources
148 144 qpdf: no shared resources found
  145 +qpdf: processing 048-kfo.pdf
149 146 qpdf: 048-kfo.pdf: checking for shared resources
150 147 qpdf: no shared resources found
  148 +qpdf: processing 049-kfo.pdf
151 149 qpdf: 049-kfo.pdf: checking for shared resources
152 150 qpdf: no shared resources found
  151 +qpdf: processing 050-kfo.pdf
153 152 qpdf: 050-kfo.pdf: checking for shared resources
154 153 qpdf: no shared resources found
  154 +qpdf: processing 051-kfo.pdf
155 155 qpdf: 051-kfo.pdf: checking for shared resources
156 156 qpdf: no shared resources found
157 157 qpdf: removing unreferenced pages from primary input
... ...
qpdf/qtest/qpdf/enable-kfo.out
1   -qpdf: selecting --keep-open-files=y
2   -qpdf: processing 010-kfo.pdf
3   -qpdf: processing 011-kfo.pdf
4   -qpdf: processing 012-kfo.pdf
5   -qpdf: processing 013-kfo.pdf
6   -qpdf: processing 014-kfo.pdf
7   -qpdf: processing 015-kfo.pdf
8   -qpdf: processing 016-kfo.pdf
9   -qpdf: processing 017-kfo.pdf
10   -qpdf: processing 018-kfo.pdf
11   -qpdf: processing 019-kfo.pdf
12 1 qpdf: empty PDF: checking for shared resources
13 2 qpdf: no shared resources found
  3 +qpdf: selecting --keep-open-files=y
  4 +qpdf: processing 010-kfo.pdf
14 5 qpdf: 010-kfo.pdf: checking for shared resources
15 6 qpdf: no shared resources found
  7 +qpdf: processing 011-kfo.pdf
16 8 qpdf: 011-kfo.pdf: checking for shared resources
17 9 qpdf: no shared resources found
  10 +qpdf: processing 012-kfo.pdf
18 11 qpdf: 012-kfo.pdf: checking for shared resources
19 12 qpdf: no shared resources found
  13 +qpdf: processing 013-kfo.pdf
20 14 qpdf: 013-kfo.pdf: checking for shared resources
21 15 qpdf: no shared resources found
  16 +qpdf: processing 014-kfo.pdf
22 17 qpdf: 014-kfo.pdf: checking for shared resources
23 18 qpdf: no shared resources found
  19 +qpdf: processing 015-kfo.pdf
24 20 qpdf: 015-kfo.pdf: checking for shared resources
25 21 qpdf: no shared resources found
  22 +qpdf: processing 016-kfo.pdf
26 23 qpdf: 016-kfo.pdf: checking for shared resources
27 24 qpdf: no shared resources found
  25 +qpdf: processing 017-kfo.pdf
28 26 qpdf: 017-kfo.pdf: checking for shared resources
29 27 qpdf: no shared resources found
  28 +qpdf: processing 018-kfo.pdf
30 29 qpdf: 018-kfo.pdf: checking for shared resources
31 30 qpdf: no shared resources found
  31 +qpdf: processing 019-kfo.pdf
32 32 qpdf: 019-kfo.pdf: checking for shared resources
33 33 qpdf: no shared resources found
34 34 qpdf: removing unreferenced pages from primary input
... ...
qpdf/qtest/qpdf/kfo-n.out
1   -qpdf: processing 001-kfo.pdf
2   -qpdf: processing 002-kfo.pdf
3   -qpdf: processing 003-kfo.pdf
4   -qpdf: processing 004-kfo.pdf
5   -qpdf: processing 005-kfo.pdf
6   -qpdf: processing 006-kfo.pdf
7   -qpdf: processing 007-kfo.pdf
8   -qpdf: processing 008-kfo.pdf
9   -qpdf: processing 009-kfo.pdf
10 1 qpdf: empty PDF: checking for shared resources
11 2 qpdf: no shared resources found
  3 +qpdf: processing 001-kfo.pdf
12 4 qpdf: 001-kfo.pdf: checking for shared resources
13 5 qpdf: no shared resources found
  6 +qpdf: processing 002-kfo.pdf
14 7 qpdf: 002-kfo.pdf: checking for shared resources
15 8 qpdf: no shared resources found
  9 +qpdf: processing 003-kfo.pdf
16 10 qpdf: 003-kfo.pdf: checking for shared resources
17 11 qpdf: no shared resources found
  12 +qpdf: processing 004-kfo.pdf
18 13 qpdf: 004-kfo.pdf: checking for shared resources
19 14 qpdf: no shared resources found
  15 +qpdf: processing 005-kfo.pdf
20 16 qpdf: 005-kfo.pdf: checking for shared resources
21 17 qpdf: no shared resources found
  18 +qpdf: processing 006-kfo.pdf
22 19 qpdf: 006-kfo.pdf: checking for shared resources
23 20 qpdf: no shared resources found
  21 +qpdf: processing 007-kfo.pdf
24 22 qpdf: 007-kfo.pdf: checking for shared resources
25 23 qpdf: no shared resources found
  24 +qpdf: processing 008-kfo.pdf
26 25 qpdf: 008-kfo.pdf: checking for shared resources
27 26 qpdf: no shared resources found
  27 +qpdf: processing 009-kfo.pdf
28 28 qpdf: 009-kfo.pdf: checking for shared resources
29 29 qpdf: no shared resources found
30 30 qpdf: removing unreferenced pages from primary input
... ...
qpdf/qtest/qpdf/kfo-y.out
1   -qpdf: processing 001-kfo.pdf
2   -qpdf: processing 002-kfo.pdf
3   -qpdf: processing 003-kfo.pdf
4   -qpdf: processing 004-kfo.pdf
5   -qpdf: processing 005-kfo.pdf
6   -qpdf: processing 006-kfo.pdf
7   -qpdf: processing 007-kfo.pdf
8   -qpdf: processing 008-kfo.pdf
9   -qpdf: processing 009-kfo.pdf
10 1 qpdf: empty PDF: checking for shared resources
11 2 qpdf: no shared resources found
  3 +qpdf: processing 001-kfo.pdf
12 4 qpdf: 001-kfo.pdf: checking for shared resources
13 5 qpdf: no shared resources found
  6 +qpdf: processing 002-kfo.pdf
14 7 qpdf: 002-kfo.pdf: checking for shared resources
15 8 qpdf: no shared resources found
  9 +qpdf: processing 003-kfo.pdf
16 10 qpdf: 003-kfo.pdf: checking for shared resources
17 11 qpdf: no shared resources found
  12 +qpdf: processing 004-kfo.pdf
18 13 qpdf: 004-kfo.pdf: checking for shared resources
19 14 qpdf: no shared resources found
  15 +qpdf: processing 005-kfo.pdf
20 16 qpdf: 005-kfo.pdf: checking for shared resources
21 17 qpdf: no shared resources found
  18 +qpdf: processing 006-kfo.pdf
22 19 qpdf: 006-kfo.pdf: checking for shared resources
23 20 qpdf: no shared resources found
  21 +qpdf: processing 007-kfo.pdf
24 22 qpdf: 007-kfo.pdf: checking for shared resources
25 23 qpdf: no shared resources found
  24 +qpdf: processing 008-kfo.pdf
26 25 qpdf: 008-kfo.pdf: checking for shared resources
27 26 qpdf: no shared resources found
  27 +qpdf: processing 009-kfo.pdf
28 28 qpdf: 009-kfo.pdf: checking for shared resources
29 29 qpdf: no shared resources found
30 30 qpdf: removing unreferenced pages from primary input
... ...
qpdf/qtest/qpdf/uo-6.out
1   -qpdf: selecting --keep-open-files=y
2 1 qpdf: fxo-red.pdf: checking for shared resources
3 2 qpdf: no shared resources found
  3 +qpdf: selecting --keep-open-files=y
4 4 qpdf: removing unreferenced pages from primary input
5 5 qpdf: adding pages from fxo-red.pdf
6 6 qpdf: processing underlay/overlay
... ...
qpdf/qtest/qpdf/uo-8.out
1   -qpdf: selecting --keep-open-files=y
2 1 qpdf: fxo-red.pdf: checking for shared resources
3 2 qpdf: no shared resources found
  3 +qpdf: selecting --keep-open-files=y
4 4 qpdf: removing unreferenced pages from primary input
5 5 qpdf: adding pages from fxo-red.pdf
6 6 qpdf: processing underlay/overlay
... ...
qpdf/qtest/qpdf/verbose-merge.out
  1 +qpdf: page-labels-and-outlines.pdf: checking for shared resources
  2 +qpdf: no shared resources found
1 3 qpdf: selecting --keep-open-files=y
2 4 qpdf: processing ./20-pages.pdf
3   -qpdf: processing 20-pages.pdf
4   -qpdf: processing minimal.pdf
5 5 qpdf: ./20-pages.pdf: checking for shared resources
6 6 qpdf: no shared resources found
  7 +qpdf: processing 20-pages.pdf
7 8 qpdf: 20-pages.pdf: checking for shared resources
8 9 qpdf: no shared resources found
  10 +qpdf: processing minimal.pdf
9 11 qpdf: minimal.pdf: checking for shared resources
10 12 qpdf: no shared resources found
11   -qpdf: page-labels-and-outlines.pdf: checking for shared resources
12   -qpdf: no shared resources found
13 13 qpdf: removing unreferenced pages from primary input
14 14 qpdf: adding pages from page-labels-and-outlines.pdf
15 15 qpdf: adding pages from 20-pages.pdf
... ...