diff options
author | Jay Berkenbilt <ejb@ql.org> | 2021-01-02 20:05:17 +0100 |
---|---|---|
committer | Jay Berkenbilt <ejb@ql.org> | 2021-01-02 20:08:53 +0100 |
commit | 3be58f49e57da67cf79b61061d8b1a0f7ccf7cff (patch) | |
tree | 2d651afb06b9037d5dc8aab2745ea9e65652885f /qpdf | |
parent | 98da4fd83527f47a28132ff4a120bc043d9e58f6 (diff) | |
download | qpdf-3be58f49e57da67cf79b61061d8b1a0f7ccf7cff.tar.zst |
Make more QPDFPageObjectHelper methods work with form XObject
Diffstat (limited to 'qpdf')
-rw-r--r-- | qpdf/qpdf.cc | 2 | ||||
-rw-r--r-- | qpdf/qtest/qpdf.test | 7 | ||||
-rw-r--r-- | qpdf/qtest/qpdf/page-ops-on-form-xobject.out | 47 | ||||
-rw-r--r-- | qpdf/test_driver.cc | 23 | ||||
-rw-r--r-- | qpdf/test_tokenizer.cc | 2 |
5 files changed, 77 insertions, 4 deletions
diff --git a/qpdf/qpdf.cc b/qpdf/qpdf.cc index cc02e1fd..c11f2486 100644 --- a/qpdf/qpdf.cc +++ b/qpdf/qpdf.cc @@ -3539,7 +3539,7 @@ static void do_check(QPDF& pdf, Options& o, int& exit_code) ++pageno; try { - page.parsePageContents(&discard_contents); + page.parseContents(&discard_contents); } catch (QPDFExc& e) { diff --git a/qpdf/qtest/qpdf.test b/qpdf/qtest/qpdf.test index 9931e7dc..6919bfcf 100644 --- a/qpdf/qtest/qpdf.test +++ b/qpdf/qtest/qpdf.test @@ -423,7 +423,7 @@ foreach my $i (@choice_values) show_ntests(); # ---------- $td->notify("--- Form XObject, underlay, overlay ---"); -$n_tests += 19; +$n_tests += 20; $td->runtest("form xobject creation", {$td->COMMAND => "test_driver 55 fxo-red.pdf"}, @@ -491,6 +491,11 @@ $td->runtest("foreach", {$td->FILE => "nested-form-xobjects.out", $td->EXIT_STATUS => 0}, $td->NORMALIZE_NEWLINES); +$td->runtest("page operations on form xobject", + {$td->COMMAND => "test_driver 72 nested-form-xobjects.pdf"}, + {$td->FILE => "page-ops-on-form-xobject.out", + $td->EXIT_STATUS => 0}, + $td->NORMALIZE_NEWLINES); show_ntests(); # ---------- diff --git a/qpdf/qtest/qpdf/page-ops-on-form-xobject.out b/qpdf/qtest/qpdf/page-ops-on-form-xobject.out new file mode 100644 index 00000000..f6d05af4 --- /dev/null +++ b/qpdf/qtest/qpdf/page-ops-on-form-xobject.out @@ -0,0 +1,47 @@ +--- parseContents --- +content size: 173 +operator, offset=0, length=2: BT +name, offset=5, length=3: /F1 +integer, offset=9, length=2: 24 +operator, offset=12, length=2: Tf +integer, offset=17, length=1: 0 +integer, offset=19, length=3: 320 +operator, offset=23, length=2: Td +string, offset=28, length=5: (FX1) +operator, offset=34, length=2: Tj +operator, offset=37, length=2: ET +operator, offset=40, length=1: q +integer, offset=42, length=3: 100 +integer, offset=46, length=1: 0 +integer, offset=48, length=1: 0 +integer, offset=50, length=3: 100 +integer, offset=54, length=3: 0 +integer, offset=58, length=3: 200 +operator, offset=62, length=2: cm +name, offset=65, length=4: /Im1 +operator, offset=70, length=2: Do +operator, offset=73, length=1: Q +operator, offset=75, length=1: q +integer, offset=77, length=3: 100 +integer, offset=81, length=1: 0 +integer, offset=83, length=1: 0 +integer, offset=85, length=3: 100 +integer, offset=89, length=3: 120 +integer, offset=93, length=3: 200 +operator, offset=97, length=2: cm +name, offset=100, length=4: /Im2 +operator, offset=105, length=2: Do +operator, offset=108, length=1: Q +operator, offset=110, length=1: q +real, offset=112, length=7: 1.00000 +real, offset=120, length=7: 0.00000 +real, offset=128, length=7: 0.00000 +real, offset=136, length=7: 1.00000 +real, offset=144, length=7: 0.00000 +real, offset=152, length=7: 0.00000 +operator, offset=160, length=2: cm +name, offset=163, length=4: /Fx1 +operator, offset=168, length=2: Do +operator, offset=171, length=1: Q +-EOF- +test 72 done diff --git a/qpdf/test_driver.cc b/qpdf/test_driver.cc index ff55e63f..aef46d87 100644 --- a/qpdf/test_driver.cc +++ b/qpdf/test_driver.cc @@ -1463,7 +1463,7 @@ void runtest(int n, char const* filename1, char const* arg2) { QPDFPageObjectHelper& page(*iter); ParserCallbacks cb; - page.parsePageContents(&cb); + page.parseContents(&cb); } } else if (n == 38) @@ -2279,6 +2279,27 @@ void runtest(int n, char const* filename1, char const* arg2) std::cout << i.first << " -> " << i.second.unparse() << std::endl; } } + else if (n == 72) + { + // Call some QPDFPageObjectHelper methods on form XObjects. + auto page = QPDFPageDocumentHelper(pdf).getAllPages().at(0); + auto fx1 = QPDFPageObjectHelper( + page.getObjectHandle() + .getKey("/Resources") + .getKey("/XObject") + .getKey("/Fx1")); + std::cout << "--- parseContents ---" << std::endl; + ParserCallbacks cb; + fx1.parseContents(&cb); + Pl_Buffer b("buffer"); + fx1.addContentTokenFilter(new TokenFilter); + fx1.pipeContents(&b); + std::unique_ptr<Buffer> buf(b.getBuffer()); + std::string s( + reinterpret_cast<char const*>(buf->getBuffer()), + buf->getSize()); + assert(s.find("/bye") != std::string::npos); + } else { throw std::runtime_error(std::string("invalid test ") + diff --git a/qpdf/test_tokenizer.cc b/qpdf/test_tokenizer.cc index b8a51b81..8c2b557e 100644 --- a/qpdf/test_tokenizer.cc +++ b/qpdf/test_tokenizer.cc @@ -219,7 +219,7 @@ static void process(char const* filename, bool include_ignorable, { ++pageno; Pl_Buffer plb("buffer"); - (*iter).pipePageContents(&plb); + (*iter).pipeContents(&plb); PointerHolder<Buffer> content_data = plb.getBuffer(); BufferInputSource* bis = new BufferInputSource( "content data", content_data.getPointer()); |