Commit 91367239fd55f7c4996ed6158405ea10573ae3cb

Authored by Jay Berkenbilt
1 parent adccedc0

Add --show-npages option to qpdf

ChangeLog
1 2013-07-07 Jay Berkenbilt <ejb@ql.org> 1 2013-07-07 Jay Berkenbilt <ejb@ql.org>
2 2
  3 + * qpdf: add --show-npages command-line option, which causes the
  4 + number of pages in the input file to be printed on a line by
  5 + itself.
  6 +
3 * qpdf: allow omission of range in --pages. If range is omitted 7 * qpdf: allow omission of range in --pages. If range is omitted
4 such that an argument that is supposed to be a range is an invalid 8 such that an argument that is supposed to be a range is an invalid
5 range and a valid file name, the range of 1-z is assumed. This 9 range and a valid file name, the range of 1-z is assumed. This
manual/qpdf-manual.xml
@@ -1090,6 +1090,17 @@ outfile.pdf&lt;/option&gt; @@ -1090,6 +1090,17 @@ outfile.pdf&lt;/option&gt;
1090 </listitem> 1090 </listitem>
1091 </varlistentry> 1091 </varlistentry>
1092 <varlistentry> 1092 <varlistentry>
  1093 + <term><option>-show-npages</option></term>
  1094 + <listitem>
  1095 + <para>
  1096 + Prints the number of pages in the input file on a line by
  1097 + itself. Since the number of pages appears by itself on a
  1098 + line, this option can be useful for scripting if you need to
  1099 + know the number of pages in a file.
  1100 + </para>
  1101 + </listitem>
  1102 + </varlistentry>
  1103 + <varlistentry>
1093 <term><option>-show-pages</option></term> 1104 <term><option>-show-pages</option></term>
1094 <listitem> 1105 <listitem>
1095 <para> 1106 <para>
qpdf/qpdf.cc
@@ -248,6 +248,7 @@ automated test suites for software that uses the qpdf library.\n\ @@ -248,6 +248,7 @@ automated test suites for software that uses the qpdf library.\n\
248 --show-object=obj[,gen] show the contents of the given object\n\ 248 --show-object=obj[,gen] show the contents of the given object\n\
249 --raw-stream-data show raw stream data instead of object contents\n\ 249 --raw-stream-data show raw stream data instead of object contents\n\
250 --filtered-stream-data show filtered stream data instead of object contents\n\ 250 --filtered-stream-data show filtered stream data instead of object contents\n\
  251 +--show-npages print the number of pages in the file\n\
251 --show-pages shows the object/generation number for each page\n\ 252 --show-pages shows the object/generation number for each page\n\
252 --with-images also shows the object IDs for images on each page\n\ 253 --with-images also shows the object IDs for images on each page\n\
253 --check check file structure + encryption, linearization\n\ 254 --check check file structure + encryption, linearization\n\
@@ -1029,6 +1030,7 @@ int main(int argc, char* argv[]) @@ -1029,6 +1030,7 @@ int main(int argc, char* argv[])
1029 std::string min_version; 1030 std::string min_version;
1030 std::string force_version; 1031 std::string force_version;
1031 1032
  1033 + bool show_npages = false;
1032 bool static_id = false; 1034 bool static_id = false;
1033 bool static_aes_iv = false; 1035 bool static_aes_iv = false;
1034 bool suppress_original_object_id = false; 1036 bool suppress_original_object_id = false;
@@ -1284,6 +1286,11 @@ int main(int argc, char* argv[]) @@ -1284,6 +1286,11 @@ int main(int argc, char* argv[])
1284 { 1286 {
1285 show_filtered_stream_data = true; 1287 show_filtered_stream_data = true;
1286 } 1288 }
  1289 + else if (strcmp(arg, "show-npages") == 0)
  1290 + {
  1291 + show_npages = true;
  1292 + require_outfile = false;
  1293 + }
1287 else if (strcmp(arg, "show-pages") == 0) 1294 else if (strcmp(arg, "show-pages") == 0)
1288 { 1295 {
1289 show_pages = true; 1296 show_pages = true;
@@ -1352,6 +1359,12 @@ int main(int argc, char* argv[]) @@ -1352,6 +1359,12 @@ int main(int argc, char* argv[])
1352 } 1359 }
1353 if (outfilename == 0) 1360 if (outfilename == 0)
1354 { 1361 {
  1362 + if (show_npages)
  1363 + {
  1364 + QTC::TC("qpdf", "qpdf npages");
  1365 + std::cout << pdf.getRoot().getKey("/Pages").
  1366 + getKey("/Count").getIntValue() << std::endl;
  1367 + }
1355 if (show_encryption) 1368 if (show_encryption)
1356 { 1369 {
1357 ::show_encryption(pdf); 1370 ::show_encryption(pdf);
qpdf/qpdf.testcov
@@ -267,3 +267,4 @@ QPDF_optimization indirect outlines 0 @@ -267,3 +267,4 @@ QPDF_optimization indirect outlines 0
267 QPDF xref space 2 267 QPDF xref space 2
268 qpdf pages range omitted at end 0 268 qpdf pages range omitted at end 0
269 qpdf pages range omitted in middle 0 269 qpdf pages range omitted in middle 0
  270 +qpdf npages 0
qpdf/qtest/qpdf.test
@@ -199,7 +199,7 @@ $td-&gt;runtest(&quot;remove page we don&#39;t have&quot;, @@ -199,7 +199,7 @@ $td-&gt;runtest(&quot;remove page we don&#39;t have&quot;,
199 show_ntests(); 199 show_ntests();
200 # ---------- 200 # ----------
201 $td->notify("--- Miscellaneous Tests ---"); 201 $td->notify("--- Miscellaneous Tests ---");
202 -$n_tests += 65; 202 +$n_tests += 66;
203 203
204 $td->runtest("qpdf version", 204 $td->runtest("qpdf version",
205 {$td->COMMAND => "qpdf --version"}, 205 {$td->COMMAND => "qpdf --version"},
@@ -517,6 +517,12 @@ $td-&gt;runtest(&quot;check broken file&quot;, @@ -517,6 +517,12 @@ $td-&gt;runtest(&quot;check broken file&quot;,
517 {$td->FILE => "invalid-id-xref.out", $td->EXIT_STATUS => 3}, 517 {$td->FILE => "invalid-id-xref.out", $td->EXIT_STATUS => 3},
518 $td->NORMALIZE_NEWLINES); 518 $td->NORMALIZE_NEWLINES);
519 519
  520 +$td->runtest("show number of pages",
  521 + {$td->COMMAND =>
  522 + "qpdf --show-npages 20-pages.pdf --password=user"},
  523 + {$td->STRING => "20\n", $td->EXIT_STATUS => 0},
  524 + $td->NORMALIZE_NEWLINES);
  525 +
520 show_ntests(); 526 show_ntests();
521 # ---------- 527 # ----------
522 $td->notify("--- Numeric range parsing tests ---"); 528 $td->notify("--- Numeric range parsing tests ---");