// This file is part of Extract PDFmark.
//
// Copyright (C) 2016, 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-glib.hh"
#include
#include
#include
#include
#include
std::unique_ptr create_output_pdfmark (void)
{
return std::unique_ptr (new poppler_glib ());
}
namespace
{
std::string get_uri (const std::string &filename)
{
std::string abs_filename;
if (g_path_is_absolute (filename.c_str ()))
abs_filename = filename;
else
{
std::unique_ptr dir
{g_get_current_dir (), g_free};
std::unique_ptr abs
{g_build_filename (dir.get (), filename.c_str (), nullptr), g_free};
abs_filename = abs.get ();
}
GError *error {nullptr};
std::unique_ptr uri
{g_filename_to_uri (abs_filename.c_str (), nullptr, &error), g_free};
if (!uri)
{
std::cerr << "g_filename_to_uri failed: " << abs_filename;
if (error)
{
std::cerr << ": " << error->message << std::endl;
g_error_free (error);
}
else
{
std::cerr << std::endl;
}
return "";
}
return uri.get ();
}
}
bool poppler_glib::open (const std::string &pdf_filename)
{
GError *error {nullptr};
document = poppler_document_new_from_file (get_uri (pdf_filename).c_str (),
nullptr, &error);
if (!document)
{
std::cerr << "poppler_document_new_from_file failed: " << pdf_filename;
if (error)
{
std::cerr << ": " << error->message << std::endl;
g_error_free (error);
}
else
{
std::cerr << std::endl;
}
return false;
}
return true;
}
std::string poppler_glib::version (void)
{
std::stringstream ss;
ss << "Compiled with poppler-glib "
<< POPPLER_MAJOR_VERSION << "."
<< POPPLER_MINOR_VERSION << "."
<< POPPLER_MICRO_VERSION
<< ", glib "
<< GLIB_MAJOR_VERSION << "."
<< GLIB_MINOR_VERSION << "."
<< GLIB_MICRO_VERSION
<< ".\nRunning with poppler-glib "
<< poppler_get_version ()
<< ", glib "
<< glib_major_version << "."
<< glib_minor_version << "."
<< glib_micro_version
<< ".\n";
return ss.str ();
}