diff options
author | Jay Berkenbilt <ejb@ql.org> | 2024-01-02 00:55:45 +0100 |
---|---|---|
committer | Jay Berkenbilt <ejb@ql.org> | 2024-01-02 00:57:32 +0100 |
commit | d8d70ecca264fa5c681dca992a03cfa4c46b3f43 (patch) | |
tree | f9960a48f4550f6a9fc2d09cef27fba66852bdd5 /qpdf | |
parent | 9db5d75b2b40083f339525f7a59b4408cb1b5d2c (diff) | |
download | qpdf-d8d70ecca264fa5c681dca992a03cfa4c46b3f43.tar.zst |
Support comma-separated numeric values with --collate (fixes #505)
Diffstat (limited to 'qpdf')
-rw-r--r-- | qpdf/qtest/arg-parsing.test | 10 | ||||
-rw-r--r-- | qpdf/qtest/collate.test | 8 | ||||
-rw-r--r-- | qpdf/qtest/qpdf/three-files-2,3,4-collate-out.pdf | 988 |
3 files changed, 1002 insertions, 4 deletions
diff --git a/qpdf/qtest/arg-parsing.test b/qpdf/qtest/arg-parsing.test index aca8c7ef..82594674 100644 --- a/qpdf/qtest/arg-parsing.test +++ b/qpdf/qtest/arg-parsing.test @@ -15,7 +15,7 @@ cleanup(); my $td = new TestDriver('arg-parsing'); -my $n_tests = 22; +my $n_tests = 23; $td->runtest("required argument", {$td->COMMAND => "qpdf --password minimal.pdf"}, @@ -94,6 +94,14 @@ $td->runtest("v2-only qpdf json-key", {$td->REGEXP => ".*\"qpdf\" is only valid for json version > 1.*", $td->EXIT_STATUS => 2}, $td->NORMALIZE_NEWLINES); +$td->runtest("wrong number of collate args", + {$td->COMMAND => + "qpdf --collate=2,3 collate-odd.pdf" . + " --pages . minimal.pdf collate-even.pdf -- a.pdf"}, + {$td->REGEXP => ".*--collate has more than one value.*", + $td->EXIT_STATUS => 2}, + $td->NORMALIZE_NEWLINES); + # Ignoring -- at the top level was never intended but turned out to # have been there for a long time so that people relied on it. It is # intentionally not documented. diff --git a/qpdf/qtest/collate.test b/qpdf/qtest/collate.test index fbbea641..fb296e29 100644 --- a/qpdf/qtest/collate.test +++ b/qpdf/qtest/collate.test @@ -17,9 +17,11 @@ my $td = new TestDriver('collate'); my @collate = ( ["", "three-files", "collate-odd", "collate-odd.pdf 1-5 minimal.pdf collate-even.pdf 7-1"], - [1, "three-files", "collate-odd", + ["1", "three-files", "collate-odd", "collate-odd.pdf 1-5 minimal.pdf collate-even.pdf 7-1"], - [2, "three-files-2", "collate-odd", + ["2", "three-files-2", "collate-odd", + "collate-odd.pdf 1-5 minimal.pdf collate-even.pdf 7-1"], + ["2,3,4", "three-files-2,3,4", "collate-odd", "collate-odd.pdf 1-5 minimal.pdf collate-even.pdf 7-1"], ); my $n_tests = 2 * scalar(@collate); @@ -28,7 +30,7 @@ foreach my $d (@collate) { my ($n, $description, $first, $args) = @$d; my $collate = '--collate'; - if ($n) + if ($n ne "") { $collate .= "=$n"; } diff --git a/qpdf/qtest/qpdf/three-files-2,3,4-collate-out.pdf b/qpdf/qtest/qpdf/three-files-2,3,4-collate-out.pdf new file mode 100644 index 00000000..8be9c056 --- /dev/null +++ b/qpdf/qtest/qpdf/three-files-2,3,4-collate-out.pdf @@ -0,0 +1,988 @@ +%PDF-1.3 +%¿÷¢þ +%QDF-1.0 + +%% Original object ID: 1 0 +1 0 obj +<< + /Outlines 2 0 R + /PageLabels << + /Nums [ + 0 + << + /P () + /St 1 + >> + 1 + << + /S /r + /St 1 + >> + 2 + << + /St 3 + >> + 3 + << + /S /D + /St 3 + >> + 4 + << + /P () + /St 1 + >> + 5 + << + /S /r + /St 6 + >> + 6 + << + /P () + /St 1 + >> + 7 + << + /S /r + /St 3 + >> + 8 + << + /S /r + /St 5 + >> + 9 + << + /S /r + /St 4 + >> + 10 + << + /S /r + /St 2 + >> + 11 + << + /P () + /St 2 + >> + 12 + << + /P () + /St 2 + >> + ] + >> + /PageMode /UseOutlines + /Pages 3 0 R + /Type /Catalog +>> +endobj + +%% Original object ID: 2 0 +2 0 obj +<< + /Count 6 + /First 4 0 R + /Last 5 0 R + /Type /Outlines +>> +endobj + +%% Original object ID: 3 0 +3 0 obj +<< + /Count 13 + /Kids [ + 6 0 R + 7 0 R + 8 0 R + 9 0 R + 10 0 R + 11 0 R + 12 0 R + 13 0 R + 14 0 R + 15 0 R + 16 0 R + 17 0 R + 18 0 R + ] + /Type /Pages +>> +endobj + +%% Original object ID: 4 0 +4 0 obj +<< + /Count 4 + /Dest [ + null + /XYZ + null + null + null + ] + /First 19 0 R + /Last 20 0 R + /Next 5 0 R + /Parent 2 0 R + /Title (Isís 1 -> 5: /XYZ null null null) + /Type /Outline +>> +endobj + +%% Original object ID: 5 0 +5 0 obj +<< + /Dest [ + null + /XYZ + 66 + 756 + 3 + ] + /Parent 2 0 R + /Prev 4 0 R + /Title (Trepak 2 -> 15: /XYZ 66 756 3) + /Type /Outline +>> +endobj + +%% Page 1 +%% Original object ID: 6 0 +6 0 obj +<< + /Contents 21 0 R + /MediaBox [ + 0 + 0 + 612 + 792 + ] + /Parent 3 0 R + /Resources << + /Font << + /F1 23 0 R + >> + /ProcSet 24 0 R + >> + /Type /Page +>> +endobj + +%% Page 2 +%% Original object ID: 7 0 +7 0 obj +<< + /Contents 25 0 R + /MediaBox [ + 0 + 0 + 612 + 792 + ] + /Parent 3 0 R + /Resources << + /Font << + /F1 23 0 R + >> + /ProcSet 24 0 R + >> + /Type /Page +>> +endobj + +%% Page 3 +%% Original object ID: 47 0 +8 0 obj +<< + /Contents 27 0 R + /MediaBox [ + 0 + 0 + 612 + 792 + ] + /Parent 3 0 R + /Resources << + /Font << + /F1 29 0 R + >> + /ProcSet 30 0 R + >> + /Type /Page +>> +endobj + +%% Page 4 +%% Original object ID: 51 0 +9 0 obj +<< + /Contents 31 0 R + /MediaBox [ + 0 + 0 + 612 + 792 + ] + /Parent 3 0 R + /Resources << + /Font << + /F1 33 0 R + >> + /ProcSet 34 0 R + >> + /Type /Page +>> +endobj + +%% Page 5 +%% Original object ID: 55 0 +10 0 obj +<< + /Contents 35 0 R + /MediaBox [ + 0 + 0 + 612 + 792 + ] + /Parent 3 0 R + /Resources << + /Font << + /F1 33 0 R + >> + /ProcSet 34 0 R + >> + /Type /Page +>> +endobj + +%% Page 6 +%% Original object ID: 57 0 +11 0 obj +<< + /Contents 37 0 R + /MediaBox [ + 0 + 0 + 612 + 792 + ] + /Parent 3 0 R + /Resources << + /Font << + /F1 33 0 R + >> + /ProcSet 34 0 R + >> + /Type /Page +>> +endobj + +%% Page 7 +%% Original object ID: 59 0 +12 0 obj +<< + /Contents 39 0 R + /MediaBox [ + 0 + 0 + 612 + 792 + ] + /Parent 3 0 R + /Resources << + /Font << + /F1 33 0 R + >> + /ProcSet 34 0 R + >> + /Type /Page +>> +endobj + +%% Page 8 +%% Original object ID: 8 0 +13 0 obj +<< + /Contents 41 0 R + /MediaBox [ + 0 + 0 + 612 + 792 + ] + /Parent 3 0 R + /Resources << + /Font << + /F1 23 0 R + >> + /ProcSet 24 0 R + >> + /Type /Page +>> +endobj + +%% Page 9 +%% Original object ID: 9 0 +14 0 obj +<< + /Contents 43 0 R + /MediaBox [ + 0 + 0 + 612 + 792 + ] + /Parent 3 0 R + /Resources << + /Font << + /F1 23 0 R + >> + /ProcSet 24 0 R + >> + /Type /Page +>> +endobj + +%% Page 10 +%% Original object ID: 61 0 +15 0 obj +<< + /Contents 45 0 R + /MediaBox [ + 0 + 0 + 612 + 792 + ] + /Parent 3 0 R + /Resources << + /Font << + /F1 33 0 R + >> + /ProcSet 34 0 R + >> + /Type /Page +>> +endobj + +%% Page 11 +%% Original object ID: 63 0 +16 0 obj +<< + /Contents 47 0 R + /MediaBox [ + 0 + 0 + 612 + 792 + ] + /Parent 3 0 R + /Resources << + /Font << + /F1 33 0 R + >> + /ProcSet 34 0 R + >> + /Type /Page +>> +endobj + +%% Page 12 +%% Original object ID: 65 0 +17 0 obj +<< + /Contents 49 0 R + /MediaBox [ + 0 + 0 + 612 + 792 + ] + /Parent 3 0 R + /Resources << + /Font << + /F1 33 0 R + >> + /ProcSet 34 0 R + >> + /Type /Page +>> +endobj + +%% Page 13 +%% Original object ID: 10 0 +18 0 obj +<< + /Contents 51 0 R + /MediaBox [ + 0 + 0 + 612 + 792 + ] + /Parent 3 0 R + /Resources << + /Font << + /F1 23 0 R + >> + /ProcSet 24 0 R + >> + /Type /Page +>> +endobj + +%% Original object ID: 21 0 +19 0 obj +<< + /Count -3 + /Dest [ + null + /Fit + ] + /First 53 0 R + /Last 54 0 R + /Next 20 0 R + /Parent 4 0 R + /Title (Amanda 1.1 -> 11: /Fit) + /Type /Outline +>> +endobj + +%% Original object ID: 22 0 +20 0 obj +<< + /Count 2 + /Dest [ + null + /FitH + 792 + ] + /First 55 0 R + /Last 56 0 R + /Parent 4 0 R + /Prev 19 0 R + /Title <feff00530061006e00640079002000f703a303b103bd03b403b900f700200031002e00320020002d003e002000310033003a0020002f00460069007400480020003700390032> + /Type /Outline +>> +endobj + +%% Contents for page 1 +%% Original object ID: 23 0 +21 0 obj +<< + /Length 22 0 R +>> +stream +BT + /F1 24 Tf + 72 720 Td + (Potato 0) Tj +ET +endstream +endobj + +22 0 obj +46 +endobj + +%% Original object ID: 24 0 +23 0 obj +<< + /BaseFont /Helvetica + /Encoding /WinAnsiEncoding + /Name /F1 + /Subtype /Type1 + /Type /Font +>> +endobj + +%% Original object ID: 25 0 +24 0 obj +[ + /PDF + /Text +] +endobj + +%% Contents for page 2 +%% Original object ID: 26 0 +25 0 obj +<< + /Length 26 0 R +>> +stream +BT + /F1 24 Tf + 72 720 Td + (Potato 2) Tj +ET +endstream +endobj + +26 0 obj +46 +endobj + +%% Contents for page 3 +%% Original object ID: 48 0 +27 0 obj +<< + /Length 28 0 R +>> +stream +BT + /F1 24 Tf + 72 720 Td + (Potato) Tj +ET +endstream +endobj + +28 0 obj +44 +endobj + +%% Original object ID: 49 0 +29 0 obj +<< + /BaseFont /Helvetica + /Encoding /WinAnsiEncoding + /Name /F1 + /Subtype /Type1 + /Type /Font +>> +endobj + +%% Original object ID: 50 0 +30 0 obj +[ + /PDF + /Text +] +endobj + +%% Contents for page 4 +%% Original object ID: 52 0 +31 0 obj +<< + /Length 32 0 R +>> +stream +BT + /F1 24 Tf + 72 720 Td + (Potato 13) Tj +ET +endstream +endobj + +32 0 obj +47 +endobj + +%% Original object ID: 53 0 +33 0 obj +<< + /BaseFont /Helvetica + /Encoding /WinAnsiEncoding + /Name /F1 + /Subtype /Type1 + /Type /Font +>> +endobj + +%% Original object ID: 54 0 +34 0 obj +[ + /PDF + /Text +] +endobj + +%% Contents for page 5 +%% Original object ID: 56 0 +35 0 obj +<< + /Length 36 0 R +>> +stream +BT + /F1 24 Tf + 72 720 Td + (Potato 11) Tj +ET +endstream +endobj + +36 0 obj +47 +endobj + +%% Contents for page 6 +%% Original object ID: 58 0 +37 0 obj +<< + /Length 38 0 R +>> +stream +BT + /F1 24 Tf + 72 720 Td + (Potato 9) Tj +ET +endstream +endobj + +38 0 obj +46 +endobj + +%% Contents for page 7 +%% Original object ID: 60 0 +39 0 obj +<< + /Length 40 0 R +>> +stream +BT + /F1 24 Tf + 72 720 Td + (Potato 7) Tj +ET +endstream +endobj + +40 0 obj +46 +endobj + +%% Contents for page 8 +%% Original object ID: 27 0 +41 0 obj +<< + /Length 42 0 R +>> +stream +BT + /F1 24 Tf + 72 720 Td + (Potato 4) Tj +ET +endstream +endobj + +42 0 obj +46 +endobj + +%% Contents for page 9 +%% Original object ID: 28 0 +43 0 obj +<< + /Length 44 0 R +>> +stream +BT + /F1 24 Tf + 72 720 Td + (Potato 6) Tj +ET +endstream +endobj + +44 0 obj +46 +endobj + +%% Contents for page 10 +%% Original object ID: 62 0 +45 0 obj +<< + /Length 46 0 R +>> +stream +BT + /F1 24 Tf + 72 720 Td + (Potato 5) Tj +ET +endstream +endobj + +46 0 obj +46 +endobj + +%% Contents for page 11 +%% Original object ID: 64 0 +47 0 obj +<< + /Length 48 0 R +>> +stream +BT + /F1 24 Tf + 72 720 Td + (Potato 3) Tj +ET +endstream +endobj + +48 0 obj +46 +endobj + +%% Contents for page 12 +%% Original object ID: 66 0 +49 0 obj +<< + /Length 50 0 R +>> +stream +BT + /F1 24 Tf + 72 720 Td + (Potato 1) Tj +ET +endstream +endobj + +50 0 obj +46 +endobj + +%% Contents for page 13 +%% Original object ID: 29 0 +51 0 obj +<< + /Length 52 0 R +>> +stream +BT + /F1 24 Tf + 72 720 Td + (Potato 8) Tj +ET +endstream +endobj + +52 0 obj +46 +endobj + +%% Original object ID: 40 0 +53 0 obj +<< + /Count -2 + /Dest [ + 57 0 R + /FitV + 100 + ] + /First 58 0 R + /Last 59 0 R + /Next 54 0 R + /Parent 19 0 R + /Title (Isosicle 1.1.1 -> 12: /FitV 100) + /Type /Outline +>> +endobj + +%% Original object ID: 41 0 +54 0 obj +<< + /Count 1 + /Dest [ + 57 0 R + /XYZ + null + null + null + ] + /First 60 0 R + /Last 60 0 R + /Parent 19 0 R + /Prev 53 0 R + /Title (Isosicle 1.1.2 -> 12: /XYZ null null null) + /Type /Outline +>> +endobj + +%% Original object ID: 42 0 +55 0 obj +<< + /Dest [ + null + /FitR + 66 + 714 + 180 + 770 + ] + /Next 56 0 R + /Parent 20 0 R + /Title (Trepsichord 1.2.1 -> 1: /FitR 66 714 180 770) + /Type /Outline +>> +endobj + +%% Original object ID: 43 0 +56 0 obj +<< + /Dest [ + 6 0 R + /XYZ + null + null + null + ] + /Parent 20 0 R + /Prev 55 0 R + /Title (Trepsicle 1.2.2 -> 0: /XYZ null null null) + /Type /Outline +>> +endobj + +%% Original object ID: 12 0 +57 0 obj +null +endobj + +%% Original object ID: 44 0 +58 0 obj +<< + /Dest [ + 61 0 R + /XYZ + null + null + null + ] + /Next 59 0 R + /Parent 53 0 R + /Title (Isosicle 1.1.1.1 -> 18: /XYZ null null null) + /Type /Outline +>> +endobj + +%% Original object ID: 45 0 +59 0 obj +<< + /Dest [ + null + /XYZ + null + null + null + ] + /Parent 53 0 R + /Prev 58 0 R + /Title (Isosicle 1.1.1.2 -> 19: /XYZ null null null) + /Type /Outline +>> +endobj + +%% Original object ID: 46 0 +60 0 obj +<< + /Dest [ + 62 0 R + /XYZ + null + null + null + ] + /Parent 54 0 R + /Title (Isosicle 1.1.2.1 -> 22: /XYZ null null null) + /Type /Outline +>> +endobj + +%% Original object ID: 15 0 +61 0 obj +null +endobj + +%% Original object ID: 17 0 +62 0 obj +null +endobj + +xref +0 63 +0000000000 65535 f +0000000052 00000 n +0000000907 00000 n +0000001014 00000 n +0000001243 00000 n +0000001484 00000 n +0000001684 00000 n +0000001916 00000 n +0000002149 00000 n +0000002382 00000 n +0000002615 00000 n +0000002849 00000 n +0000003083 00000 n +0000003316 00000 n +0000003549 00000 n +0000003784 00000 n +0000004019 00000 n +0000004254 00000 n +0000004489 00000 n +0000004713 00000 n +0000004921 00000 n +0000005278 00000 n +0000005381 00000 n +0000005429 00000 n +0000005576 00000 n +0000005663 00000 n +0000005766 00000 n +0000005837 00000 n +0000005938 00000 n +0000005986 00000 n +0000006133 00000 n +0000006220 00000 n +0000006324 00000 n +0000006372 00000 n +0000006519 00000 n +0000006606 00000 n +0000006710 00000 n +0000006781 00000 n +0000006884 00000 n +0000006955 00000 n +0000007058 00000 n +0000007129 00000 n +0000007232 00000 n +0000007303 00000 n +0000007406 00000 n +0000007478 00000 n +0000007581 00000 n +0000007653 00000 n +0000007756 00000 n +0000007828 00000 n +0000007931 00000 n +0000008003 00000 n +0000008106 00000 n +0000008154 00000 n +0000008383 00000 n +0000008639 00000 n +0000008859 00000 n +0000009072 00000 n +0000009122 00000 n +0000009338 00000 n +0000009552 00000 n +0000009753 00000 n +0000009803 00000 n +trailer << + /Root 1 0 R + /Size 63 + /ID [<d3fab8d0603e683dc94e42ac31141868><31415926535897932384626433832795>] +>> +startxref +9825 +%%EOF |