Download raw (5.3 KB)
/* * Copyright (C) 2012, Pierre Marchand <pierre@oep-h.com> * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2, or (at your option) * any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 51 Franklin Street - Fifth Floor, Boston, MA 02110-1301, USA. */ #include <boost/python.hpp> #include <boost/smart_ptr.hpp> #include <poppler-document.h> #include <poppler-page.h> #include <poppler-page-renderer.h> #include <poppler-image.h> typedef boost::shared_ptr<poppler::document> DocumentPtr; typedef boost::shared_ptr<poppler::page> PagePtr; class DocumentLoader { public: DocumentPtr from_file(const std::string& fn) { return DocumentPtr(poppler::document::load_from_file(fn)); } DocumentPtr from_data(const std::string& data) { poppler::byte_array *b_data(new poppler::byte_array(data.begin(), data.end())); poppler::document* doc(poppler::document::load_from_data(b_data)); if(!doc) { // std::cerr<<"Couldn't create a Poppler document"<<std::endl; return DocumentPtr(); } DocumentPtr ret(doc); return ret; } }; PagePtr page(DocumentPtr doc, int idx) { return PagePtr(doc->create_page(idx)); } // BOOST_PYTHON_MEMBER_FUNCTION_OVERLOADS(page_rect_overloads, poppler::page::page_rect, poppler::crop_box, 1); BOOST_PYTHON_MEMBER_FUNCTION_OVERLOADS(render_page_overloads, poppler::page_renderer::render_page, 1, 8); std::string image_data(poppler::image* image) { return std::string(image->const_data(), image->bytes_per_row() * image->height()); } BOOST_PYTHON_MODULE(vc_poppler) { using namespace boost::python; /// global enum_<poppler::rotation_enum>("rotation") .value("rotate_0", poppler::rotate_0) .value("rotate_90", poppler::rotate_90) .value("rotate_180", poppler::rotate_180) .value("rotate_270", poppler::rotate_270) ; enum_<poppler::page_box_enum>("page_box") .value("media_box", poppler::media_box) .value("crop_box", poppler::crop_box) .value("bleed_box", poppler::bleed_box) .value("trim_box", poppler::trim_box) .value("art_box", poppler::art_box) ; /// rectangle class_<poppler::rectf>("Rect") .def("x", &poppler::rectf::x) .def("y", &poppler::rectf::y) .def("width", &poppler::rectf::width) .def("height", &poppler::rectf::height) ; /// document class_<DocumentLoader>("Loader") .def("from_file", &DocumentLoader::from_file) .def("from_data", &DocumentLoader::from_data) ; // PagePtr (poppler::document::*bp_create_page_)(int) const =&poppler::document::create_page; class_<poppler::document, DocumentPtr, boost::noncopyable>("Document", no_init) // .def("load_from_file", load_from_file, return_value_policy<manage_new_object>()) // .def("load_from_data", load_from_data, return_value_policy<manage_new_object>()) .def("pages", &poppler::document::pages) .def("page", page) ; enum_<poppler::document::page_mode_enum>("page_mode") .value("use_none", poppler::document::use_none) .value("use_outlines", poppler::document::use_outlines) .value("use_thumbs", poppler::document::use_thumbs) .value("fullscreen", poppler::document::fullscreen) .value("use_oc", poppler::document::use_oc) .value("use_attach", poppler::document::use_attach) ; enum_<poppler::document::page_layout_enum>("page_layout") .value("no_layout", poppler::document::no_layout) .value("single_page", poppler::document::single_page) .value("one_column", poppler::document::one_column) .value("two_column_left", poppler::document::two_column_left) .value("two_column_right", poppler::document::two_column_right) .value("two_page_left", poppler::document::two_page_left) .value("two_page_right", poppler::document::two_page_right) ; /// page class_<poppler::page, PagePtr, boost::noncopyable>("Page", no_init) .def("rect", &poppler::page::page_rect) ; /// page_renderer class_<poppler::page_renderer, boost::noncopyable>("PageRenderer") .def("render_page", &poppler::page_renderer::render_page, render_page_overloads(args("page", "xres","yres", "x", "y", "w", "h", "rotate"), "Render the given page and return an Image")) .def("set_render_hint", &poppler::page_renderer::set_render_hint) ; enum_<poppler::page_renderer::render_hint>("render_hint") .value("antialiasing", poppler::page_renderer::antialiasing) .value("text_antialiasing", poppler::page_renderer::text_antialiasing) .value("text_hinting", poppler::page_renderer::text_hinting) ; /// image class_<poppler::image>("Image") .def("data", image_data) .def("format", &poppler::image::format) .def("width", &poppler::image::width) .def("height", &poppler::image::height) .def("bytes_per_row", &poppler::image::bytes_per_row) ; enum_<poppler::image::format_enum>("format_enum") .value("format_invalid", poppler::image::format_invalid) .value("format_mono", poppler::image::format_mono) .value("format_rgb24", poppler::image::format_rgb24) .value("format_argb32", poppler::image::format_argb32) ; }