diff options
author | Jay Berkenbilt <ejb@ql.org> | 2024-01-05 22:11:09 +0100 |
---|---|---|
committer | Jay Berkenbilt <ejb@ql.org> | 2024-01-05 23:12:12 +0100 |
commit | 7cac433e2d9256fb8361aa53d136d4eaacfda6fe (patch) | |
tree | 91e18e06655d5d83dd745032641cdd7406785ced /qpdf | |
parent | 543038c52a3e0dc166565142ed7efb183e461948 (diff) | |
download | qpdf-7cac433e2d9256fb8361aa53d136d4eaacfda6fe.tar.zst |
Implement --set-page-labels and supporting API (fixes #939)
Diffstat (limited to 'qpdf')
-rw-r--r-- | qpdf/qtest/page-labels.test | 39 | ||||
-rw-r--r-- | qpdf/qtest/qpdf/set-page-labels.json | 11 | ||||
-rw-r--r-- | qpdf/qtest/qpdf/set-page-labels.out | 8 |
3 files changed, 58 insertions, 0 deletions
diff --git a/qpdf/qtest/page-labels.test b/qpdf/qtest/page-labels.test index 616dcb6a..9927437b 100644 --- a/qpdf/qtest/page-labels.test +++ b/qpdf/qtest/page-labels.test @@ -29,5 +29,44 @@ $td->runtest("no page labels", {$td->FILE => "no-page-labels.out", $td->EXIT_STATUS => 0}, $td->NORMALIZE_NEWLINES); +# --set-page-labels +my @errors = ( + ["quack", ".*page label spec must be.*"], + ["5:r 10:D", ".*the first page .*must start with page 1.*"], + ["1:r 10:D 31:A", + ".*page 31 is more than the total number of pages \\(30\\).*"], +); +$n_tests += scalar(@errors); + +foreach my $d (@errors) +{ + my ($specs, $err) = @$d; + $td->runtest("error ($specs)", + {$td->COMMAND => "qpdf --set-page-labels $specs --" . + " page-labels-num-tree.pdf a.pdf"}, + {$td->REGEXP => $err, $td->EXIT_STATUS => 2}, + $td->NORMALIZE_NEWLINES); +} + +$n_tests += 4; +$td->runtest("set page labels", + {$td->COMMAND => "qpdf page-labels-num-tree.pdf a.pdf" . + " --set-page-labels 1:a 3:R/2 6:r//Z- 8:A/17 r10:D/3 28: z://end --"}, + {$td->STRING => "", $td->EXIT_STATUS => 0}, + $td->NORMALIZE_NEWLINES); +$td->runtest("after set page labels", + {$td->COMMAND => "test_driver 47 a.pdf"}, + {$td->FILE => "set-page-labels.out", $td->EXIT_STATUS => 0}, + $td->NORMALIZE_NEWLINES); +$td->runtest("set page labels (json)", + {$td->COMMAND => "qpdf page-labels-num-tree.pdf b.pdf" . + " --job-json-file=set-page-labels.json"}, + {$td->STRING => "", $td->EXIT_STATUS => 0}, + $td->NORMALIZE_NEWLINES); +$td->runtest("after set page labels", + {$td->COMMAND => "test_driver 47 b.pdf"}, + {$td->FILE => "set-page-labels.out", $td->EXIT_STATUS => 0}, + $td->NORMALIZE_NEWLINES); + cleanup(); $td->report($n_tests); diff --git a/qpdf/qtest/qpdf/set-page-labels.json b/qpdf/qtest/qpdf/set-page-labels.json new file mode 100644 index 00000000..e3a3daf8 --- /dev/null +++ b/qpdf/qtest/qpdf/set-page-labels.json @@ -0,0 +1,11 @@ +{ + "setPageLabels": [ + "1:a", + "3:R/2", + "6:r//Z-", + "8:A/17", + "r10:D/3", + "28:", + "z://end" + ] +} diff --git a/qpdf/qtest/qpdf/set-page-labels.out b/qpdf/qtest/qpdf/set-page-labels.out new file mode 100644 index 00000000..b0bfe14a --- /dev/null +++ b/qpdf/qtest/qpdf/set-page-labels.out @@ -0,0 +1,8 @@ +1 << /S /a /St 1 >> +3 << /S /R /St 2 >> +6 << /P (Z-) /S /r /St 1 >> +8 << /S /A /St 17 >> +21 << /S /D /St 3 >> +28 << /St 1 >> +30 << /P (end) /St 1 >> +test 47 done |