forked from NetsoftHoldings/poppler
-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathpoppler-page.h
225 lines (178 loc) · 5.82 KB
/
poppler-page.h
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
36
37
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
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
/*
* Copyright (C) 2009-2010, Pino Toscano <[email protected]>
* Copyright (C) 2018, 2020, Suzuki Toshiya <[email protected]>
* Copyright (C) 2018-2020, Albert Astals Cid <[email protected]>
* Copyright (C) 2018, Zsombor Hollay-Horvath <[email protected]>
* Copyright (C) 2018, Aleksey Nikolaev <[email protected]>
* Copyright (C) 2020, Jiri Jakes <[email protected]>
* Copyright (C) 2020, Adam Reichold <[email protected]>
*
* 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.
*/
#ifndef POPPLER_PAGE_H
#define POPPLER_PAGE_H
#include "poppler-global.h"
#include "poppler-rectangle.h"
#include <memory>
namespace poppler {
struct text_box_data;
class POPPLER_CPP_EXPORT text_box
{
friend class page;
public:
text_box(text_box &&) noexcept;
text_box &operator=(text_box &&) noexcept;
~text_box();
ustring text() const;
rectf bbox() const;
/**
\since 0.68
*/
int rotation() const;
/**
Get a bbox for the i-th glyph
This method returns a rectf of the bounding box for
the i-th glyph in the text_box.
\note The text_box object owns the rectf objects,
the caller is not needed to free them.
\warning For too large glyph index, rectf(0,0,0,0)
is returned. The number of the glyphs and ustring
codepoints might be different in some complex scripts.
*/
rectf char_bbox(size_t i) const;
bool has_space_after() const;
/**
\since 0.89
*/
bool has_font_info() const;
/**
Get a writing mode for the i-th glyph
This method returns an enum of the writing mode
for the i-th glyph in the text_box.
\note Usually all glyphs in one text_box have the
same writing mode. Thus the default value of the
glyph index is 0.
*/
enum writing_mode_enum
{
invalid_wmode = -1,
horizontal_wmode = 0,
vertical_wmode = 1
};
/**
\since 0.89
*/
writing_mode_enum get_wmode(int i = 0) const;
/**
Get a font size of this text_box instance.
This method return a double floating value of the
font size from the text_box instance.
*/
/**
\since 0.89
*/
double get_font_size() const;
/**
Get a font name for the i-th glyph
This method returns a std::string object holding
the font name for the i-th glyph.
\note The randomization prefix of the embedded fonts
are not removed. The font names including these
prefixes are insuffucient to determine whether the
two fonts are same or different.
\note The clients should not assume that the
encoding of the font name is one of the ASCII,
Latin1 or UTF-8. Some legacy PDF producers used
in CJK market use GBK, Big5, Wansung or Shift-JIS.
*/
/**
\since 0.89
*/
std::string get_font_name(int i = 0) const;
private:
text_box(text_box_data *data);
std::unique_ptr<text_box_data> m_data;
};
class document;
class document_private;
class page_private;
class page_transition;
class POPPLER_CPP_EXPORT page : public poppler::noncopyable
{
public:
enum orientation_enum
{
landscape,
portrait,
seascape,
upside_down
};
enum search_direction_enum
{
search_from_top,
search_next_result,
search_previous_result
};
enum text_layout_enum
{
physical_layout,
raw_order_layout,
non_raw_non_physical_layout ///< \since 0.88
};
~page();
orientation_enum orientation() const;
double duration() const;
rectf page_rect(page_box_enum box = crop_box) const;
ustring label() const;
page_transition *transition() const;
bool search(const ustring &text, rectf &r, search_direction_enum direction, case_sensitivity_enum case_sensitivity, rotation_enum rotation = rotate_0) const;
ustring text(const rectf &rect = rectf()) const;
ustring text(const rectf &rect, text_layout_enum layout_mode) const;
/**
Returns a list of text of the page
This method returns a std::vector of text_box that contain all
the text of the page, with roughly one text word of text
per text_box item.
For text written in western languages (left-to-right and
up-to-down), the std::vector contains the text in the proper
order.
\since 0.63
\note The page object owns the text_box objects as unique_ptr,
the caller is not needed to free them.
\warning This method is not tested with Asian scripts
*/
std::vector<text_box> text_list() const;
/*
* text_list_option_enum is a bitmask-style flags for text_list(),
* 0 means the default & simplest behaviour.
*/
enum text_list_option_enum
{
text_list_include_font = 1 // \since 0.89
};
/**
Extended version of text_list() taking an option flag.
The option flag should be the multiple of text_list_option_enum.
\since 0.89
*/
std::vector<text_box> text_list(int opt_flag) const;
private:
page(document_private *doc, int index);
page_private *d;
friend class page_private;
friend class document;
};
}
#endif