diff options
author | Jay Berkenbilt <ejb@ql.org> | 2018-12-18 19:08:55 +0100 |
---|---|---|
committer | Jay Berkenbilt <ejb@ql.org> | 2018-12-18 22:46:10 +0100 |
commit | f38df27aa3eae905e3ee90365099335e317173d8 (patch) | |
tree | 3a0c8ac95e389889cbcee3a92924d2652e2d42a0 /qpdf | |
parent | 077d3d451204393d17b9a14c2145487c35fce572 (diff) | |
download | qpdf-f38df27aa3eae905e3ee90365099335e317173d8.tar.zst |
Add QPDFNumberTreeObjectHelper
Diffstat (limited to 'qpdf')
-rw-r--r-- | qpdf/qtest/qpdf.test | 10 | ||||
-rw-r--r-- | qpdf/qtest/qpdf/number-tree.out | 15 | ||||
-rw-r--r-- | qpdf/qtest/qpdf/number-tree.pdf | 171 | ||||
-rw-r--r-- | qpdf/test_driver.cc | 30 |
4 files changed, 226 insertions, 0 deletions
diff --git a/qpdf/qtest/qpdf.test b/qpdf/qtest/qpdf.test index 17497710..9ea5b61d 100644 --- a/qpdf/qtest/qpdf.test +++ b/qpdf/qtest/qpdf.test @@ -226,6 +226,16 @@ foreach my $input (@ext_inputs) } show_ntests(); # ---------- +$td->notify("--- Number Trees ---"); +$n_tests += 1; + +$td->runtest("number trees", + {$td->COMMAND => "test_driver 46 number-tree.pdf"}, + {$td->FILE => "number-tree.out", $td->EXIT_STATUS => 0}, + $td->NORMALIZE_NEWLINES); + +show_ntests(); +# ---------- $td->notify("--- Page API Tests ---"); $n_tests += 9; diff --git a/qpdf/qtest/qpdf/number-tree.out b/qpdf/qtest/qpdf/number-tree.out new file mode 100644 index 00000000..b4b16535 --- /dev/null +++ b/qpdf/qtest/qpdf/number-tree.out @@ -0,0 +1,15 @@ +1 one +2 two +3 three +5 five +6 six +9 nine +11 elephant +12 twelve +15 fifteen +19 nineteen +20 twenty +22 twenty-two +23 twenty-three +29 twenty-nine +test 46 done diff --git a/qpdf/qtest/qpdf/number-tree.pdf b/qpdf/qtest/qpdf/number-tree.pdf new file mode 100644 index 00000000..35c1e375 --- /dev/null +++ b/qpdf/qtest/qpdf/number-tree.pdf @@ -0,0 +1,171 @@ +%PDF-1.3 +%¿÷¢þ +%QDF-1.0 + +1 0 obj +<< + /Pages 2 0 R + /Type /Catalog +>> +endobj + +2 0 obj +<< + /Count 1 + /Kids [ + 3 0 R + ] + /Type /Pages +>> +endobj + +%% Page 1 +3 0 obj +<< + /Contents 4 0 R + /MediaBox [ + 0 + 0 + 612 + 792 + ] + /Parent 2 0 R + /Resources << + /Font << + /F1 6 0 R + >> + /ProcSet 7 0 R + >> + /Type /Page +>> +endobj + +%% Contents for page 1 +4 0 obj +<< + /Length 5 0 R +>> +stream +BT + /F1 24 Tf + 72 720 Td + (Potato) Tj +ET +endstream +endobj + +5 0 obj +44 +endobj + +6 0 obj +<< + /BaseFont /Helvetica + /Encoding /WinAnsiEncoding + /Name /F1 + /Subtype /Type1 + /Type /Font +>> +endobj + +7 0 obj +[ + /PDF + /Text +] +endobj + +8 0 obj +<< + /Kids [ + 9 0 R + 10 0 R + ] +>> +endobj + +9 0 obj +<< + /Kids [ + 11 0 R + 12 0 R + ] + /Limits [ + 0 + 19 + ] +>> +endobj + +10 0 obj +<< + /Limits [ + 20 + 29 + ] + /Nums [ + 20 (twenty) + 22 (twenty-two) + 23 (twenty-three) + 29 (twenty-nine) + ] +>> +endobj + +11 0 obj +<< + /Limits [ + 0 + 9 + ] + /Nums [ + 1 (one) + 2 (two) + 3 (three) + 5 (five) + 6 (six) + 9 (nine) + ] +>> +endobj + +12 0 obj +<< + /Limits [ + 11 + 19 + ] + /Nums [ + 11 (elephant) + 12 (twelve) + 15 (fifteen) + 19 (nineteen) + ] +>> +endobj + + +xref +0 13 +0000000000 65535 f +0000000025 00000 n +0000000079 00000 n +0000000161 00000 n +0000000376 00000 n +0000000475 00000 n +0000000494 00000 n +0000000612 00000 n +0000000647 00000 n +0000000704 00000 n +0000000791 00000 n +0000000937 00000 n +0000001078 00000 n +trailer << + /Root 1 0 R + /QTest 8 0 R + /Size 13 + /ID [<2c3b7a6ec7fc61db8a5db4eebf57f540><2c3b7a6ec7fc61db8a5db4eebf57f540>] +>> +startxref +1215 +%%EOF diff --git a/qpdf/test_driver.cc b/qpdf/test_driver.cc index 74b34396..3bcb173e 100644 --- a/qpdf/test_driver.cc +++ b/qpdf/test_driver.cc @@ -6,6 +6,7 @@ #include <qpdf/QPDFPageDocumentHelper.hh> #include <qpdf/QPDFPageObjectHelper.hh> #include <qpdf/QPDFAcroFormDocumentHelper.hh> +#include <qpdf/QPDFNumberTreeObjectHelper.hh> #include <qpdf/QUtil.hh> #include <qpdf/QTC.hh> #include <qpdf/Pl_StdioFile.hh> @@ -1660,6 +1661,35 @@ void runtest(int n, char const* filename1, char const* arg2) exit(3); } } + else if (n == 46) + { + // Test number tree. This test is crafted to work with + // number-tree.pdf + QPDFObjectHandle qtest = pdf.getTrailer().getKey("/QTest"); + QPDFNumberTreeObjectHelper ntoh(qtest); + QPDFNumberTreeObjectHelper::idx_map ntoh_map = ntoh.getAsMap(); + for (QPDFNumberTreeObjectHelper::idx_map::iterator iter = + ntoh_map.begin(); + iter != ntoh_map.end(); ++iter) + { + std::cout << (*iter).first << " " + << (*iter).second.getStringValue() + << std::endl; + } + assert(1 == ntoh.getMin()); + assert(29 == ntoh.getMax()); + assert(ntoh.hasIndex(6)); + assert(! ntoh.hasIndex(500)); + QPDFObjectHandle oh; + assert(! ntoh.findObject(4, oh)); + assert(ntoh.findObject(3, oh)); + assert("three" == oh.getStringValue()); + QPDFNumberTreeObjectHelper::numtree_number offset = 0; + assert(! ntoh.findObjectAtOrBelow(0, oh, offset)); + assert(ntoh.findObjectAtOrBelow(8, oh, offset)); + assert("six" == oh.getStringValue()); + assert(2 == offset); + } else { throw std::runtime_error(std::string("invalid test ") + |