// This file is part of Extract PDFmark. // // Copyright (C) 2019 Masamichi Hosoda // // Extract PDFmark 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 3 of the License, or // (at your option) any later version. // // Extract PDFmark 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 Extract PDFmark. If not, see . #include "config.h" #include "poppler-cpp.hh" #include #include #include std::string poppler_cpp::walk (const std::string &name, const poppler::destination &dest) { std::stringstream ss; switch (dest.type ()) { case poppler::destination::type_enum::xyz: ss << "[ /Dest " << encode_name (name) << " /Page " << dest.page_number () << " /View [/XYZ " << dest.left () << " " << dest.top () << " " << dest.zoom () << "] /DEST pdfmark" << std::endl; break; case poppler::destination::type_enum::fit: ss << "[ /Dest " << encode_name (name) << " /Page " << dest.page_number () << " /View [/Fit] /DEST pdfmark" << std::endl; break; case poppler::destination::type_enum::fit_h: ss << "[ /Dest " << encode_name (name) << " /Page " << dest.page_number () << " /View [/FitH " << dest.top () << "] /DEST pdfmark" << std::endl; break; case poppler::destination::type_enum::fit_v: ss << "[ /Dest " << encode_name (name) << " /Page " << dest.page_number () << " /View [/FitV " << dest.left () << "] /DEST pdfmark" << std::endl; break; case poppler::destination::type_enum::fit_r: ss << "[ /Dest " << encode_name (name) << " /Page " << dest.page_number () << " /View [/FitR " << dest.left () << " " << dest.bottom () << " " << dest.right () << " " << dest.top () << "] /DEST pdfmark" << std::endl; break; case poppler::destination::type_enum::fit_b: ss << "[ /Dest " << encode_name (name) << " /Page " << dest.page_number () << " /View [/FitB] /DEST pdfmark" << std::endl; break; case poppler::destination::type_enum::fit_b_h: ss << "[ /Dest " << encode_name (name) << " /Page " << dest. page_number () << " /View [/FitBH " << dest.top () << "] /DEST pdfmark" << std::endl; break; case poppler::destination::type_enum::fit_b_v: ss << "[ /Dest " << encode_name (name) << " /Page " << dest.page_number () << " /View [/FitBV " << dest.left () << "] /DEST pdfmark" << std::endl; break; case poppler::destination::type_enum::unknown: ss << "% dest type is unknown." << std::endl; break; default: ss << "% dest type error." << std::endl; break; } return ss.str (); } std::string poppler_cpp::destname (void) { auto map {doc->create_destination_map ()}; std::string retval; for (const auto& pair: map) retval += walk (pair.first, pair.second); return retval; }