summaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorJames R. Barlow <jim@purplerock.ca>2019-07-19 01:57:22 -0700
committerJames R. Barlow <jim@purplerock.ca>2019-07-19 01:57:22 -0700
commite42666398a0ecb4ca012a16c01f460a0b3170754 (patch)
treeebacc5c5df3db189eae7d4244d2db37bf3103eba /src
parent2420180d0aea836c18db1794467b0a3dde3027df (diff)
Can now filter page contents; very basic
Diffstat (limited to 'src')
-rw-r--r--src/qpdf/object.cpp16
-rw-r--r--src/qpdf/object_parsers.h9
-rw-r--r--src/qpdf/page.cpp13
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()
+ );
+ }
+ )
;
}