1 | /* poppler-page.h: glib interface to poppler |
2 | * Copyright (C) 2004, Red Hat, Inc. |
3 | * |
4 | * This program is free software; you can redistribute it and/or modify |
5 | * it under the terms of the GNU General Public License as published by |
6 | * the Free Software Foundation; either version 2, or (at your option) |
7 | * any later version. |
8 | * |
9 | * This program is distributed in the hope that it will be useful, |
10 | * but WITHOUT ANY WARRANTY; without even the implied warranty of |
11 | * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the |
12 | * GNU General Public License for more details. |
13 | * |
14 | * You should have received a copy of the GNU General Public License |
15 | * along with this program; if not, write to the Free Software |
16 | * Foundation, Inc., 51 Franklin Street - Fifth Floor, Boston, MA 02110-1301, USA. |
17 | */ |
18 | |
19 | #ifndef __POPPLER_PAGE_H__ |
20 | #define __POPPLER_PAGE_H__ |
21 | |
22 | #include <glib-object.h> |
23 | |
24 | #include "poppler.h" |
25 | |
26 | #include <cairo.h> |
27 | |
28 | G_BEGIN_DECLS |
29 | |
30 | #define POPPLER_TYPE_PAGE (poppler_page_get_type()) |
31 | #define POPPLER_PAGE(obj) (G_TYPE_CHECK_INSTANCE_CAST((obj), POPPLER_TYPE_PAGE, PopplerPage)) |
32 | #define POPPLER_IS_PAGE(obj) (G_TYPE_CHECK_INSTANCE_TYPE((obj), POPPLER_TYPE_PAGE)) |
33 | |
34 | POPPLER_PUBLIC |
35 | GType poppler_page_get_type(void) G_GNUC_CONST; |
36 | |
37 | POPPLER_PUBLIC |
38 | void poppler_page_render(PopplerPage *page, cairo_t *cairo); |
39 | POPPLER_PUBLIC |
40 | void poppler_page_render_for_printing(PopplerPage *page, cairo_t *cairo); |
41 | POPPLER_PUBLIC |
42 | void poppler_page_render_for_printing_with_options(PopplerPage *page, cairo_t *cairo, PopplerPrintFlags options); |
43 | POPPLER_PUBLIC |
44 | cairo_surface_t *poppler_page_get_thumbnail(PopplerPage *page); |
45 | POPPLER_PUBLIC |
46 | void poppler_page_render_selection(PopplerPage *page, cairo_t *cairo, PopplerRectangle *selection, PopplerRectangle *old_selection, PopplerSelectionStyle style, PopplerColor *glyph_color, PopplerColor *background_color); |
47 | |
48 | POPPLER_PUBLIC |
49 | void poppler_page_get_size(PopplerPage *page, double *width, double *height); |
50 | POPPLER_PUBLIC |
51 | int poppler_page_get_index(PopplerPage *page); |
52 | POPPLER_PUBLIC |
53 | gchar *poppler_page_get_label(PopplerPage *page); |
54 | POPPLER_PUBLIC |
55 | double poppler_page_get_duration(PopplerPage *page); |
56 | POPPLER_PUBLIC |
57 | PopplerPageTransition *poppler_page_get_transition(PopplerPage *page); |
58 | POPPLER_PUBLIC |
59 | gboolean poppler_page_get_thumbnail_size(PopplerPage *page, int *width, int *height); |
60 | POPPLER_PUBLIC |
61 | GList *poppler_page_find_text_with_options(PopplerPage *page, const char *text, PopplerFindFlags options); |
62 | POPPLER_PUBLIC |
63 | GList *poppler_page_find_text(PopplerPage *page, const char *text); |
64 | POPPLER_PUBLIC |
65 | void poppler_page_render_to_ps(PopplerPage *page, PopplerPSFile *ps_file); |
66 | POPPLER_PUBLIC |
67 | char *poppler_page_get_text(PopplerPage *page); |
68 | POPPLER_PUBLIC |
69 | char *poppler_page_get_text_for_area(PopplerPage *page, PopplerRectangle *area); |
70 | POPPLER_PUBLIC |
71 | char *poppler_page_get_selected_text(PopplerPage *page, PopplerSelectionStyle style, PopplerRectangle *selection); |
72 | POPPLER_PUBLIC |
73 | cairo_region_t *poppler_page_get_selected_region(PopplerPage *page, gdouble scale, PopplerSelectionStyle style, PopplerRectangle *selection); |
74 | POPPLER_PUBLIC |
75 | GList *poppler_page_get_selection_region(PopplerPage *page, gdouble scale, PopplerSelectionStyle style, PopplerRectangle *selection) G_GNUC_DEPRECATED_FOR(poppler_page_get_selected_region); |
76 | POPPLER_PUBLIC |
77 | void poppler_page_selection_region_free(GList *region) G_GNUC_DEPRECATED_FOR(cairo_region_destroy); |
78 | POPPLER_PUBLIC |
79 | GList *poppler_page_get_link_mapping(PopplerPage *page); |
80 | POPPLER_PUBLIC |
81 | void poppler_page_free_link_mapping(GList *list); |
82 | POPPLER_PUBLIC |
83 | GList *poppler_page_get_image_mapping(PopplerPage *page); |
84 | POPPLER_PUBLIC |
85 | void poppler_page_free_image_mapping(GList *list); |
86 | POPPLER_PUBLIC |
87 | cairo_surface_t *poppler_page_get_image(PopplerPage *page, gint image_id); |
88 | POPPLER_PUBLIC |
89 | GList *poppler_page_get_form_field_mapping(PopplerPage *page); |
90 | POPPLER_PUBLIC |
91 | void poppler_page_free_form_field_mapping(GList *list); |
92 | POPPLER_PUBLIC |
93 | GList *poppler_page_get_annot_mapping(PopplerPage *page); |
94 | POPPLER_PUBLIC |
95 | void poppler_page_free_annot_mapping(GList *list); |
96 | POPPLER_PUBLIC |
97 | void poppler_page_add_annot(PopplerPage *page, PopplerAnnot *annot); |
98 | POPPLER_PUBLIC |
99 | void poppler_page_remove_annot(PopplerPage *page, PopplerAnnot *annot); |
100 | POPPLER_PUBLIC |
101 | void poppler_page_get_crop_box(PopplerPage *page, PopplerRectangle *rect); |
102 | POPPLER_PUBLIC |
103 | gboolean poppler_page_get_bounding_box(PopplerPage *page, PopplerRectangle *rect); |
104 | POPPLER_PUBLIC |
105 | gboolean poppler_page_get_text_layout(PopplerPage *page, PopplerRectangle **rectangles, guint *n_rectangles); |
106 | POPPLER_PUBLIC |
107 | gboolean poppler_page_get_text_layout_for_area(PopplerPage *page, PopplerRectangle *area, PopplerRectangle **rectangles, guint *n_rectangles); |
108 | POPPLER_PUBLIC |
109 | GList *poppler_page_get_text_attributes(PopplerPage *page); |
110 | POPPLER_PUBLIC |
111 | void poppler_page_free_text_attributes(GList *list); |
112 | POPPLER_PUBLIC |
113 | GList *poppler_page_get_text_attributes_for_area(PopplerPage *page, PopplerRectangle *area); |
114 | |
115 | /* A rectangle on a page, with coordinates in PDF points. */ |
116 | #define POPPLER_TYPE_RECTANGLE (poppler_rectangle_get_type()) |
117 | /** |
118 | * PopplerRectangle: |
119 | * @x1: x coordinate of lower left corner |
120 | * @y1: y coordinate of lower left corner |
121 | * @x2: x coordinate of upper right corner |
122 | * @y2: y coordinate of upper right corner |
123 | * |
124 | * A #PopplerRectangle is used to describe |
125 | * locations on a page and bounding boxes |
126 | */ |
127 | struct _PopplerRectangle |
128 | { |
129 | gdouble x1; |
130 | gdouble y1; |
131 | gdouble x2; |
132 | gdouble y2; |
133 | }; |
134 | |
135 | POPPLER_PUBLIC |
136 | GType poppler_rectangle_get_type(void) G_GNUC_CONST; |
137 | POPPLER_PUBLIC |
138 | PopplerRectangle *poppler_rectangle_new(void); |
139 | POPPLER_PUBLIC |
140 | PopplerRectangle *poppler_rectangle_copy(PopplerRectangle *rectangle); |
141 | POPPLER_PUBLIC |
142 | void poppler_rectangle_free(PopplerRectangle *rectangle); |
143 | POPPLER_PUBLIC |
144 | gboolean poppler_rectangle_find_get_match_continued(const PopplerRectangle *rectangle); |
145 | POPPLER_PUBLIC |
146 | gboolean poppler_rectangle_find_get_ignored_hyphen(const PopplerRectangle *rectangle); |
147 | |
148 | /* A point on a page, with coordinates in PDF points. */ |
149 | #define POPPLER_TYPE_POINT (poppler_point_get_type()) |
150 | /** |
151 | * PopplerPoint: |
152 | * @x: x coordinate |
153 | * @y: y coordinate |
154 | * |
155 | * A #PopplerPoint is used to describe a location point on a page |
156 | */ |
157 | struct _PopplerPoint |
158 | { |
159 | gdouble x; |
160 | gdouble y; |
161 | }; |
162 | |
163 | POPPLER_PUBLIC |
164 | GType poppler_point_get_type(void) G_GNUC_CONST; |
165 | POPPLER_PUBLIC |
166 | PopplerPoint *poppler_point_new(void); |
167 | POPPLER_PUBLIC |
168 | PopplerPoint *poppler_point_copy(PopplerPoint *point); |
169 | POPPLER_PUBLIC |
170 | void poppler_point_free(PopplerPoint *point); |
171 | |
172 | /* PopplerQuadrilateral */ |
173 | |
174 | /* A quadrilateral encompasses a word or group of contiguous words in the |
175 | * text underlying the annotation. The coordinates for each quadrilateral are |
176 | * given in the order x1 y1 x2 y2 x3 y3 x4 y4 specifying the quadrilateral’s four |
177 | * vertices in counterclockwise order */ |
178 | |
179 | #define POPPLER_TYPE_QUADRILATERAL (poppler_quadrilateral_get_type()) |
180 | /** |
181 | * PopplerQuadrilateral: |
182 | * @p1: a #PopplerPoint with the first vertex coordinates |
183 | * @p2: a #PopplerPoint with the second vertex coordinates |
184 | * @p3: a #PopplerPoint with the third vertex coordinates |
185 | * @p4: a #PopplerPoint with the fourth vertex coordinates |
186 | * |
187 | * A #PopplerQuadrilateral is used to describe rectangle-like polygon |
188 | * with arbitrary inclination on a page. |
189 | * |
190 | * Since: 0.26 |
191 | **/ |
192 | struct _PopplerQuadrilateral |
193 | { |
194 | PopplerPoint p1; |
195 | PopplerPoint p2; |
196 | PopplerPoint p3; |
197 | PopplerPoint p4; |
198 | }; |
199 | |
200 | POPPLER_PUBLIC |
201 | GType poppler_quadrilateral_get_type(void) G_GNUC_CONST; |
202 | POPPLER_PUBLIC |
203 | PopplerQuadrilateral *poppler_quadrilateral_new(void); |
204 | POPPLER_PUBLIC |
205 | PopplerQuadrilateral *poppler_quadrilateral_copy(PopplerQuadrilateral *quad); |
206 | POPPLER_PUBLIC |
207 | void poppler_quadrilateral_free(PopplerQuadrilateral *quad); |
208 | |
209 | /* A color in RGB */ |
210 | #define POPPLER_TYPE_COLOR (poppler_color_get_type()) |
211 | |
212 | /** |
213 | * PopplerColor: |
214 | * @red: the red component of color |
215 | * @green: the green component of color |
216 | * @blue: the blue component of color |
217 | * |
218 | * A #PopplerColor describes a RGB color. Color components |
219 | * are values between 0 and 65535 |
220 | */ |
221 | struct _PopplerColor |
222 | { |
223 | guint16 red; |
224 | guint16 green; |
225 | guint16 blue; |
226 | }; |
227 | |
228 | POPPLER_PUBLIC |
229 | GType poppler_color_get_type(void) G_GNUC_CONST; |
230 | POPPLER_PUBLIC |
231 | PopplerColor *poppler_color_new(void); |
232 | POPPLER_PUBLIC |
233 | PopplerColor *poppler_color_copy(PopplerColor *color); |
234 | POPPLER_PUBLIC |
235 | void poppler_color_free(PopplerColor *color); |
236 | |
237 | /* Text attributes. */ |
238 | #define POPPLER_TYPE_TEXT_ATTRIBUTES (poppler_text_attributes_get_type()) |
239 | /** |
240 | * PopplerTextAttributes: |
241 | * @font_name: font name |
242 | * @font_size: font size |
243 | * @is_underlined: if text is underlined |
244 | * @color: a #PopplerColor, the foreground color |
245 | * @start_index: start position this text attributes apply |
246 | * @end_index: end position this text attributes apply |
247 | * |
248 | * A #PopplerTextAttributes is used to describe text attributes of a range of text |
249 | * |
250 | * Since: 0.18 |
251 | */ |
252 | struct _PopplerTextAttributes |
253 | { |
254 | gchar *font_name; |
255 | gdouble font_size; |
256 | gboolean is_underlined; |
257 | PopplerColor color; |
258 | |
259 | gint start_index; |
260 | gint end_index; |
261 | }; |
262 | |
263 | POPPLER_PUBLIC |
264 | GType poppler_text_attributes_get_type(void) G_GNUC_CONST; |
265 | POPPLER_PUBLIC |
266 | PopplerTextAttributes *poppler_text_attributes_new(void); |
267 | POPPLER_PUBLIC |
268 | PopplerTextAttributes *poppler_text_attributes_copy(PopplerTextAttributes *text_attrs); |
269 | POPPLER_PUBLIC |
270 | void poppler_text_attributes_free(PopplerTextAttributes *text_attrs); |
271 | |
272 | /* Mapping between areas on the current page and PopplerActions */ |
273 | #define POPPLER_TYPE_LINK_MAPPING (poppler_link_mapping_get_type()) |
274 | |
275 | /** |
276 | * PopplerLinkMapping: |
277 | * @area: a #PopplerRectangle representing an area of the page |
278 | * @action: a #PopplerAction |
279 | * |
280 | * A #PopplerLinkMapping structure represents the location |
281 | * of @action on the page |
282 | */ |
283 | struct _PopplerLinkMapping |
284 | { |
285 | PopplerRectangle area; |
286 | PopplerAction *action; |
287 | }; |
288 | |
289 | POPPLER_PUBLIC |
290 | GType poppler_link_mapping_get_type(void) G_GNUC_CONST; |
291 | POPPLER_PUBLIC |
292 | PopplerLinkMapping *poppler_link_mapping_new(void); |
293 | POPPLER_PUBLIC |
294 | PopplerLinkMapping *poppler_link_mapping_copy(PopplerLinkMapping *mapping); |
295 | POPPLER_PUBLIC |
296 | void poppler_link_mapping_free(PopplerLinkMapping *mapping); |
297 | |
298 | /* Page Transition */ |
299 | #define POPPLER_TYPE_PAGE_TRANSITION (poppler_page_transition_get_type()) |
300 | |
301 | /** |
302 | * PopplerPageTransition: |
303 | * @type: the type of transtition |
304 | * @alignment: the dimension in which the transition effect shall occur. |
305 | * Only for #POPPLER_PAGE_TRANSITION_SPLIT and #POPPLER_PAGE_TRANSITION_BLINDS transition types |
306 | * @direction: the direction of motion for the transition effect. |
307 | * Only for #POPPLER_PAGE_TRANSITION_SPLIT, #POPPLER_PAGE_TRANSITION_BOX and #POPPLER_PAGE_TRANSITION_FLY |
308 | * transition types |
309 | * @duration: the duration of the transition effect |
310 | * @angle: the direction in which the specified transition effect shall moves, |
311 | * expressed in degrees counterclockwise starting from a left-to-right direction. |
312 | * Only for #POPPLER_PAGE_TRANSITION_WIPE, #POPPLER_PAGE_TRANSITION_GLITTER, #POPPLER_PAGE_TRANSITION_FLY, |
313 | * #POPPLER_PAGE_TRANSITION_COVER, #POPPLER_PAGE_TRANSITION_UNCOVER and #POPPLER_PAGE_TRANSITION_PUSH |
314 | * transition types |
315 | * @scale: the starting or ending scale at which the changes shall be drawn. |
316 | * Only for #POPPLER_PAGE_TRANSITION_FLY transition type |
317 | * @rectangular: whether the area that will be flown is rectangular and opaque. |
318 | * Only for #POPPLER_PAGE_TRANSITION_FLY transition type |
319 | * |
320 | * A #PopplerPageTransition structures describes a visual transition |
321 | * to use when moving between pages during a presentation |
322 | */ |
323 | struct _PopplerPageTransition |
324 | { |
325 | PopplerPageTransitionType type; |
326 | PopplerPageTransitionAlignment alignment; |
327 | PopplerPageTransitionDirection direction; |
328 | gint duration; |
329 | gint angle; |
330 | gdouble scale; |
331 | gboolean rectangular; |
332 | gdouble duration_real; |
333 | }; |
334 | |
335 | POPPLER_PUBLIC |
336 | GType poppler_page_transition_get_type(void) G_GNUC_CONST; |
337 | POPPLER_PUBLIC |
338 | PopplerPageTransition *poppler_page_transition_new(void); |
339 | POPPLER_PUBLIC |
340 | PopplerPageTransition *poppler_page_transition_copy(PopplerPageTransition *transition); |
341 | POPPLER_PUBLIC |
342 | void poppler_page_transition_free(PopplerPageTransition *transition); |
343 | |
344 | /* Mapping between areas on the current page and images */ |
345 | #define POPPLER_TYPE_IMAGE_MAPPING (poppler_image_mapping_get_type()) |
346 | |
347 | /** |
348 | * PopplerImageMapping: |
349 | * @area: a #PopplerRectangle representing an area of the page |
350 | * @image_id: an image identifier |
351 | * |
352 | * A #PopplerImageMapping structure represents the location |
353 | * of an image on the page |
354 | */ |
355 | struct _PopplerImageMapping |
356 | { |
357 | PopplerRectangle area; |
358 | gint image_id; |
359 | }; |
360 | |
361 | POPPLER_PUBLIC |
362 | GType poppler_image_mapping_get_type(void) G_GNUC_CONST; |
363 | POPPLER_PUBLIC |
364 | PopplerImageMapping *poppler_image_mapping_new(void); |
365 | POPPLER_PUBLIC |
366 | PopplerImageMapping *poppler_image_mapping_copy(PopplerImageMapping *mapping); |
367 | POPPLER_PUBLIC |
368 | void poppler_image_mapping_free(PopplerImageMapping *mapping); |
369 | |
370 | /* Mapping between areas on the current page and form fields */ |
371 | #define POPPLER_TYPE_FORM_FIELD_MAPPING (poppler_form_field_mapping_get_type()) |
372 | |
373 | /** |
374 | * PopplerFormFieldMapping: |
375 | * @area: a #PopplerRectangle representing an area of the page |
376 | * @field: a #PopplerFormField |
377 | * |
378 | * A #PopplerFormFieldMapping structure represents the location |
379 | * of @field on the page |
380 | */ |
381 | struct _PopplerFormFieldMapping |
382 | { |
383 | PopplerRectangle area; |
384 | PopplerFormField *field; |
385 | }; |
386 | |
387 | POPPLER_PUBLIC |
388 | GType poppler_form_field_mapping_get_type(void) G_GNUC_CONST; |
389 | POPPLER_PUBLIC |
390 | PopplerFormFieldMapping *poppler_form_field_mapping_new(void); |
391 | POPPLER_PUBLIC |
392 | PopplerFormFieldMapping *poppler_form_field_mapping_copy(PopplerFormFieldMapping *mapping); |
393 | POPPLER_PUBLIC |
394 | void poppler_form_field_mapping_free(PopplerFormFieldMapping *mapping); |
395 | |
396 | /* Mapping between areas on the current page and annots */ |
397 | #define POPPLER_TYPE_ANNOT_MAPPING (poppler_annot_mapping_get_type()) |
398 | |
399 | /** |
400 | * PopplerAnnotMapping: |
401 | * @area: a #PopplerRectangle representing an area of the page |
402 | * @annot: a #PopplerAnnot |
403 | * |
404 | * A #PopplerAnnotMapping structure represents the location |
405 | * of @annot on the page |
406 | */ |
407 | struct _PopplerAnnotMapping |
408 | { |
409 | PopplerRectangle area; |
410 | PopplerAnnot *annot; |
411 | }; |
412 | |
413 | POPPLER_PUBLIC |
414 | GType poppler_annot_mapping_get_type(void) G_GNUC_CONST; |
415 | POPPLER_PUBLIC |
416 | PopplerAnnotMapping *poppler_annot_mapping_new(void); |
417 | POPPLER_PUBLIC |
418 | PopplerAnnotMapping *poppler_annot_mapping_copy(PopplerAnnotMapping *mapping); |
419 | POPPLER_PUBLIC |
420 | void poppler_annot_mapping_free(PopplerAnnotMapping *mapping); |
421 | |
422 | G_END_DECLS |
423 | |
424 | #endif /* __POPPLER_PAGE_H__ */ |
425 | |