Commit e50d5201dfce53158ba811865e99654054f0c872

Authored by Jay Berkenbilt
1 parent 011695df

Add --keep-files-open-threshold (fixes #288)

ChangeLog
1 2019-04-20 Jay Berkenbilt <ejb@ql.org> 1 2019-04-20 Jay Berkenbilt <ejb@ql.org>
2 2
  3 + * Add parameter --keep-files-open-threshold to override the
  4 + maximum number of files that qpdf will allow to be kept open at
  5 + once. Fixes #288.
  6 +
3 * Handle Unicode characters in filenames. The changes to support 7 * Handle Unicode characters in filenames. The changes to support
4 Unicode on the CLI in Windows broke Unicode filenames. Fixes #298. 8 Unicode on the CLI in Windows broke Unicode filenames. Fixes #298.
5 9
manual/qpdf-manual.xml
@@ -652,6 +652,19 @@ make @@ -652,6 +652,19 @@ make
652 more than the OS limit's number of files from a script and are 652 more than the OS limit's number of files from a script and are
653 not worried about a few seconds additional processing time, 653 not worried about a few seconds additional processing time,
654 you may want to specify <option>--keep-files-open=n</option>. 654 you may want to specify <option>--keep-files-open=n</option>.
  655 + The threshold for switching may be changed from the default
  656 + 200 with the <option>--keep-files-open-threshold</option>
  657 + option.
  658 + </para>
  659 + </listitem>
  660 + </varlistentry>
  661 + <varlistentry>
  662 + <term><option>--keep-files-open-threshold=<replaceable>count</replaceable></option></term>
  663 + <listitem>
  664 + <para>
  665 + If specified, overrides the default value of 200 used as the
  666 + threshold for qpdf deciding whether or not to keep files open.
  667 + See <option>--keep-files-open</option> for details.
655 </para> 668 </para>
656 </listitem> 669 </listitem>
657 </varlistentry> 670 </varlistentry>
qpdf/qpdf.cc
@@ -134,6 +134,7 @@ struct Options @@ -134,6 +134,7 @@ struct Options
134 preserve_unreferenced_page_resources(false), 134 preserve_unreferenced_page_resources(false),
135 keep_files_open(true), 135 keep_files_open(true),
136 keep_files_open_set(false), 136 keep_files_open_set(false),
  137 + keep_files_open_threshold(200), // default known in help and docs
137 newline_before_endstream(false), 138 newline_before_endstream(false),
138 coalesce_contents(false), 139 coalesce_contents(false),
139 flatten_annotations(false), 140 flatten_annotations(false),
@@ -225,6 +226,7 @@ struct Options @@ -225,6 +226,7 @@ struct Options
225 bool preserve_unreferenced_page_resources; 226 bool preserve_unreferenced_page_resources;
226 bool keep_files_open; 227 bool keep_files_open;
227 bool keep_files_open_set; 228 bool keep_files_open_set;
  229 + size_t keep_files_open_threshold;
228 bool newline_before_endstream; 230 bool newline_before_endstream;
229 std::string linearize_pass1; 231 std::string linearize_pass1;
230 bool coalesce_contents; 232 bool coalesce_contents;
@@ -634,6 +636,7 @@ class ArgParser @@ -634,6 +636,7 @@ class ArgParser
634 void argPreserveUnreferenced(); 636 void argPreserveUnreferenced();
635 void argPreserveUnreferencedResources(); 637 void argPreserveUnreferencedResources();
636 void argKeepFilesOpen(char* parameter); 638 void argKeepFilesOpen(char* parameter);
  639 + void argKeepFilesOpenThreshold(char* parameter);
637 void argNewlineBeforeEndstream(); 640 void argNewlineBeforeEndstream();
638 void argLinearizePass1(char* parameter); 641 void argLinearizePass1(char* parameter);
639 void argCoalesceContents(); 642 void argCoalesceContents();
@@ -857,6 +860,8 @@ ArgParser::initOptionTable() @@ -857,6 +860,8 @@ ArgParser::initOptionTable()
857 &ArgParser::argPreserveUnreferencedResources); 860 &ArgParser::argPreserveUnreferencedResources);
858 (*t)["keep-files-open"] = oe_requiredChoices( 861 (*t)["keep-files-open"] = oe_requiredChoices(
859 &ArgParser::argKeepFilesOpen, yn); 862 &ArgParser::argKeepFilesOpen, yn);
  863 + (*t)["keep-files-open-threshold"] = oe_requiredParameter(
  864 + &ArgParser::argKeepFilesOpenThreshold, "count");
860 (*t)["newline-before-endstream"] = oe_bare( 865 (*t)["newline-before-endstream"] = oe_bare(
861 &ArgParser::argNewlineBeforeEndstream); 866 &ArgParser::argNewlineBeforeEndstream);
862 (*t)["linearize-pass1"] = oe_requiredParameter( 867 (*t)["linearize-pass1"] = oe_requiredParameter(
@@ -1209,6 +1214,7 @@ ArgParser::argHelp() @@ -1209,6 +1214,7 @@ ArgParser::argHelp()
1209 << "starting point, but its pages are replaced with pages as specified.\n" 1214 << "starting point, but its pages are replaced with pages as specified.\n"
1210 << "\n" 1215 << "\n"
1211 << "--keep-files-open=[yn]\n" 1216 << "--keep-files-open=[yn]\n"
  1217 + << "--keep-files-threshold=count\n"
1212 << "--pages file [ --password=password ] [ page-range ] ... --\n" 1218 << "--pages file [ --password=password ] [ page-range ] ... --\n"
1213 << "\n" 1219 << "\n"
1214 << "For each file that pages should be taken from, specify the file, a\n" 1220 << "For each file that pages should be taken from, specify the file, a\n"
@@ -1227,7 +1233,8 @@ ArgParser::argHelp() @@ -1227,7 +1233,8 @@ ArgParser::argHelp()
1227 << "files will be kept open at the same time. This behavior can be overridden\n" 1233 << "files will be kept open at the same time. This behavior can be overridden\n"
1228 << "by specifying --keep-files-open=[yn]. Closing and opening files can have\n" 1234 << "by specifying --keep-files-open=[yn]. Closing and opening files can have\n"
1229 << "very high overhead on certain file systems, especially networked file\n" 1235 << "very high overhead on certain file systems, especially networked file\n"
1230 - << "systems.\n" 1236 + << "systems. The threshold of 200 can be modified with\n"
  1237 + << "--keep-files-open-threshold\n"
1231 << "\n" 1238 << "\n"
1232 << "The page range is a set of numbers separated by commas, ranges of\n" 1239 << "The page range is a set of numbers separated by commas, ranges of\n"
1233 << "numbers separated dashes, or combinations of those. The character\n" 1240 << "numbers separated dashes, or combinations of those. The character\n"
@@ -1782,6 +1789,13 @@ ArgParser::argKeepFilesOpen(char* parameter) @@ -1782,6 +1789,13 @@ ArgParser::argKeepFilesOpen(char* parameter)
1782 } 1789 }
1783 1790
1784 void 1791 void
  1792 +ArgParser::argKeepFilesOpenThreshold(char* parameter)
  1793 +{
  1794 + o.keep_files_open_threshold =
  1795 + static_cast<size_t>(QUtil::string_to_int(parameter));
  1796 +}
  1797 +
  1798 +void
1785 ArgParser::argNewlineBeforeEndstream() 1799 ArgParser::argNewlineBeforeEndstream()
1786 { 1800 {
1787 o.newline_before_endstream = true; 1801 o.newline_before_endstream = true;
@@ -4352,9 +4366,7 @@ static void handle_page_specs(QPDF&amp; pdf, Options&amp; o) @@ -4352,9 +4366,7 @@ static void handle_page_specs(QPDF&amp; pdf, Options&amp; o)
4352 PageSpec& page_spec = *iter; 4366 PageSpec& page_spec = *iter;
4353 filenames.insert(page_spec.filename); 4367 filenames.insert(page_spec.filename);
4354 } 4368 }
4355 - // NOTE: The number 200 for this threshold is in the help  
4356 - // message and manual and is baked into the test suite.  
4357 - if (filenames.size() > 200) 4369 + if (filenames.size() > o.keep_files_open_threshold)
4358 { 4370 {
4359 QTC::TC("qpdf", "qpdf disable keep files open"); 4371 QTC::TC("qpdf", "qpdf disable keep files open");
4360 if (o.verbose) 4372 if (o.verbose)
qpdf/qtest/qpdf.test
@@ -1685,7 +1685,7 @@ $n_tests += 4; @@ -1685,7 +1685,7 @@ $n_tests += 4;
1685 binmode F; 1685 binmode F;
1686 my $content = <F>; 1686 my $content = <F>;
1687 close(F); 1687 close(F);
1688 - for (my $i = 1; $i <= 201; ++$i) 1688 + for (my $i = 1; $i <= 51; ++$i)
1689 { 1689 {
1690 open(F, sprintf(">%03d-kfo.pdf", $i)) or die; 1690 open(F, sprintf(">%03d-kfo.pdf", $i)) or die;
1691 binmode F; 1691 binmode F;
@@ -1693,16 +1693,17 @@ $n_tests += 4; @@ -1693,16 +1693,17 @@ $n_tests += 4;
1693 close(F); 1693 close(F);
1694 } 1694 }
1695 } 1695 }
1696 -$td->runtest("disable keep files open", 1696 +$td->runtest("automatic disable keep files open",
1697 {$td->COMMAND => 1697 {$td->COMMAND =>
1698 "qpdf --verbose --static-id --empty" . 1698 "qpdf --verbose --static-id --empty" .
  1699 + " --keep-files-open-threshold=50" .
1699 " --pages *kfo.pdf -- a.pdf"}, 1700 " --pages *kfo.pdf -- a.pdf"},
1700 {$td->FILE => "disable-kfo.out", $td->EXIT_STATUS => 0}, 1701 {$td->FILE => "disable-kfo.out", $td->EXIT_STATUS => 0},
1701 $td->NORMALIZE_NEWLINES); 1702 $td->NORMALIZE_NEWLINES);
1702 $td->runtest("don't disable keep files open", 1703 $td->runtest("don't disable keep files open",
1703 {$td->COMMAND => 1704 {$td->COMMAND =>
1704 "qpdf --verbose --static-id --empty" . 1705 "qpdf --verbose --static-id --empty" .
1705 - " --pages 11*kfo.pdf -- a.pdf"}, 1706 + " --pages 01*kfo.pdf -- a.pdf"},
1706 {$td->FILE => "enable-kfo.out", $td->EXIT_STATUS => 0}, 1707 {$td->FILE => "enable-kfo.out", $td->EXIT_STATUS => 0},
1707 $td->NORMALIZE_NEWLINES); 1708 $td->NORMALIZE_NEWLINES);
1708 $td->runtest("explict keep files open", 1709 $td->runtest("explict keep files open",
qpdf/qtest/qpdf/disable-kfo.out
@@ -50,156 +50,6 @@ qpdf: processing 048-kfo.pdf @@ -50,156 +50,6 @@ qpdf: processing 048-kfo.pdf
50 qpdf: processing 049-kfo.pdf 50 qpdf: processing 049-kfo.pdf
51 qpdf: processing 050-kfo.pdf 51 qpdf: processing 050-kfo.pdf
52 qpdf: processing 051-kfo.pdf 52 qpdf: processing 051-kfo.pdf
53 -qpdf: processing 052-kfo.pdf  
54 -qpdf: processing 053-kfo.pdf  
55 -qpdf: processing 054-kfo.pdf  
56 -qpdf: processing 055-kfo.pdf  
57 -qpdf: processing 056-kfo.pdf  
58 -qpdf: processing 057-kfo.pdf  
59 -qpdf: processing 058-kfo.pdf  
60 -qpdf: processing 059-kfo.pdf  
61 -qpdf: processing 060-kfo.pdf  
62 -qpdf: processing 061-kfo.pdf  
63 -qpdf: processing 062-kfo.pdf  
64 -qpdf: processing 063-kfo.pdf  
65 -qpdf: processing 064-kfo.pdf  
66 -qpdf: processing 065-kfo.pdf  
67 -qpdf: processing 066-kfo.pdf  
68 -qpdf: processing 067-kfo.pdf  
69 -qpdf: processing 068-kfo.pdf  
70 -qpdf: processing 069-kfo.pdf  
71 -qpdf: processing 070-kfo.pdf  
72 -qpdf: processing 071-kfo.pdf  
73 -qpdf: processing 072-kfo.pdf  
74 -qpdf: processing 073-kfo.pdf  
75 -qpdf: processing 074-kfo.pdf  
76 -qpdf: processing 075-kfo.pdf  
77 -qpdf: processing 076-kfo.pdf  
78 -qpdf: processing 077-kfo.pdf  
79 -qpdf: processing 078-kfo.pdf  
80 -qpdf: processing 079-kfo.pdf  
81 -qpdf: processing 080-kfo.pdf  
82 -qpdf: processing 081-kfo.pdf  
83 -qpdf: processing 082-kfo.pdf  
84 -qpdf: processing 083-kfo.pdf  
85 -qpdf: processing 084-kfo.pdf  
86 -qpdf: processing 085-kfo.pdf  
87 -qpdf: processing 086-kfo.pdf  
88 -qpdf: processing 087-kfo.pdf  
89 -qpdf: processing 088-kfo.pdf  
90 -qpdf: processing 089-kfo.pdf  
91 -qpdf: processing 090-kfo.pdf  
92 -qpdf: processing 091-kfo.pdf  
93 -qpdf: processing 092-kfo.pdf  
94 -qpdf: processing 093-kfo.pdf  
95 -qpdf: processing 094-kfo.pdf  
96 -qpdf: processing 095-kfo.pdf  
97 -qpdf: processing 096-kfo.pdf  
98 -qpdf: processing 097-kfo.pdf  
99 -qpdf: processing 098-kfo.pdf  
100 -qpdf: processing 099-kfo.pdf  
101 -qpdf: processing 100-kfo.pdf  
102 -qpdf: processing 101-kfo.pdf  
103 -qpdf: processing 102-kfo.pdf  
104 -qpdf: processing 103-kfo.pdf  
105 -qpdf: processing 104-kfo.pdf  
106 -qpdf: processing 105-kfo.pdf  
107 -qpdf: processing 106-kfo.pdf  
108 -qpdf: processing 107-kfo.pdf  
109 -qpdf: processing 108-kfo.pdf  
110 -qpdf: processing 109-kfo.pdf  
111 -qpdf: processing 110-kfo.pdf  
112 -qpdf: processing 111-kfo.pdf  
113 -qpdf: processing 112-kfo.pdf  
114 -qpdf: processing 113-kfo.pdf  
115 -qpdf: processing 114-kfo.pdf  
116 -qpdf: processing 115-kfo.pdf  
117 -qpdf: processing 116-kfo.pdf  
118 -qpdf: processing 117-kfo.pdf  
119 -qpdf: processing 118-kfo.pdf  
120 -qpdf: processing 119-kfo.pdf  
121 -qpdf: processing 120-kfo.pdf  
122 -qpdf: processing 121-kfo.pdf  
123 -qpdf: processing 122-kfo.pdf  
124 -qpdf: processing 123-kfo.pdf  
125 -qpdf: processing 124-kfo.pdf  
126 -qpdf: processing 125-kfo.pdf  
127 -qpdf: processing 126-kfo.pdf  
128 -qpdf: processing 127-kfo.pdf  
129 -qpdf: processing 128-kfo.pdf  
130 -qpdf: processing 129-kfo.pdf  
131 -qpdf: processing 130-kfo.pdf  
132 -qpdf: processing 131-kfo.pdf  
133 -qpdf: processing 132-kfo.pdf  
134 -qpdf: processing 133-kfo.pdf  
135 -qpdf: processing 134-kfo.pdf  
136 -qpdf: processing 135-kfo.pdf  
137 -qpdf: processing 136-kfo.pdf  
138 -qpdf: processing 137-kfo.pdf  
139 -qpdf: processing 138-kfo.pdf  
140 -qpdf: processing 139-kfo.pdf  
141 -qpdf: processing 140-kfo.pdf  
142 -qpdf: processing 141-kfo.pdf  
143 -qpdf: processing 142-kfo.pdf  
144 -qpdf: processing 143-kfo.pdf  
145 -qpdf: processing 144-kfo.pdf  
146 -qpdf: processing 145-kfo.pdf  
147 -qpdf: processing 146-kfo.pdf  
148 -qpdf: processing 147-kfo.pdf  
149 -qpdf: processing 148-kfo.pdf  
150 -qpdf: processing 149-kfo.pdf  
151 -qpdf: processing 150-kfo.pdf  
152 -qpdf: processing 151-kfo.pdf  
153 -qpdf: processing 152-kfo.pdf  
154 -qpdf: processing 153-kfo.pdf  
155 -qpdf: processing 154-kfo.pdf  
156 -qpdf: processing 155-kfo.pdf  
157 -qpdf: processing 156-kfo.pdf  
158 -qpdf: processing 157-kfo.pdf  
159 -qpdf: processing 158-kfo.pdf  
160 -qpdf: processing 159-kfo.pdf  
161 -qpdf: processing 160-kfo.pdf  
162 -qpdf: processing 161-kfo.pdf  
163 -qpdf: processing 162-kfo.pdf  
164 -qpdf: processing 163-kfo.pdf  
165 -qpdf: processing 164-kfo.pdf  
166 -qpdf: processing 165-kfo.pdf  
167 -qpdf: processing 166-kfo.pdf  
168 -qpdf: processing 167-kfo.pdf  
169 -qpdf: processing 168-kfo.pdf  
170 -qpdf: processing 169-kfo.pdf  
171 -qpdf: processing 170-kfo.pdf  
172 -qpdf: processing 171-kfo.pdf  
173 -qpdf: processing 172-kfo.pdf  
174 -qpdf: processing 173-kfo.pdf  
175 -qpdf: processing 174-kfo.pdf  
176 -qpdf: processing 175-kfo.pdf  
177 -qpdf: processing 176-kfo.pdf  
178 -qpdf: processing 177-kfo.pdf  
179 -qpdf: processing 178-kfo.pdf  
180 -qpdf: processing 179-kfo.pdf  
181 -qpdf: processing 180-kfo.pdf  
182 -qpdf: processing 181-kfo.pdf  
183 -qpdf: processing 182-kfo.pdf  
184 -qpdf: processing 183-kfo.pdf  
185 -qpdf: processing 184-kfo.pdf  
186 -qpdf: processing 185-kfo.pdf  
187 -qpdf: processing 186-kfo.pdf  
188 -qpdf: processing 187-kfo.pdf  
189 -qpdf: processing 188-kfo.pdf  
190 -qpdf: processing 189-kfo.pdf  
191 -qpdf: processing 190-kfo.pdf  
192 -qpdf: processing 191-kfo.pdf  
193 -qpdf: processing 192-kfo.pdf  
194 -qpdf: processing 193-kfo.pdf  
195 -qpdf: processing 194-kfo.pdf  
196 -qpdf: processing 195-kfo.pdf  
197 -qpdf: processing 196-kfo.pdf  
198 -qpdf: processing 197-kfo.pdf  
199 -qpdf: processing 198-kfo.pdf  
200 -qpdf: processing 199-kfo.pdf  
201 -qpdf: processing 200-kfo.pdf  
202 -qpdf: processing 201-kfo.pdf  
203 qpdf: removing unreferenced pages from primary input 53 qpdf: removing unreferenced pages from primary input
204 qpdf: adding pages from 001-kfo.pdf 54 qpdf: adding pages from 001-kfo.pdf
205 qpdf: adding pages from 002-kfo.pdf 55 qpdf: adding pages from 002-kfo.pdf
@@ -252,154 +102,4 @@ qpdf: adding pages from 048-kfo.pdf @@ -252,154 +102,4 @@ qpdf: adding pages from 048-kfo.pdf
252 qpdf: adding pages from 049-kfo.pdf 102 qpdf: adding pages from 049-kfo.pdf
253 qpdf: adding pages from 050-kfo.pdf 103 qpdf: adding pages from 050-kfo.pdf
254 qpdf: adding pages from 051-kfo.pdf 104 qpdf: adding pages from 051-kfo.pdf
255 -qpdf: adding pages from 052-kfo.pdf  
256 -qpdf: adding pages from 053-kfo.pdf  
257 -qpdf: adding pages from 054-kfo.pdf  
258 -qpdf: adding pages from 055-kfo.pdf  
259 -qpdf: adding pages from 056-kfo.pdf  
260 -qpdf: adding pages from 057-kfo.pdf  
261 -qpdf: adding pages from 058-kfo.pdf  
262 -qpdf: adding pages from 059-kfo.pdf  
263 -qpdf: adding pages from 060-kfo.pdf  
264 -qpdf: adding pages from 061-kfo.pdf  
265 -qpdf: adding pages from 062-kfo.pdf  
266 -qpdf: adding pages from 063-kfo.pdf  
267 -qpdf: adding pages from 064-kfo.pdf  
268 -qpdf: adding pages from 065-kfo.pdf  
269 -qpdf: adding pages from 066-kfo.pdf  
270 -qpdf: adding pages from 067-kfo.pdf  
271 -qpdf: adding pages from 068-kfo.pdf  
272 -qpdf: adding pages from 069-kfo.pdf  
273 -qpdf: adding pages from 070-kfo.pdf  
274 -qpdf: adding pages from 071-kfo.pdf  
275 -qpdf: adding pages from 072-kfo.pdf  
276 -qpdf: adding pages from 073-kfo.pdf  
277 -qpdf: adding pages from 074-kfo.pdf  
278 -qpdf: adding pages from 075-kfo.pdf  
279 -qpdf: adding pages from 076-kfo.pdf  
280 -qpdf: adding pages from 077-kfo.pdf  
281 -qpdf: adding pages from 078-kfo.pdf  
282 -qpdf: adding pages from 079-kfo.pdf  
283 -qpdf: adding pages from 080-kfo.pdf  
284 -qpdf: adding pages from 081-kfo.pdf  
285 -qpdf: adding pages from 082-kfo.pdf  
286 -qpdf: adding pages from 083-kfo.pdf  
287 -qpdf: adding pages from 084-kfo.pdf  
288 -qpdf: adding pages from 085-kfo.pdf  
289 -qpdf: adding pages from 086-kfo.pdf  
290 -qpdf: adding pages from 087-kfo.pdf  
291 -qpdf: adding pages from 088-kfo.pdf  
292 -qpdf: adding pages from 089-kfo.pdf  
293 -qpdf: adding pages from 090-kfo.pdf  
294 -qpdf: adding pages from 091-kfo.pdf  
295 -qpdf: adding pages from 092-kfo.pdf  
296 -qpdf: adding pages from 093-kfo.pdf  
297 -qpdf: adding pages from 094-kfo.pdf  
298 -qpdf: adding pages from 095-kfo.pdf  
299 -qpdf: adding pages from 096-kfo.pdf  
300 -qpdf: adding pages from 097-kfo.pdf  
301 -qpdf: adding pages from 098-kfo.pdf  
302 -qpdf: adding pages from 099-kfo.pdf  
303 -qpdf: adding pages from 100-kfo.pdf  
304 -qpdf: adding pages from 101-kfo.pdf  
305 -qpdf: adding pages from 102-kfo.pdf  
306 -qpdf: adding pages from 103-kfo.pdf  
307 -qpdf: adding pages from 104-kfo.pdf  
308 -qpdf: adding pages from 105-kfo.pdf  
309 -qpdf: adding pages from 106-kfo.pdf  
310 -qpdf: adding pages from 107-kfo.pdf  
311 -qpdf: adding pages from 108-kfo.pdf  
312 -qpdf: adding pages from 109-kfo.pdf  
313 -qpdf: adding pages from 110-kfo.pdf  
314 -qpdf: adding pages from 111-kfo.pdf  
315 -qpdf: adding pages from 112-kfo.pdf  
316 -qpdf: adding pages from 113-kfo.pdf  
317 -qpdf: adding pages from 114-kfo.pdf  
318 -qpdf: adding pages from 115-kfo.pdf  
319 -qpdf: adding pages from 116-kfo.pdf  
320 -qpdf: adding pages from 117-kfo.pdf  
321 -qpdf: adding pages from 118-kfo.pdf  
322 -qpdf: adding pages from 119-kfo.pdf  
323 -qpdf: adding pages from 120-kfo.pdf  
324 -qpdf: adding pages from 121-kfo.pdf  
325 -qpdf: adding pages from 122-kfo.pdf  
326 -qpdf: adding pages from 123-kfo.pdf  
327 -qpdf: adding pages from 124-kfo.pdf  
328 -qpdf: adding pages from 125-kfo.pdf  
329 -qpdf: adding pages from 126-kfo.pdf  
330 -qpdf: adding pages from 127-kfo.pdf  
331 -qpdf: adding pages from 128-kfo.pdf  
332 -qpdf: adding pages from 129-kfo.pdf  
333 -qpdf: adding pages from 130-kfo.pdf  
334 -qpdf: adding pages from 131-kfo.pdf  
335 -qpdf: adding pages from 132-kfo.pdf  
336 -qpdf: adding pages from 133-kfo.pdf  
337 -qpdf: adding pages from 134-kfo.pdf  
338 -qpdf: adding pages from 135-kfo.pdf  
339 -qpdf: adding pages from 136-kfo.pdf  
340 -qpdf: adding pages from 137-kfo.pdf  
341 -qpdf: adding pages from 138-kfo.pdf  
342 -qpdf: adding pages from 139-kfo.pdf  
343 -qpdf: adding pages from 140-kfo.pdf  
344 -qpdf: adding pages from 141-kfo.pdf  
345 -qpdf: adding pages from 142-kfo.pdf  
346 -qpdf: adding pages from 143-kfo.pdf  
347 -qpdf: adding pages from 144-kfo.pdf  
348 -qpdf: adding pages from 145-kfo.pdf  
349 -qpdf: adding pages from 146-kfo.pdf  
350 -qpdf: adding pages from 147-kfo.pdf  
351 -qpdf: adding pages from 148-kfo.pdf  
352 -qpdf: adding pages from 149-kfo.pdf  
353 -qpdf: adding pages from 150-kfo.pdf  
354 -qpdf: adding pages from 151-kfo.pdf  
355 -qpdf: adding pages from 152-kfo.pdf  
356 -qpdf: adding pages from 153-kfo.pdf  
357 -qpdf: adding pages from 154-kfo.pdf  
358 -qpdf: adding pages from 155-kfo.pdf  
359 -qpdf: adding pages from 156-kfo.pdf  
360 -qpdf: adding pages from 157-kfo.pdf  
361 -qpdf: adding pages from 158-kfo.pdf  
362 -qpdf: adding pages from 159-kfo.pdf  
363 -qpdf: adding pages from 160-kfo.pdf  
364 -qpdf: adding pages from 161-kfo.pdf  
365 -qpdf: adding pages from 162-kfo.pdf  
366 -qpdf: adding pages from 163-kfo.pdf  
367 -qpdf: adding pages from 164-kfo.pdf  
368 -qpdf: adding pages from 165-kfo.pdf  
369 -qpdf: adding pages from 166-kfo.pdf  
370 -qpdf: adding pages from 167-kfo.pdf  
371 -qpdf: adding pages from 168-kfo.pdf  
372 -qpdf: adding pages from 169-kfo.pdf  
373 -qpdf: adding pages from 170-kfo.pdf  
374 -qpdf: adding pages from 171-kfo.pdf  
375 -qpdf: adding pages from 172-kfo.pdf  
376 -qpdf: adding pages from 173-kfo.pdf  
377 -qpdf: adding pages from 174-kfo.pdf  
378 -qpdf: adding pages from 175-kfo.pdf  
379 -qpdf: adding pages from 176-kfo.pdf  
380 -qpdf: adding pages from 177-kfo.pdf  
381 -qpdf: adding pages from 178-kfo.pdf  
382 -qpdf: adding pages from 179-kfo.pdf  
383 -qpdf: adding pages from 180-kfo.pdf  
384 -qpdf: adding pages from 181-kfo.pdf  
385 -qpdf: adding pages from 182-kfo.pdf  
386 -qpdf: adding pages from 183-kfo.pdf  
387 -qpdf: adding pages from 184-kfo.pdf  
388 -qpdf: adding pages from 185-kfo.pdf  
389 -qpdf: adding pages from 186-kfo.pdf  
390 -qpdf: adding pages from 187-kfo.pdf  
391 -qpdf: adding pages from 188-kfo.pdf  
392 -qpdf: adding pages from 189-kfo.pdf  
393 -qpdf: adding pages from 190-kfo.pdf  
394 -qpdf: adding pages from 191-kfo.pdf  
395 -qpdf: adding pages from 192-kfo.pdf  
396 -qpdf: adding pages from 193-kfo.pdf  
397 -qpdf: adding pages from 194-kfo.pdf  
398 -qpdf: adding pages from 195-kfo.pdf  
399 -qpdf: adding pages from 196-kfo.pdf  
400 -qpdf: adding pages from 197-kfo.pdf  
401 -qpdf: adding pages from 198-kfo.pdf  
402 -qpdf: adding pages from 199-kfo.pdf  
403 -qpdf: adding pages from 200-kfo.pdf  
404 -qpdf: adding pages from 201-kfo.pdf  
405 qpdf: wrote file a.pdf 105 qpdf: wrote file a.pdf
qpdf/qtest/qpdf/enable-kfo.out
1 qpdf: selecting --keep-open-files=y 1 qpdf: selecting --keep-open-files=y
2 -qpdf: processing 110-kfo.pdf  
3 -qpdf: processing 111-kfo.pdf  
4 -qpdf: processing 112-kfo.pdf  
5 -qpdf: processing 113-kfo.pdf  
6 -qpdf: processing 114-kfo.pdf  
7 -qpdf: processing 115-kfo.pdf  
8 -qpdf: processing 116-kfo.pdf  
9 -qpdf: processing 117-kfo.pdf  
10 -qpdf: processing 118-kfo.pdf  
11 -qpdf: processing 119-kfo.pdf 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 qpdf: removing unreferenced pages from primary input 12 qpdf: removing unreferenced pages from primary input
13 -qpdf: adding pages from 110-kfo.pdf  
14 -qpdf: adding pages from 111-kfo.pdf  
15 -qpdf: adding pages from 112-kfo.pdf  
16 -qpdf: adding pages from 113-kfo.pdf  
17 -qpdf: adding pages from 114-kfo.pdf  
18 -qpdf: adding pages from 115-kfo.pdf  
19 -qpdf: adding pages from 116-kfo.pdf  
20 -qpdf: adding pages from 117-kfo.pdf  
21 -qpdf: adding pages from 118-kfo.pdf  
22 -qpdf: adding pages from 119-kfo.pdf 13 +qpdf: adding pages from 010-kfo.pdf
  14 +qpdf: adding pages from 011-kfo.pdf
  15 +qpdf: adding pages from 012-kfo.pdf
  16 +qpdf: adding pages from 013-kfo.pdf
  17 +qpdf: adding pages from 014-kfo.pdf
  18 +qpdf: adding pages from 015-kfo.pdf
  19 +qpdf: adding pages from 016-kfo.pdf
  20 +qpdf: adding pages from 017-kfo.pdf
  21 +qpdf: adding pages from 018-kfo.pdf
  22 +qpdf: adding pages from 019-kfo.pdf
23 qpdf: wrote file a.pdf 23 qpdf: wrote file a.pdf