1 | /* poppler-action.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_ACTION_H__ |
20 | #define __POPPLER_ACTION_H__ |
21 | |
22 | #include <glib-object.h> |
23 | #include "poppler.h" |
24 | |
25 | G_BEGIN_DECLS |
26 | |
27 | /** |
28 | * PopplerActionType: |
29 | * @POPPLER_ACTION_UNKNOWN: unknown action |
30 | * @POPPLER_ACTION_NONE: no action specified |
31 | * @POPPLER_ACTION_GOTO_DEST: go to destination |
32 | * @POPPLER_ACTION_GOTO_REMOTE: go to destination in another document |
33 | * @POPPLER_ACTION_LAUNCH: launch app (or open document) |
34 | * @POPPLER_ACTION_URI: URI |
35 | * @POPPLER_ACTION_NAMED: predefined action |
36 | * @POPPLER_ACTION_MOVIE: play movies. Since 0.14 |
37 | * @POPPLER_ACTION_RENDITION: play multimedia content. Since 0.14 |
38 | * @POPPLER_ACTION_OCG_STATE: state of layer. Since 0.14 |
39 | * @POPPLER_ACTION_JAVASCRIPT: Javascript. Since 0.18 |
40 | * @POPPLER_ACTION_RESET_FORM: resets form. Since 0.90 |
41 | * |
42 | * Action types |
43 | */ |
44 | typedef enum |
45 | { |
46 | POPPLER_ACTION_UNKNOWN, /* unknown action */ |
47 | POPPLER_ACTION_NONE, /* no action specified */ |
48 | POPPLER_ACTION_GOTO_DEST, /* go to destination */ |
49 | POPPLER_ACTION_GOTO_REMOTE, /* go to destination in new file */ |
50 | POPPLER_ACTION_LAUNCH, /* launch app (or open document) */ |
51 | POPPLER_ACTION_URI, /* URI */ |
52 | POPPLER_ACTION_NAMED, /* named action*/ |
53 | POPPLER_ACTION_MOVIE, /* movie action */ |
54 | POPPLER_ACTION_RENDITION, /* rendition action */ |
55 | POPPLER_ACTION_OCG_STATE, /* Set-OCG-State action */ |
56 | POPPLER_ACTION_JAVASCRIPT, /* Javascript action */ |
57 | POPPLER_ACTION_RESET_FORM /* ResetForm action */ |
58 | } PopplerActionType; |
59 | |
60 | /** |
61 | * PopplerDestType: |
62 | * @POPPLER_DEST_UNKNOWN: unknown destination |
63 | * @POPPLER_DEST_XYZ: go to page with coordinates (left, top) |
64 | * positioned at the upper-left corner of the window and the contents of |
65 | * the page magnified by the factor zoom |
66 | * @POPPLER_DEST_FIT: go to page with its contents magnified just |
67 | * enough to fit the entire page within the window both horizontally and |
68 | * vertically |
69 | * @POPPLER_DEST_FITH: go to page with the vertical coordinate top |
70 | * positioned at the top edge of the window and the contents of the page |
71 | * magnified just enough to fit the entire width of the page within the window |
72 | * @POPPLER_DEST_FITV: go to page with the horizontal coordinate |
73 | * left positioned at the left edge of the window and the contents of the |
74 | * page magnified just enough to fit the entire height of the page within the window |
75 | * @POPPLER_DEST_FITR: go to page with its contents magnified just |
76 | * enough to fit the rectangle specified by the coordinates left, bottom, |
77 | * right, and top entirely within the window both horizontally and vertically |
78 | * @POPPLER_DEST_FITB: go to page with its contents magnified just enough to fit |
79 | * its bounding box entirely within the window both horizontally and vertically |
80 | * @POPPLER_DEST_FITBH: go to page with the vertical |
81 | * coordinate top positioned at the top edge of the window and the |
82 | * contents of the page magnified just enough to fit the entire width of its |
83 | * bounding box within the window |
84 | * @POPPLER_DEST_FITBV: go to page with the horizontal |
85 | * coordinate left positioned at the left edge of the window and the |
86 | * contents of the page magnified just enough to fit the entire height of its |
87 | * bounding box within the window |
88 | * @POPPLER_DEST_NAMED: got to page specified by a name. See poppler_document_find_dest() |
89 | * |
90 | * Destination types |
91 | */ |
92 | typedef enum |
93 | { |
94 | POPPLER_DEST_UNKNOWN, |
95 | POPPLER_DEST_XYZ, |
96 | POPPLER_DEST_FIT, |
97 | POPPLER_DEST_FITH, |
98 | POPPLER_DEST_FITV, |
99 | POPPLER_DEST_FITR, |
100 | POPPLER_DEST_FITB, |
101 | POPPLER_DEST_FITBH, |
102 | POPPLER_DEST_FITBV, |
103 | POPPLER_DEST_NAMED |
104 | } PopplerDestType; |
105 | |
106 | /** |
107 | * PopplerActionMovieOperation: |
108 | * @POPPLER_ACTION_MOVIE_PLAY: play movie |
109 | * @POPPLER_ACTION_MOVIE_PAUSE: pause playing movie |
110 | * @POPPLER_ACTION_MOVIE_RESUME: resume paused movie |
111 | * @POPPLER_ACTION_MOVIE_STOP: stop playing movie |
112 | * |
113 | * Movie operations |
114 | * |
115 | * Since: 0.14 |
116 | */ |
117 | typedef enum |
118 | { |
119 | POPPLER_ACTION_MOVIE_PLAY, |
120 | POPPLER_ACTION_MOVIE_PAUSE, |
121 | POPPLER_ACTION_MOVIE_RESUME, |
122 | POPPLER_ACTION_MOVIE_STOP |
123 | } PopplerActionMovieOperation; |
124 | |
125 | /** |
126 | * PopplerActionLayerAction: |
127 | * @POPPLER_ACTION_LAYER_ON: set layer visibility on |
128 | * @POPPLER_ACTION_LAYER_OFF: set layer visibility off |
129 | * @POPPLER_ACTION_LAYER_TOGGLE: reverse the layer visibility state |
130 | * |
131 | * Layer actions |
132 | * |
133 | * Since: 0.14 |
134 | */ |
135 | typedef enum |
136 | { |
137 | POPPLER_ACTION_LAYER_ON, |
138 | POPPLER_ACTION_LAYER_OFF, |
139 | POPPLER_ACTION_LAYER_TOGGLE |
140 | } PopplerActionLayerAction; |
141 | |
142 | /* Define the PopplerAction types */ |
143 | typedef struct _PopplerActionAny PopplerActionAny; |
144 | typedef struct _PopplerActionGotoDest PopplerActionGotoDest; |
145 | typedef struct _PopplerActionGotoRemote PopplerActionGotoRemote; |
146 | typedef struct _PopplerActionLaunch PopplerActionLaunch; |
147 | typedef struct _PopplerActionUri PopplerActionUri; |
148 | typedef struct _PopplerActionNamed PopplerActionNamed; |
149 | typedef struct _PopplerActionMovie PopplerActionMovie; |
150 | typedef struct _PopplerActionRendition PopplerActionRendition; |
151 | typedef struct _PopplerActionOCGState PopplerActionOCGState; |
152 | typedef struct _PopplerActionJavascript PopplerActionJavascript; |
153 | typedef struct _PopplerActionResetForm PopplerActionResetForm; |
154 | |
155 | /** |
156 | * PopplerDest: |
157 | * @type: type of destination |
158 | * @page_num: page number |
159 | * @left: left coordinate |
160 | * @bottom: bottom coordinate |
161 | * @right: right coordinate |
162 | * @top: top coordinate |
163 | * @zoom: scale factor |
164 | * @named_dest: name of the destination (#POPPLER_DEST_NAMED only) |
165 | * @change_left: whether left coordinate should be changed |
166 | * @change_top: whether top coordinate should be changed |
167 | * @change_zoom: whether scale factor should be changed |
168 | * |
169 | * Data structure for holding a destination |
170 | * |
171 | * Note that @named_dest is the string representation of the named |
172 | * destination. This is the right form to pass to poppler functions, |
173 | * e.g. poppler_document_find_dest(), but to get the destination as |
174 | * it appears in the PDF itself, you need to convert it to a bytestring |
175 | * with poppler_named_dest_to_bytestring() first. |
176 | * Also note that @named_dest does not have a defined encoding and |
177 | * is not in a form suitable to be displayed to the user. |
178 | */ |
179 | struct _PopplerDest |
180 | { |
181 | PopplerDestType type; |
182 | |
183 | int page_num; |
184 | double left; |
185 | double bottom; |
186 | double right; |
187 | double top; |
188 | double zoom; |
189 | gchar *named_dest; |
190 | guint change_left : 1; |
191 | guint change_top : 1; |
192 | guint change_zoom : 1; |
193 | }; |
194 | |
195 | /** |
196 | * PopplerActionLayer: |
197 | * @action: a #PopplerActionLayerAction |
198 | * @layers: (element-type PopplerLayer): list of #PopplerLayer<!-- -->s |
199 | * |
200 | * Action to perform over a list of layers |
201 | */ |
202 | struct _PopplerActionLayer |
203 | { |
204 | PopplerActionLayerAction action; |
205 | GList *layers; |
206 | }; |
207 | |
208 | /** |
209 | * PopplerActionAny: |
210 | * @type: action type |
211 | * @title: action title |
212 | * |
213 | * Fields common to all #PopplerAction<!-- -->s |
214 | */ |
215 | struct _PopplerActionAny |
216 | { |
217 | PopplerActionType type; |
218 | gchar *title; |
219 | }; |
220 | |
221 | /** |
222 | * PopplerActionGotoDest: |
223 | * @type: action type (%POPPLER_ACTION_GOTO_DEST) |
224 | * @title: action title |
225 | * @dest: destination |
226 | * |
227 | * Go to destination |
228 | */ |
229 | struct _PopplerActionGotoDest |
230 | { |
231 | PopplerActionType type; |
232 | gchar *title; |
233 | |
234 | PopplerDest *dest; |
235 | }; |
236 | |
237 | /** |
238 | * PopplerActionGotoRemote: |
239 | * @type: action type (%POPPLER_ACTION_GOTO_REMOTE) |
240 | * @title: action title |
241 | * @file_name: file name |
242 | * @dest: destination |
243 | * |
244 | * Go to destination in another document |
245 | */ |
246 | struct _PopplerActionGotoRemote |
247 | { |
248 | PopplerActionType type; |
249 | gchar *title; |
250 | |
251 | gchar *file_name; |
252 | PopplerDest *dest; |
253 | }; |
254 | |
255 | /** |
256 | * PopplerActionLaunch: |
257 | * @type: action type (%POPPLER_ACTION_LAUNCH) |
258 | * @title: action title |
259 | * @file_name: file name |
260 | * @params: parameters |
261 | * |
262 | * Launch app (or open document) |
263 | */ |
264 | struct _PopplerActionLaunch |
265 | { |
266 | PopplerActionType type; |
267 | gchar *title; |
268 | |
269 | gchar *file_name; |
270 | gchar *params; |
271 | }; |
272 | |
273 | /** |
274 | * PopplerActionUri: |
275 | * @type: action type (%POPPLER_ACTION_URI) |
276 | * @title: action title |
277 | * @uri: URI |
278 | * |
279 | * URI |
280 | */ |
281 | struct _PopplerActionUri |
282 | { |
283 | PopplerActionType type; |
284 | gchar *title; |
285 | |
286 | char *uri; |
287 | }; |
288 | |
289 | /** |
290 | * PopplerActionNamed: |
291 | * @type: action type (%POPPLER_ACTION_NAMED) |
292 | * @title: action title |
293 | * @named_dest: named destination |
294 | * |
295 | * Predefined action |
296 | */ |
297 | struct _PopplerActionNamed |
298 | { |
299 | PopplerActionType type; |
300 | gchar *title; |
301 | |
302 | gchar *named_dest; |
303 | }; |
304 | |
305 | /** |
306 | * PopplerActionMovie: |
307 | * @type: action type (%POPPLER_ACTION_MOVIE) |
308 | * @title: action title |
309 | * @operation: operation |
310 | * @movie: movie |
311 | * |
312 | * Play movies. |
313 | * |
314 | * Since: 0.14 |
315 | */ |
316 | struct _PopplerActionMovie |
317 | { |
318 | PopplerActionType type; |
319 | gchar *title; |
320 | |
321 | PopplerActionMovieOperation operation; |
322 | PopplerMovie *movie; |
323 | }; |
324 | |
325 | /** |
326 | * PopplerActionRendition: |
327 | * @type: action type (%POPPLER_ACTION_RENDITION) |
328 | * @title: action title |
329 | * @op: operation |
330 | * @media: media |
331 | * |
332 | * Play multimedia content. |
333 | * |
334 | * Since: 0.14 |
335 | */ |
336 | struct _PopplerActionRendition |
337 | { |
338 | PopplerActionType type; |
339 | gchar *title; |
340 | |
341 | gint op; |
342 | PopplerMedia *media; |
343 | }; |
344 | |
345 | /** |
346 | * PopplerActionOCGState: |
347 | * @type: action type (%POPPLER_ACTION_OCG_STATE) |
348 | * @title: action title |
349 | * @state_list: (element-type PopplerActionLayer): list of #PopplerActionLayer<!-- -->s |
350 | * |
351 | * State of layer. |
352 | * |
353 | * Since: 0.14 |
354 | */ |
355 | struct _PopplerActionOCGState |
356 | { |
357 | PopplerActionType type; |
358 | gchar *title; |
359 | |
360 | GList *state_list; |
361 | }; |
362 | |
363 | /** |
364 | * PopplerActionJavascript: |
365 | * @type: action type (%POPPLER_ACTION_JAVASCRIPT) |
366 | * @title: action title |
367 | * @script: javascript |
368 | * |
369 | * Javascript. |
370 | * |
371 | * Since: 0.18 |
372 | */ |
373 | struct _PopplerActionJavascript |
374 | { |
375 | PopplerActionType type; |
376 | gchar *title; |
377 | |
378 | gchar *script; |
379 | }; |
380 | |
381 | /** |
382 | * PopplerActionResetForm: |
383 | * @type: action type (%POPPLER_ACTION_RESET_FORM) |
384 | * @title: action title |
385 | * @fields: (element-type utf8) (nullable): list of field names to |
386 | * reset / retain |
387 | * @exclude: whether to reset all but the listed fields |
388 | * |
389 | * Resets some or all fields within a PDF form. |
390 | * |
391 | * The default behavior resets only the list of @fields, but setting |
392 | * @exclude to %TRUE will cause the action to reset all fields but those |
393 | * listed. Providing an empty list of fields resets the entire form. |
394 | * |
395 | * Since: 0.90 |
396 | */ |
397 | struct _PopplerActionResetForm |
398 | { |
399 | PopplerActionType type; |
400 | gchar *title; |
401 | |
402 | GList *fields; |
403 | gboolean exclude; |
404 | }; |
405 | |
406 | /** |
407 | * PopplerAction: |
408 | * |
409 | * A generic wrapper for actions that exposes only #PopplerActionType. |
410 | */ |
411 | union _PopplerAction { |
412 | PopplerActionType type; |
413 | PopplerActionAny any; |
414 | PopplerActionGotoDest goto_dest; |
415 | PopplerActionGotoRemote goto_remote; |
416 | PopplerActionLaunch launch; |
417 | PopplerActionUri uri; |
418 | PopplerActionNamed named; |
419 | PopplerActionMovie movie; |
420 | PopplerActionRendition rendition; |
421 | PopplerActionOCGState ocg_state; |
422 | PopplerActionJavascript javascript; |
423 | PopplerActionResetForm reset_form; |
424 | }; |
425 | |
426 | #define POPPLER_TYPE_ACTION (poppler_action_get_type()) |
427 | #define POPPLER_ACTION(obj) (G_TYPE_CHECK_INSTANCE_CAST((obj), POPPLER_TYPE_ACTION, PopplerAction)) |
428 | |
429 | POPPLER_PUBLIC |
430 | GType poppler_action_get_type(void) G_GNUC_CONST; |
431 | |
432 | POPPLER_PUBLIC |
433 | void poppler_action_free(PopplerAction *action); |
434 | POPPLER_PUBLIC |
435 | PopplerAction *poppler_action_copy(PopplerAction *action); |
436 | |
437 | #define POPPLER_TYPE_DEST (poppler_dest_get_type()) |
438 | POPPLER_PUBLIC |
439 | GType poppler_dest_get_type(void) G_GNUC_CONST; |
440 | |
441 | POPPLER_PUBLIC |
442 | void poppler_dest_free(PopplerDest *dest); |
443 | POPPLER_PUBLIC |
444 | PopplerDest *poppler_dest_copy(PopplerDest *dest); |
445 | |
446 | POPPLER_PUBLIC |
447 | char *poppler_named_dest_from_bytestring(const guint8 *data, gsize length); |
448 | |
449 | POPPLER_PUBLIC |
450 | guint8 *poppler_named_dest_to_bytestring(const char *name, gsize *length); |
451 | |
452 | G_END_DECLS |
453 | |
454 | #endif /* __POPPLER_GLIB_H__ */ |
455 | |