get_header.hh 3.13 KB
Newer Older
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
// 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 <http://www.gnu.org/licenses/>.
//
// 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 <iostream>
# include <fstream>

Guillaume Lazzara's avatar
Guillaume Lazzara committed
36
37
#include <poppler/cpp/poppler-document.h>

38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
# include <mln/core/concept/image.hh>
# include <mln/core/routine/initialize.hh>
# include <mln/core/box_runstart_piter.hh>
# include <mln/core/pixel.hh>
# include <mln/data/memcpy_.hh>
# include <mln/util/array.hh>

namespace mln
{

  namespace io
  {

    namespace pdf
    {

      /// Store pdf file header.
      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;
      };


      /// Retrieve header in a pdf file.
      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_latin1();
      }

      // End of pdf_header implementation.



      inline
      pdf_header get_header(const std::string& filename)
      {
	trace::entering("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;

	trace::exiting("mln::io::pdf::get_header");
	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