Commit a160bd4efec87ed3b632916efc8ae20ac3624116

Authored by Jay Berkenbilt
1 parent 63197703

Allow rotate as array in job JSON (fixes #1401)

job.sums
... ... @@ -7,13 +7,13 @@ include/qpdf/auto_job_c_enc.hh 28446f3c32153a52afa239ea40503e6cc8ac2c026813526a3
7 7 include/qpdf/auto_job_c_main.hh 48e8ea475e8a8f4c96de86bdad10dff83a263deccc3798c8bed7f5e0e070a037
8 8 include/qpdf/auto_job_c_pages.hh 09ca15649cc94fdaf6d9bdae28a20723f2a66616bf15aa86d83df31051d82506
9 9 include/qpdf/auto_job_c_uo.hh 9c2f98a355858dd54d0bba444b73177a59c9e56833e02fa6406f429c07f39e62
10   -job.yml ba9f24920c2221883b1d6d8e42f7ac7c78988063a0ca9181dc08abe9cde6f760
  10 +job.yml 9245e70c233dc2067827593403bd9e9feafc5aa0be6b12bb7b99a4b2cab84584
11 11 libqpdf/qpdf/auto_job_decl.hh 34ba07d3891c3e5cdd8712f991e508a0652c9db314c5d5bcdf4421b76e6f6e01
12 12 libqpdf/qpdf/auto_job_help.hh 03bdaab05f84b16bfb15ad7993a4655b7dc14af070fa97fe3035943726d4b258
13 13 libqpdf/qpdf/auto_job_init.hh 029d929f930f60b4055796c8c4ce2ed625f861316ac738ab638579eca46b2472
14   -libqpdf/qpdf/auto_job_json_decl.hh 843892c8e8652a86b7eb573893ef24050b7f36fe313f7251874be5cd4cdbe3fd
15   -libqpdf/qpdf/auto_job_json_init.hh b883f3768c8367327ea1f17e8ca503178be62a9cede316bf7ad96c0fafee5513
16   -libqpdf/qpdf/auto_job_schema.hh 6d28db327dd19e0a7da375c681ecea7965513fa4b5d2349a80089b057f8c02d8
  14 +libqpdf/qpdf/auto_job_json_decl.hh 04965f6321e54b8b3b1dd2ca101d763a22ab44fa81c69e4b6fc0fd6bb7f50f92
  15 +libqpdf/qpdf/auto_job_json_init.hh 42b402305b52fc217453206c0a372303d0b59d4d4227bb564b4fa639257d4411
  16 +libqpdf/qpdf/auto_job_schema.hh 2d3c163c74498b638a13931eed71c2a4dc6b155a9d3e2c1b740070fac4293737
17 17 manual/_ext/qpdf.py 6add6321666031d55ed4aedf7c00e5662bba856dfcd66ccb526563bffefbb580
18 18 manual/cli.rst 1094662a10db21528fd151739a9779a4504ebac75b483a11a53d42ab0430ee42
19 19 manual/qpdf.1 c7d03b8b544b0c3b2a74149d746596d4564aefff50a53980e435aa5c841f7bed
... ...
... ... @@ -450,6 +450,7 @@ json:
450 450 remove-structure:
451 451 report-memory-usage:
452 452 rotate:
  453 + - null
453 454 set-page-labels:
454 455 - null
455 456 overlay:
... ...
libqpdf/QPDFJob_json.cc
... ... @@ -590,6 +590,18 @@ Handlers::setupUnderlayPassword()
590 590 }
591 591  
592 592 void
  593 +Handlers::beginRotateArray(JSON)
  594 +{
  595 + // nothing needed
  596 +}
  597 +
  598 +void
  599 +Handlers::endRotateArray()
  600 +{
  601 + // nothing needed
  602 +}
  603 +
  604 +void
593 605 Handlers::setupSetPageLabels()
594 606 {
595 607 accumulated_args.clear();
... ...
libqpdf/qpdf/auto_job_json_decl.hh
... ... @@ -43,6 +43,8 @@ void beginPages(JSON);
43 43 void endPages();
44 44 void setupPagesFile();
45 45 void setupPagesPassword();
  46 +void beginRotateArray(JSON);
  47 +void endRotateArray();
46 48 void beginSetPageLabelsArray(JSON);
47 49 void endSetPageLabelsArray();
48 50 void setupSetPageLabels();
... ...
libqpdf/qpdf/auto_job_json_init.hh
... ... @@ -428,7 +428,9 @@ pushKey("reportMemoryUsage");
428 428 addBare([this]() { c_main->reportMemoryUsage(); });
429 429 popHandler(); // key: reportMemoryUsage
430 430 pushKey("rotate");
  431 +beginArray(bindJSON(&Handlers::beginRotateArray), bindBare(&Handlers::endRotateArray)); // .rotate[]
431 432 addParameter([this](std::string const& p) { c_main->rotate(p); });
  433 +popHandler(); // array: .rotate[]
432 434 popHandler(); // key: rotate
433 435 pushKey("setPageLabels");
434 436 beginArray(bindJSON(&Handlers::beginSetPageLabelsArray), bindBare(&Handlers::endSetPageLabelsArray)); // .setPageLabels[]
... ...
libqpdf/qpdf/auto_job_schema.hh
... ... @@ -150,7 +150,9 @@ static constexpr char const* JOB_SCHEMA_DATA = R"({
150 150 "removePageLabels": "remove explicit page numbers",
151 151 "removeStructure": "remove metadata",
152 152 "reportMemoryUsage": "best effort report of memory usage",
153   - "rotate": "rotate pages",
  153 + "rotate": [
  154 + "rotate pages"
  155 + ],
154 156 "setPageLabels": [
155 157 "number pages for the entire document"
156 158 ],
... ...
manual/release-notes.rst
... ... @@ -29,6 +29,9 @@ more detail.
29 29 - Fix two object stream error/warning messages that reported the wrong
30 30 object id.
31 31  
  32 + - Accept an array for ``rotate`` in qpdf job JSON since it is a
  33 + repeatable option.
  34 +
32 35 - CLI Enhancements
33 36  
34 37 - New :qpdf:ref:`--remove-structure` option to exclude the document
... ...
qpdf/qtest/qpdf/rotate-multi.json 0 → 100644
  1 +{
  2 + "rotate": [
  3 + "+450:1,4,11,16",
  4 + "900:2,5,12-13",
  5 + "-1890:3,15,17,18"
  6 + ]
  7 +}
... ...
qpdf/qtest/rotate-pages.test
... ... @@ -14,7 +14,7 @@ cleanup();
14 14  
15 15 my $td = new TestDriver('rotate-pages');
16 16  
17   -my $n_tests = 21;
  17 +my $n_tests = 22;
18 18  
19 19 # Do absolute, positive, and negative on ranges that include
20 20 # inherited and non-inherited.
... ... @@ -38,6 +38,10 @@ $td->runtest("page rotation (>270)",
38 38 " --rotate=900:2,5,12-13" .
39 39 " --rotate=-1890:3,15,17,18"},
40 40 {$td->STRING => "", $td->EXIT_STATUS => 0});
  41 +$td->runtest("job json multiple page rotation",
  42 + {$td->COMMAND => "qpdf --static-id to-rotate.pdf a.pdf" .
  43 + " --job-json-file=rotate-multi.json"},
  44 + {$td->STRING => "", $td->EXIT_STATUS => 0});
41 45 $td->runtest("check output",
42 46 {$td->COMMAND => "qpdf-test-compare a.pdf rotated.pdf"},
43 47 {$td->FILE => "rotated.pdf", $td->EXIT_STATUS => 0});
... ...