diff options
author | James R. Barlow <jim@purplerock.ca> | 2019-07-19 01:57:22 -0700 |
---|---|---|
committer | James R. Barlow <jim@purplerock.ca> | 2019-07-19 01:57:22 -0700 |
commit | e42666398a0ecb4ca012a16c01f460a0b3170754 (patch) | |
tree | ebacc5c5df3db189eae7d4244d2db37bf3103eba /src | |
parent | 2420180d0aea836c18db1794467b0a3dde3027df (diff) |
Can now filter page contents; very basic
Diffstat (limited to 'src')
-rw-r--r-- | src/qpdf/object.cpp | 16 | ||||
-rw-r--r-- | src/qpdf/object_parsers.h | 9 | ||||
-rw-r--r-- | src/qpdf/page.cpp | 13 |
3 files changed, 35 insertions, 3 deletions
diff --git a/src/qpdf/object.cpp b/src/qpdf/object.cpp index 9963ff2..a644f03 100644 --- a/src/qpdf/object.cpp +++ b/src/qpdf/object.cpp @@ -825,7 +825,21 @@ void init_object(py::module& m) tokenfilter .def(py::init<>()) .def("handle_token", &QPDFObjectHandle::TokenFilter::handleToken) - .def("handle_eof", &QPDFObjectHandle::TokenFilter::handleEOF); + .def("handle_eof", &QPDFObjectHandle::TokenFilter::handleEOF) + .def("write_token", &TokenFilterPublicist::writeToken) + ; + + py::class_<QPDFTokenizer::Token> token(m, "Token"); + token + .def_property_readonly("type_", &QPDFTokenizer::Token::getType) + .def_property_readonly("value", &QPDFTokenizer::Token::getValue) + .def_property_readonly("raw_value", + [](const QPDFTokenizer::Token& t) -> py::bytes { + return t.getRawValue(); + } + ) + .def_property_readonly("error_msg", &QPDFTokenizer::Token::getErrorMessage) + .def("__eq__", &QPDFTokenizer::Token::operator==); m.def("_encode", [](py::handle handle) { diff --git a/src/qpdf/object_parsers.h b/src/qpdf/object_parsers.h index df99b78..5b9675e 100644 --- a/src/qpdf/object_parsers.h +++ b/src/qpdf/object_parsers.h @@ -12,6 +12,7 @@ #include <pybind11/stl.h> #include "pikepdf.h" +#include <qpdf/QPDFTokenizer.hh> class PyParserCallbacks : public QPDFObjectHandle::ParserCallbacks { @@ -151,7 +152,7 @@ public: } void handleEOF() override { - PYBIND11_OVERLOAD_PURE_NAME( + PYBIND11_OVERLOAD_NAME( void, QPDFObjectHandle::TokenFilter, "handle_eof", /* Python name */ @@ -159,3 +160,9 @@ public: ); } }; + + +class TokenFilterPublicist : public QPDFObjectHandle::TokenFilter { +public: + using QPDFObjectHandle::TokenFilter::writeToken; +}; diff --git a/src/qpdf/page.cpp b/src/qpdf/page.cpp index 4ea3b36..9d1ed90 100644 --- a/src/qpdf/page.cpp +++ b/src/qpdf/page.cpp @@ -12,9 +12,11 @@ #include <cctype> #include "pikepdf.h" +#include "object_parsers.h" #include <qpdf/QPDFPageObjectHelper.hh> #include <qpdf/Pipeline.hh> +#include <qpdf/Pl_Buffer.hh> void init_page(py::module& m) { @@ -32,6 +34,15 @@ void init_page(py::module& m) .def("_parse_page_contents", &QPDFPageObjectHelper::parsePageContents) .def("remove_unreferenced_resources", &QPDFPageObjectHelper::removeUnreferencedResources) .def("as_form_xobject", &QPDFPageObjectHelper::getFormXObjectForPage) - .def("_filter_page_contents", &QPDFPageObjectHelper::filterPageContents) + .def("_filter_page_contents", + [](QPDFPageObjectHelper &poh, QPDFObjectHandle::TokenFilter &tf) { + Pl_Buffer pl_buffer("filter_page"); + poh.filterPageContents(&tf, &pl_buffer); + PointerHolder<Buffer> phbuf(pl_buffer.getBuffer()); + poh.getObjectHandle().getKey("/Contents").replaceStreamData( + phbuf, QPDFObjectHandle::newNull(), QPDFObjectHandle::newNull() + ); + } + ) ; } |