// Copyright (C) 2013 EPITA Research and Development Laboratory (LRDE) // // This file is part of Olena. // // Olena 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, version 2 of the License. // // Olena 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 Olena. If not, see . // // As a special exception, you may use this file as part of a free // software project without restriction. Specifically, if other files // instantiate templates or use macros or inline functions from this // file, or you compile this file and link it with other files to produce // an executable, this file does not by itself cause the resulting // executable to be covered by the GNU General Public License. This // exception does not however invalidate any other reasons why the // executable file might be covered by the GNU General Public License. #ifndef MLN_IO_PDF_GET_HEADER_HH # define MLN_IO_PDF_GET_HEADER_HH /// \file /// /// Load PDF header. # include # include #include # include # include # include # include # include # include namespace mln { namespace io { namespace pdf { /*! \brief Store pdf file header. \ingroup iopdf */ struct pdf_header { pdf_header(const poppler::document *doc); int page_count; int pdf_version_major; int pdf_version_minor; bool is_encrypted; bool is_linearized; bool is_locked; std::string metadata; }; /*! \brief Retrieve header in a pdf file. \ingroup iopdf */ pdf_header get_header(const std::string& filename); # ifndef MLN_INCLUDE_ONLY // Begin of pdf_header implementation. pdf_header::pdf_header(const poppler::document *doc) { page_count = doc->pages(); doc->get_pdf_version(&pdf_version_major, 0); doc->get_pdf_version(0, &pdf_version_minor); is_encrypted = doc->is_encrypted(); is_linearized = doc->is_linearized(); is_locked = doc->is_locked(); metadata = doc->metadata().to_utf8(); } // End of pdf_header implementation. inline pdf_header get_header(const std::string& filename) { mln_trace("mln::io::pdf::get_header"); // Load document poppler::document *pdf = poppler::document::load_from_file(filename); if (pdf == 0) { std::cerr << "Error: Cannot load PDF " << filename << std::endl; abort(); } // Initialize structure with pdf information. pdf_header header(pdf); // Clear pdf document. delete pdf; return header; } # endif // ! MLN_INCLUDE_ONLY } // end of namespace mln::io::pdf } // end of namespace mln::io } // end of namespace mln #endif // ! MLN_IO_PDF_GET_HEADER_HH