aboutsummaryrefslogtreecommitdiffstats
path: root/qpdf
diff options
context:
space:
mode:
authorJay Berkenbilt <ejb@ql.org>2024-01-05 22:11:09 +0100
committerJay Berkenbilt <ejb@ql.org>2024-01-05 23:12:12 +0100
commit7cac433e2d9256fb8361aa53d136d4eaacfda6fe (patch)
tree91e18e06655d5d83dd745032641cdd7406785ced /qpdf
parent543038c52a3e0dc166565142ed7efb183e461948 (diff)
downloadqpdf-7cac433e2d9256fb8361aa53d136d4eaacfda6fe.tar.zst
Implement --set-page-labels and supporting API (fixes #939)
Diffstat (limited to 'qpdf')
-rw-r--r--qpdf/qtest/page-labels.test39
-rw-r--r--qpdf/qtest/qpdf/set-page-labels.json11
-rw-r--r--qpdf/qtest/qpdf/set-page-labels.out8
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