mupdf
Loading...
Searching...
No Matches
object.h
Go to the documentation of this file.
1// Copyright (C) 2004-2025 Artifex Software, Inc.
2//
3// This file is part of MuPDF.
4//
5// MuPDF is free software: you can redistribute it and/or modify it under the
6// terms of the GNU Affero General Public License as published by the Free
7// Software Foundation, either version 3 of the License, or (at your option)
8// any later version.
9//
10// MuPDF is distributed in the hope that it will be useful, but WITHOUT ANY
11// WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS
12// FOR A PARTICULAR PURPOSE. See the GNU Affero General Public License for more
13// details.
14//
15// You should have received a copy of the GNU Affero General Public License
16// along with MuPDF. If not, see <https://www.gnu.org/licenses/agpl-3.0.en.html>
17//
18// Alternative licensing terms are available from the licensor.
19// For commercial licensing, see <https://www.artifex.com/> or contact
20// Artifex Software, Inc., 39 Mesa Street, Suite 108A, San Francisco,
21// CA 94129, USA, for further information.
22
23#ifndef MUPDF_PDF_OBJECT_H
24#define MUPDF_PDF_OBJECT_H
25
26#include "mupdf/fitz/stream.h"
27
28typedef struct pdf_document pdf_document;
29typedef struct pdf_crypt pdf_crypt;
30typedef struct pdf_journal pdf_journal;
31
33
34/* Defined in PDF 1.7 according to Acrobat limit. */
35#define PDF_MAX_OBJECT_NUMBER 8388607
36#define PDF_MAX_GEN_NUMBER 65535
37
38/*
39 * Dynamic objects.
40 * The same type of objects as found in PDF and PostScript.
41 * Used by the filters and the mupdf parser.
42 */
43
44typedef struct pdf_obj pdf_obj;
45
46pdf_obj *pdf_new_int(fz_context *ctx, int64_t i);
48pdf_obj *pdf_new_name(fz_context *ctx, const char *str);
49pdf_obj *pdf_new_string(fz_context *ctx, const char *str, size_t len);
50
51/*
52 Create a PDF 'text string' by encoding input string as either ASCII or UTF-16BE.
53 In theory, we could also use PDFDocEncoding.
54*/
56pdf_obj *pdf_new_indirect(fz_context *ctx, pdf_document *doc, int64_t num, int gen);
57pdf_obj *pdf_new_array(fz_context *ctx, pdf_document *doc, int initialcap);
58pdf_obj *pdf_new_dict(fz_context *ctx, pdf_document *doc, int initialcap);
62pdf_obj *pdf_new_date(fz_context *ctx, pdf_document *doc, int64_t time);
66
71
82
83/*
84 If obj is an indirect object, return it. If not,
85 throw an error.
86*/
88
89/*
90 Check if an object is a stream or not.
91*/
94
95/* Compare 2 objects. Returns 0 on match, non-zero on mismatch.
96 * Streams always mismatch.
97 */
100
101/* Compare 2 objects. Returns 0 on match, non-zero on mismatch.
102 * Stream contents are explicitly checked.
103 */
105
107
111
117/*
118 Check for a cycle (or stack overflow) in PDF structures.
119
120 Returns 1 if a cycle found.
121 Returns -1 if we pass some arbitrary depth (currently 256).
122 Otherwise returns 0.
123*/
125
126typedef struct
127{
128 int len;
129 unsigned char bits[FZ_FLEXIBLE_ARRAY];
131
136
137typedef struct
138{
139 int len;
140 int max;
141 int *list;
144
150
151void pdf_set_obj_memo(fz_context *ctx, pdf_obj *obj, int bit, int memo);
152int pdf_obj_memo(fz_context *ctx, pdf_obj *obj, int bit, int *memo);
153
157
160int64_t pdf_to_int64(fz_context *ctx, pdf_obj *obj);
162const char *pdf_to_name(fz_context *ctx, pdf_obj *obj);
163const char *pdf_to_text_string(fz_context *ctx, pdf_obj *obj);
164const char *pdf_to_string(fz_context *ctx, pdf_obj *obj, size_t *sizep);
169
170int pdf_to_bool_default(fz_context *ctx, pdf_obj *obj, int def);
171int pdf_to_int_default(fz_context *ctx, pdf_obj *obj, int def);
172float pdf_to_real_default(fz_context *ctx, pdf_obj *obj, float def);
173
176void pdf_array_put(fz_context *ctx, pdf_obj *array, int i, pdf_obj *obj);
177void pdf_array_put_drop(fz_context *ctx, pdf_obj *array, int i, pdf_obj *obj);
178void pdf_array_push(fz_context *ctx, pdf_obj *array, pdf_obj *obj);
180void pdf_array_insert(fz_context *ctx, pdf_obj *array, pdf_obj *obj, int index);
181void pdf_array_insert_drop(fz_context *ctx, pdf_obj *array, pdf_obj *obj, int index);
182void pdf_array_delete(fz_context *ctx, pdf_obj *array, int index);
183int pdf_array_find(fz_context *ctx, pdf_obj *array, pdf_obj *obj);
185
189void pdf_dict_put_val_null(fz_context *ctx, pdf_obj *obj, int idx);
191pdf_obj *pdf_dict_getp(fz_context *ctx, pdf_obj *dict, const char *path);
194pdf_obj *pdf_dict_gets(fz_context *ctx, pdf_obj *dict, const char *key);
195pdf_obj *pdf_dict_getsa(fz_context *ctx, pdf_obj *dict, const char *key, const char *abbrev);
197pdf_obj *pdf_dict_getp_inheritable(fz_context *ctx, pdf_obj *dict, const char *path);
199void pdf_dict_put(fz_context *ctx, pdf_obj *dict, pdf_obj *key, pdf_obj *val);
200void pdf_dict_put_drop(fz_context *ctx, pdf_obj *dict, pdf_obj *key, pdf_obj *val);
201void pdf_dict_get_put_drop(fz_context *ctx, pdf_obj *dict, pdf_obj *key, pdf_obj *val, pdf_obj **old_val);
202void pdf_dict_puts(fz_context *ctx, pdf_obj *dict, const char *key, pdf_obj *val);
203void pdf_dict_puts_drop(fz_context *ctx, pdf_obj *dict, const char *key, pdf_obj *val);
204void pdf_dict_putp(fz_context *ctx, pdf_obj *dict, const char *path, pdf_obj *val);
205void pdf_dict_putp_drop(fz_context *ctx, pdf_obj *dict, const char *path, pdf_obj *val);
206void pdf_dict_putl(fz_context *ctx, pdf_obj *dict, pdf_obj *val, ...);
207void pdf_dict_putl_drop(fz_context *ctx, pdf_obj *dict, pdf_obj *val, ...);
208void pdf_dict_del(fz_context *ctx, pdf_obj *dict, pdf_obj *key);
209void pdf_dict_dels(fz_context *ctx, pdf_obj *dict, const char *key);
211
212void pdf_dict_put_bool(fz_context *ctx, pdf_obj *dict, pdf_obj *key, int x);
213void pdf_dict_put_int(fz_context *ctx, pdf_obj *dict, pdf_obj *key, int64_t x);
214void pdf_dict_put_real(fz_context *ctx, pdf_obj *dict, pdf_obj *key, double x);
215void pdf_dict_put_name(fz_context *ctx, pdf_obj *dict, pdf_obj *key, const char *x);
216void pdf_dict_put_string(fz_context *ctx, pdf_obj *dict, pdf_obj *key, const char *x, size_t n);
217void pdf_dict_put_text_string(fz_context *ctx, pdf_obj *dict, pdf_obj *key, const char *x);
218void pdf_dict_put_indirect(fz_context *ctx, pdf_obj *dict, pdf_obj *key, int num);
222void pdf_dict_put_date(fz_context *ctx, pdf_obj *dict, pdf_obj *key, int64_t time);
223pdf_obj *pdf_dict_put_array(fz_context *ctx, pdf_obj *dict, pdf_obj *key, int initial);
224pdf_obj *pdf_dict_put_dict(fz_context *ctx, pdf_obj *dict, pdf_obj *key, int initial);
225pdf_obj *pdf_dict_puts_dict(fz_context *ctx, pdf_obj *dict, const char *key, int initial);
226
229int64_t pdf_dict_get_int64(fz_context *ctx, pdf_obj *dict, pdf_obj *key);
231const char *pdf_dict_get_name(fz_context *ctx, pdf_obj *dict, pdf_obj *key);
232const char *pdf_dict_get_string(fz_context *ctx, pdf_obj *dict, pdf_obj *key, size_t *sizep);
233const char *pdf_dict_get_text_string(fz_context *ctx, pdf_obj *dict, pdf_obj *key);
238int64_t pdf_dict_get_date(fz_context *ctx, pdf_obj *dict, pdf_obj *key);
239
240int pdf_dict_get_bool_default(fz_context *ctx, pdf_obj *dict, pdf_obj *key, int def);
241int pdf_dict_get_int_default(fz_context *ctx, pdf_obj *dict, pdf_obj *key, int def);
242float pdf_dict_get_real_default(fz_context *ctx, pdf_obj *dict, pdf_obj *key, float def);
243
249const char *pdf_dict_get_inheritable_string(fz_context *ctx, pdf_obj *dict, pdf_obj *key, size_t *sizep);
254
255void pdf_array_push_bool(fz_context *ctx, pdf_obj *array, int x);
256void pdf_array_push_int(fz_context *ctx, pdf_obj *array, int64_t x);
257void pdf_array_push_real(fz_context *ctx, pdf_obj *array, double x);
258void pdf_array_push_name(fz_context *ctx, pdf_obj *array, const char *x);
259void pdf_array_push_string(fz_context *ctx, pdf_obj *array, const char *x, size_t n);
260void pdf_array_push_text_string(fz_context *ctx, pdf_obj *array, const char *x);
261pdf_obj *pdf_array_push_array(fz_context *ctx, pdf_obj *array, int initial);
262pdf_obj *pdf_array_push_dict(fz_context *ctx, pdf_obj *array, int initial);
263
264void pdf_array_put_bool(fz_context *ctx, pdf_obj *array, int i, int x);
265void pdf_array_put_int(fz_context *ctx, pdf_obj *array, int i, int64_t x);
266void pdf_array_put_real(fz_context *ctx, pdf_obj *array, int i, double x);
267void pdf_array_put_name(fz_context *ctx, pdf_obj *array, int i, const char *x);
268void pdf_array_put_string(fz_context *ctx, pdf_obj *array, int i, const char *x, size_t n);
269void pdf_array_put_text_string(fz_context *ctx, pdf_obj *array, int i, const char *x);
270pdf_obj *pdf_array_put_array(fz_context *ctx, pdf_obj *array, int i, int initial);
271pdf_obj *pdf_array_put_dict(fz_context *ctx, pdf_obj *array, int i, int initial);
272
273int pdf_array_get_bool(fz_context *ctx, pdf_obj *array, int index);
274int pdf_array_get_int(fz_context *ctx, pdf_obj *array, int index);
275float pdf_array_get_real(fz_context *ctx, pdf_obj *array, int index);
276const char *pdf_array_get_name(fz_context *ctx, pdf_obj *array, int index);
277const char *pdf_array_get_string(fz_context *ctx, pdf_obj *array, int index, size_t *sizep);
278const char *pdf_array_get_text_string(fz_context *ctx, pdf_obj *array, int index);
281
282void pdf_set_obj_parent(fz_context *ctx, pdf_obj *obj, int num);
283
285
287
288char *pdf_sprint_obj(fz_context *ctx, char *buf, size_t cap, size_t *len, pdf_obj *obj, int tight, int ascii);
289void pdf_print_obj(fz_context *ctx, fz_output *out, pdf_obj *obj, int tight, int ascii);
290void pdf_print_encrypted_obj(fz_context *ctx, fz_output *out, pdf_obj *obj, int tight, int ascii, pdf_crypt *crypt, int num, int gen, int *sep);
291
294
295/*
296 Convert Unicode/PdfDocEncoding string into utf-8.
297
298 The returned string must be freed by the caller.
299*/
300char *pdf_new_utf8_from_pdf_string(fz_context *ctx, const char *srcptr, size_t srclen);
301
302/*
303 Convert text string object to UTF-8.
304
305 The returned string must be freed by the caller.
306*/
308
309/*
310 Load text stream and convert to UTF-8.
311
312 The returned string must be freed by the caller.
313*/
315
316/*
317 Load text stream or text string and convert to UTF-8.
318
319 The returned string must be freed by the caller.
320*/
322
323fz_quad pdf_to_quad(fz_context *ctx, pdf_obj *array, int offset);
324fz_point pdf_to_point(fz_context *ctx, pdf_obj *array, int offset);
327int64_t pdf_to_date(fz_context *ctx, pdf_obj *time);
328
329/*
330 pdf_get_indirect_document and pdf_get_bound_document are
331 now deprecated. Please do not use them in future. They will
332 be removed.
333
334 Please use pdf_pin_document instead.
335*/
338
339/*
340 pdf_pin_document returns a new reference to the document
341 to which obj is bound. The caller is responsible for
342 dropping this reference once they have finished with it.
343
344 This is a replacement for pdf_get_indirect_document
345 and pdf_get_bound_document that are now deprecated. Those
346 returned a borrowed reference that did not need to be
347 dropped.
348
349 Note that this can validly return NULL in various cases:
350 1) When the object is of a simple type (such as a number
351 or a string), it contains no reference to the enclosing
352 document. 2) When the object has yet to be inserted into
353 a PDF document (such as during parsing). 3) And (in
354 future versions) when the document has been destroyed
355 but the object reference remains.
356
357 It is the caller's responsibility to deal with a NULL
358 return here.
359*/
361
362void pdf_set_int(fz_context *ctx, pdf_obj *obj, int64_t i);
363
364/* Voodoo to create PDF_NAME(Foo) macros from name-table.h */
365
366#define PDF_NAME(X) ((pdf_obj*)(intptr_t)PDF_ENUM_NAME_##X)
367
368#define PDF_MAKE_NAME(STRING,NAME) PDF_ENUM_NAME_##NAME,
369enum {
373#include "mupdf/pdf/name-table.h"
375};
376#undef PDF_MAKE_NAME
377
378#define PDF_NULL ((pdf_obj*)(intptr_t)PDF_ENUM_NULL)
379#define PDF_TRUE ((pdf_obj*)(intptr_t)PDF_ENUM_TRUE)
380#define PDF_FALSE ((pdf_obj*)(intptr_t)PDF_ENUM_FALSE)
381#define PDF_LIMIT ((pdf_obj*)(intptr_t)PDF_ENUM_LIMIT)
382
383
384/* Implementation details: subject to change. */
385
386/*
387 for use by pdf_crypt_obj_imp to decrypt AES string in place
388*/
389void pdf_set_str_len(fz_context *ctx, pdf_obj *obj, size_t newlen);
390
391
392/* Journalling */
393
394/* Call this to enable journalling on a given document. */
396
397/* Call this to start an operation. Undo/redo works at 'operation'
398 * granularity. Nested operations are all counted within the outermost
399 * operation. Any modification performed on a journalled PDF without an
400 * operation having been started will throw an error. */
401void pdf_begin_operation(fz_context *ctx, pdf_document *doc, const char *operation);
402
403/* Call this to start an implicit operation. Implicit operations are
404 * operations that happen as a consequence of things like updating
405 * an annotation. They get rolled into the previous operation, because
406 * they generally happen as a result of them. */
408
409/* Call this to end an operation. */
411
412/* Call this to abandon an operation. Revert to the state
413 * when you began. */
415
416/* Call this to find out how many undo/redo steps there are, and the
417 * current position we are within those. 0 = original document,
418 * *steps = final edited version. */
419int pdf_undoredo_state(fz_context *ctx, pdf_document *doc, int *steps);
420
421/* Call this to find the title of the operation within the undo state. */
422const char *pdf_undoredo_step(fz_context *ctx, pdf_document *doc, int step);
423
424/* Helper functions to identify if we are in a state to be able to undo
425 * or redo. */
428
429/* Move backwards in the undo history. Throws an error if we are at the
430 * start. Any edits to the document at this point will discard all
431 * subsequent history. */
433
434/* Move forwards in the undo history. Throws an error if we are at the
435 * end. */
437
438/* Called to reset the entire history. This is called implicitly when
439 * a non-undoable change occurs (such as a pdf repair). */
441
442/* Internal destructor. */
444
445/* Internal call as part of saving a snapshot of a PDF document. */
447
448/* Internal call as part of loading a snapshot of a PDF document. */
450
451/* Internal call as part of creating objects. */
452void pdf_add_journal_fragment(fz_context *ctx, pdf_document *doc, int parent, pdf_obj *copy, fz_buffer *copy_stream, int newobj);
453
454char *pdf_format_date(fz_context *ctx, int64_t time, char *s, size_t n);
455int64_t pdf_parse_date(fz_context *ctx, const char *s);
456
458
459#endif
int pdf_array_get_bool(fz_context *ctx, pdf_obj *array, int index)
void pdf_abandon_operation(fz_context *ctx, pdf_document *doc)
int pdf_dict_get_int_default(fz_context *ctx, pdf_obj *dict, pdf_obj *key, int def)
const char * pdf_dict_get_name(fz_context *ctx, pdf_obj *dict, pdf_obj *key)
pdf_obj * pdf_new_real(fz_context *ctx, float f)
const char * pdf_array_get_string(fz_context *ctx, pdf_obj *array, int index, size_t *sizep)
void pdf_dict_put_rect(fz_context *ctx, pdf_obj *dict, pdf_obj *key, fz_rect x)
void pdf_add_journal_fragment(fz_context *ctx, pdf_document *doc, int parent, pdf_obj *copy, fz_buffer *copy_stream, int newobj)
void pdf_dict_put_indirect(fz_context *ctx, pdf_obj *dict, pdf_obj *key, int num)
void pdf_dict_putl_drop(fz_context *ctx, pdf_obj *dict, pdf_obj *val,...)
int64_t pdf_dict_get_inheritable_date(fz_context *ctx, pdf_obj *dict, pdf_obj *key)
void pdf_undo(fz_context *ctx, pdf_document *doc)
int pdf_is_string(fz_context *ctx, pdf_obj *obj)
void pdf_clean_obj(fz_context *ctx, pdf_obj *obj)
void pdf_redo(fz_context *ctx, pdf_document *doc)
void pdf_sort_dict(fz_context *ctx, pdf_obj *dict)
int pdf_is_int(fz_context *ctx, pdf_obj *obj)
void pdf_dict_put_string(fz_context *ctx, pdf_obj *dict, pdf_obj *key, const char *x, size_t n)
pdf_document * pdf_get_indirect_document(fz_context *ctx, pdf_obj *obj)
pdf_obj * pdf_array_put_array(fz_context *ctx, pdf_obj *array, int i, int initial)
void pdf_begin_operation(fz_context *ctx, pdf_document *doc, const char *operation)
pdf_obj * pdf_dict_get_inheritable(fz_context *ctx, pdf_obj *dict, pdf_obj *key)
void pdf_array_push_string(fz_context *ctx, pdf_obj *array, const char *x, size_t n)
int pdf_name_eq(fz_context *ctx, pdf_obj *a, pdf_obj *b)
pdf_obj * pdf_dict_geta(fz_context *ctx, pdf_obj *dict, pdf_obj *key, pdf_obj *abbrev)
void pdf_dict_putp_drop(fz_context *ctx, pdf_obj *dict, const char *path, pdf_obj *val)
int pdf_array_get_int(fz_context *ctx, pdf_obj *array, int index)
int pdf_undoredo_state(fz_context *ctx, pdf_document *doc, int *steps)
fz_matrix pdf_dict_get_inheritable_matrix(fz_context *ctx, pdf_obj *dict, pdf_obj *key)
struct pdf_journal pdf_journal
Definition object.h:30
pdf_obj * pdf_dict_get(fz_context *ctx, pdf_obj *dict, pdf_obj *key)
void pdf_dict_put(fz_context *ctx, pdf_obj *dict, pdf_obj *key, pdf_obj *val)
void pdf_dict_puts(fz_context *ctx, pdf_obj *dict, const char *key, pdf_obj *val)
void pdf_mark_list_init(fz_context *ctx, pdf_mark_list *list)
pdf_obj * pdf_new_array(fz_context *ctx, pdf_document *doc, int initialcap)
pdf_obj * pdf_new_name(fz_context *ctx, const char *str)
pdf_obj * pdf_dict_getsa(fz_context *ctx, pdf_obj *dict, const char *key, const char *abbrev)
pdf_mark_bits * pdf_new_mark_bits(fz_context *ctx, pdf_document *doc)
int pdf_can_undo(fz_context *ctx, pdf_document *doc)
char * pdf_format_date(fz_context *ctx, int64_t time, char *s, size_t n)
void pdf_serialise_journal(fz_context *ctx, pdf_document *doc, fz_output *out)
void pdf_debug_ref(fz_context *ctx, pdf_obj *obj)
int64_t pdf_dict_get_inheritable_int64(fz_context *ctx, pdf_obj *dict, pdf_obj *key)
pdf_obj * pdf_dict_gets(fz_context *ctx, pdf_obj *dict, const char *key)
pdf_obj * pdf_dict_put_array(fz_context *ctx, pdf_obj *dict, pdf_obj *key, int initial)
pdf_obj * pdf_copy_array(fz_context *ctx, pdf_obj *array)
void pdf_dict_putl(fz_context *ctx, pdf_obj *dict, pdf_obj *val,...)
void pdf_debug_obj(fz_context *ctx, pdf_obj *obj)
pdf_obj * pdf_dict_get_val(fz_context *ctx, pdf_obj *dict, int idx)
int pdf_dict_get_inheritable_int(fz_context *ctx, pdf_obj *dict, pdf_obj *key)
fz_rect pdf_dict_get_inheritable_rect(fz_context *ctx, pdf_obj *dict, pdf_obj *key)
void pdf_dict_put_name(fz_context *ctx, pdf_obj *dict, pdf_obj *key, const char *x)
pdf_obj * pdf_dict_puts_dict(fz_context *ctx, pdf_obj *dict, const char *key, int initial)
void pdf_array_push(fz_context *ctx, pdf_obj *array, pdf_obj *obj)
void pdf_dict_put_date(fz_context *ctx, pdf_obj *dict, pdf_obj *key, int64_t time)
const char * pdf_dict_get_inheritable_string(fz_context *ctx, pdf_obj *dict, pdf_obj *key, size_t *sizep)
char * pdf_new_utf8_from_pdf_string(fz_context *ctx, const char *srcptr, size_t srclen)
const char * pdf_to_name(fz_context *ctx, pdf_obj *obj)
pdf_obj * pdf_dict_getp_inheritable(fz_context *ctx, pdf_obj *dict, const char *path)
void pdf_drop_mark_bits(fz_context *ctx, pdf_mark_bits *marks)
int64_t pdf_parse_date(fz_context *ctx, const char *s)
void pdf_begin_implicit_operation(fz_context *ctx, pdf_document *doc)
int pdf_to_gen(fz_context *ctx, pdf_obj *obj)
void pdf_deserialise_journal(fz_context *ctx, pdf_document *doc, fz_stream *stm)
int pdf_is_name(fz_context *ctx, pdf_obj *obj)
pdf_obj * pdf_new_text_string(fz_context *ctx, const char *s)
pdf_obj * pdf_new_string(fz_context *ctx, const char *str, size_t len)
pdf_obj * pdf_new_dict(fz_context *ctx, pdf_document *doc, int initialcap)
struct pdf_obj pdf_obj
Definition object.h:44
void pdf_mark_list_free(fz_context *ctx, pdf_mark_list *list)
pdf_obj * pdf_ensure_indirect(fz_context *ctx, pdf_obj *obj)
void pdf_end_operation(fz_context *ctx, pdf_document *doc)
const char * pdf_dict_get_inheritable_name(fz_context *ctx, pdf_obj *dict, pdf_obj *key)
int pdf_obj_marked(fz_context *ctx, pdf_obj *obj)
void pdf_array_put_bool(fz_context *ctx, pdf_obj *array, int i, int x)
float pdf_dict_get_real(fz_context *ctx, pdf_obj *dict, pdf_obj *key)
void pdf_dict_put_drop(fz_context *ctx, pdf_obj *dict, pdf_obj *key, pdf_obj *val)
void pdf_array_push_bool(fz_context *ctx, pdf_obj *array, int x)
void pdf_dict_put_bool(fz_context *ctx, pdf_obj *dict, pdf_obj *key, int x)
fz_quad pdf_to_quad(fz_context *ctx, pdf_obj *array, int offset)
int pdf_to_bool_default(fz_context *ctx, pdf_obj *obj, int def)
pdf_obj * pdf_keep_obj(fz_context *ctx, pdf_obj *obj)
void pdf_dict_putp(fz_context *ctx, pdf_obj *dict, const char *path, pdf_obj *val)
int pdf_is_number(fz_context *ctx, pdf_obj *obj)
int pdf_is_indirect(fz_context *ctx, pdf_obj *obj)
pdf_obj * pdf_new_date(fz_context *ctx, pdf_document *doc, int64_t time)
float pdf_to_real_default(fz_context *ctx, pdf_obj *obj, float def)
void pdf_mark_bits_reset(fz_context *ctx, pdf_mark_bits *marks)
int pdf_is_stream(fz_context *ctx, pdf_obj *obj)
pdf_obj * pdf_array_put_dict(fz_context *ctx, pdf_obj *array, int i, int initial)
void pdf_array_push_int(fz_context *ctx, pdf_obj *array, int64_t x)
void pdf_mark_list_pop(fz_context *ctx, pdf_mark_list *list)
void pdf_dict_put_int(fz_context *ctx, pdf_obj *dict, pdf_obj *key, int64_t x)
void pdf_set_str_len(fz_context *ctx, pdf_obj *obj, size_t newlen)
void pdf_set_int(fz_context *ctx, pdf_obj *obj, int64_t i)
int pdf_obj_is_dirty(fz_context *ctx, pdf_obj *obj)
int64_t pdf_dict_get_int64(fz_context *ctx, pdf_obj *dict, pdf_obj *key)
void pdf_dict_del(fz_context *ctx, pdf_obj *dict, pdf_obj *key)
void pdf_unmark_obj(fz_context *ctx, pdf_obj *obj)
int pdf_dict_get_inheritable_bool(fz_context *ctx, pdf_obj *dict, pdf_obj *key)
float pdf_array_get_real(fz_context *ctx, pdf_obj *array, int index)
int pdf_array_contains(fz_context *ctx, pdf_obj *array, pdf_obj *obj)
void pdf_array_insert_drop(fz_context *ctx, pdf_obj *array, pdf_obj *obj, int index)
pdf_obj * pdf_dict_get_key(fz_context *ctx, pdf_obj *dict, int idx)
int pdf_obj_parent_num(fz_context *ctx, pdf_obj *obj)
pdf_obj * pdf_new_int(fz_context *ctx, int64_t i)
void pdf_dict_dels(fz_context *ctx, pdf_obj *dict, const char *key)
void pdf_dirty_obj(fz_context *ctx, pdf_obj *obj)
int pdf_is_bool(fz_context *ctx, pdf_obj *obj)
const char * pdf_to_text_string(fz_context *ctx, pdf_obj *obj)
const char * pdf_dict_get_string(fz_context *ctx, pdf_obj *dict, pdf_obj *key, size_t *sizep)
fz_point pdf_to_point(fz_context *ctx, pdf_obj *array, int offset)
size_t pdf_to_str_len(fz_context *ctx, pdf_obj *obj)
void pdf_drop_journal(fz_context *ctx, pdf_journal *journal)
int pdf_mark_list_push(fz_context *ctx, pdf_mark_list *list, pdf_obj *obj)
int pdf_is_array(fz_context *ctx, pdf_obj *obj)
const char * pdf_dict_get_text_string_opt(fz_context *ctx, pdf_obj *dict, pdf_obj *key)
char * pdf_sprint_obj(fz_context *ctx, char *buf, size_t cap, size_t *len, pdf_obj *obj, int tight, int ascii)
pdf_obj * pdf_copy_dict(fz_context *ctx, pdf_obj *dict)
pdf_obj * pdf_dict_gets_inheritable(fz_context *ctx, pdf_obj *dict, const char *key)
pdf_obj * pdf_array_push_dict(fz_context *ctx, pdf_obj *array, int initial)
void pdf_array_push_text_string(fz_context *ctx, pdf_obj *array, const char *x)
void pdf_array_put_int(fz_context *ctx, pdf_obj *array, int i, int64_t x)
const char * pdf_to_string(fz_context *ctx, pdf_obj *obj, size_t *sizep)
int pdf_array_len(fz_context *ctx, pdf_obj *array)
void pdf_array_push_drop(fz_context *ctx, pdf_obj *array, pdf_obj *obj)
void pdf_array_put_string(fz_context *ctx, pdf_obj *array, int i, const char *x, size_t n)
const char * pdf_array_get_name(fz_context *ctx, pdf_obj *array, int index)
void pdf_print_encrypted_obj(fz_context *ctx, fz_output *out, pdf_obj *obj, int tight, int ascii, pdf_crypt *crypt, int num, int gen, int *sep)
int pdf_mark_bits_set(fz_context *ctx, pdf_mark_bits *marks, pdf_obj *obj)
void pdf_dict_get_put_drop(fz_context *ctx, pdf_obj *dict, pdf_obj *key, pdf_obj *val, pdf_obj **old_val)
const char * pdf_undoredo_step(fz_context *ctx, pdf_document *doc, int step)
void pdf_discard_journal(fz_context *ctx, pdf_journal *journal)
fz_matrix pdf_dict_get_matrix(fz_context *ctx, pdf_obj *dict, pdf_obj *key)
fz_matrix pdf_to_matrix(fz_context *ctx, pdf_obj *array)
void pdf_dict_put_point(fz_context *ctx, pdf_obj *dict, pdf_obj *key, fz_point x)
void pdf_enable_journal(fz_context *ctx, pdf_document *doc)
struct pdf_crypt pdf_crypt
Definition object.h:29
int64_t pdf_dict_get_date(fz_context *ctx, pdf_obj *dict, pdf_obj *key)
int pdf_dict_len(fz_context *ctx, pdf_obj *dict)
pdf_obj * pdf_deep_copy_obj(fz_context *ctx, pdf_obj *obj)
int64_t pdf_to_int64(fz_context *ctx, pdf_obj *obj)
pdf_obj * pdf_array_push_array(fz_context *ctx, pdf_obj *array, int initial)
pdf_obj * pdf_new_indirect(fz_context *ctx, pdf_document *doc, int64_t num, int gen)
const char * pdf_array_get_text_string(fz_context *ctx, pdf_obj *array, int index)
int pdf_can_redo(fz_context *ctx, pdf_document *doc)
int pdf_objcmp_deep(fz_context *ctx, pdf_obj *a, pdf_obj *b)
float pdf_dict_get_inheritable_real(fz_context *ctx, pdf_obj *dict, pdf_obj *key)
pdf_obj * pdf_new_rect(fz_context *ctx, pdf_document *doc, fz_rect rect)
int pdf_is_null(fz_context *ctx, pdf_obj *obj)
void pdf_set_obj_parent(fz_context *ctx, pdf_obj *obj, int num)
void pdf_array_put_text_string(fz_context *ctx, pdf_obj *array, int i, const char *x)
void pdf_dict_put_matrix(fz_context *ctx, pdf_obj *dict, pdf_obj *key, fz_matrix x)
char * pdf_load_stream_or_string_as_utf8(fz_context *ctx, pdf_obj *src)
char * pdf_to_str_buf(fz_context *ctx, pdf_obj *obj)
int pdf_to_int(fz_context *ctx, pdf_obj *obj)
void pdf_dict_puts_drop(fz_context *ctx, pdf_obj *dict, const char *key, pdf_obj *val)
int pdf_is_image_stream(fz_context *ctx, pdf_obj *obj)
fz_matrix pdf_array_get_matrix(fz_context *ctx, pdf_obj *array, int index)
int pdf_array_find(fz_context *ctx, pdf_obj *array, pdf_obj *obj)
void pdf_array_put_real(fz_context *ctx, pdf_obj *array, int i, double x)
int pdf_mark_obj(fz_context *ctx, pdf_obj *obj)
void pdf_array_delete(fz_context *ctx, pdf_obj *array, int index)
void pdf_print_obj(fz_context *ctx, fz_output *out, pdf_obj *obj, int tight, int ascii)
float pdf_to_real(fz_context *ctx, pdf_obj *obj)
float pdf_dict_get_real_default(fz_context *ctx, pdf_obj *dict, pdf_obj *key, float def)
int pdf_dict_get_int(fz_context *ctx, pdf_obj *dict, pdf_obj *key)
void pdf_set_obj_memo(fz_context *ctx, pdf_obj *obj, int bit, int memo)
@ PDF_ENUM_NULL
Definition object.h:370
@ PDF_ENUM_TRUE
Definition object.h:371
@ PDF_ENUM_LIMIT
Definition object.h:1006
@ PDF_ENUM_FALSE
Definition object.h:372
void pdf_array_push_name(fz_context *ctx, pdf_obj *array, const char *x)
void pdf_drop_obj(fz_context *ctx, pdf_obj *obj)
int64_t pdf_to_date(fz_context *ctx, pdf_obj *time)
pdf_obj * pdf_new_point(fz_context *ctx, pdf_document *doc, fz_point point)
void pdf_array_put_drop(fz_context *ctx, pdf_obj *array, int i, pdf_obj *obj)
pdf_obj * pdf_array_get(fz_context *ctx, pdf_obj *array, int i)
int pdf_obj_is_singleton(fz_context *ctx, pdf_obj *obj)
pdf_obj * pdf_new_matrix(fz_context *ctx, pdf_document *doc, fz_matrix mtx)
int pdf_dict_get_bool_default(fz_context *ctx, pdf_obj *dict, pdf_obj *key, int def)
int pdf_is_real(fz_context *ctx, pdf_obj *obj)
const char * pdf_dict_get_text_string(fz_context *ctx, pdf_obj *dict, pdf_obj *key)
pdf_document * pdf_pin_document(fz_context *ctx, pdf_obj *obj)
int pdf_objcmp(fz_context *ctx, pdf_obj *a, pdf_obj *b)
void pdf_dict_put_val_null(fz_context *ctx, pdf_obj *obj, int idx)
int pdf_to_num(fz_context *ctx, pdf_obj *obj)
void pdf_dict_put_real(fz_context *ctx, pdf_obj *dict, pdf_obj *key, double x)
int pdf_obj_refs(fz_context *ctx, pdf_obj *ref)
fz_rect pdf_dict_get_rect(fz_context *ctx, pdf_obj *dict, pdf_obj *key)
int pdf_cycle(fz_context *ctx, pdf_cycle_list *here, pdf_cycle_list *prev, pdf_obj *obj)
int pdf_obj_memo(fz_context *ctx, pdf_obj *obj, int bit, int *memo)
char * pdf_new_utf8_from_pdf_stream_obj(fz_context *ctx, pdf_obj *src)
const char * pdf_dict_get_inheritable_text_string(fz_context *ctx, pdf_obj *dict, pdf_obj *key)
int pdf_obj_num_is_stream(fz_context *ctx, pdf_document *doc, int num)
void pdf_array_insert(fz_context *ctx, pdf_obj *array, pdf_obj *obj, int index)
int pdf_objcmp_resolve(fz_context *ctx, pdf_obj *a, pdf_obj *b)
void pdf_array_push_real(fz_context *ctx, pdf_obj *array, double x)
int pdf_is_dict(fz_context *ctx, pdf_obj *obj)
fz_rect pdf_array_get_rect(fz_context *ctx, pdf_obj *array, int index)
pdf_document * pdf_get_bound_document(fz_context *ctx, pdf_obj *obj)
void pdf_array_put(fz_context *ctx, pdf_obj *array, int i, pdf_obj *obj)
fz_point pdf_dict_get_point(fz_context *ctx, pdf_obj *dict, pdf_obj *key)
void pdf_dict_put_text_string(fz_context *ctx, pdf_obj *dict, pdf_obj *key, const char *x)
pdf_obj * pdf_dict_put_dict(fz_context *ctx, pdf_obj *dict, pdf_obj *key, int initial)
fz_rect pdf_to_rect(fz_context *ctx, pdf_obj *array)
pdf_obj * pdf_dict_getp(fz_context *ctx, pdf_obj *dict, const char *path)
pdf_obj * pdf_dict_getl(fz_context *ctx, pdf_obj *dict,...)
char * pdf_new_utf8_from_pdf_string_obj(fz_context *ctx, pdf_obj *src)
int pdf_to_bool(fz_context *ctx, pdf_obj *obj)
int pdf_to_int_default(fz_context *ctx, pdf_obj *obj, int def)
int pdf_mark_list_check(fz_context *ctx, pdf_mark_list *list, pdf_obj *obj)
int pdf_dict_get_bool(fz_context *ctx, pdf_obj *dict, pdf_obj *key)
pdf_obj * pdf_drop_singleton_obj(fz_context *ctx, pdf_obj *obj)
void pdf_array_put_name(fz_context *ctx, pdf_obj *array, int i, const char *x)
Definition buffer.h:41
Definition context.h:886
Definition geometry.h:388
Definition output.h:111
Definition geometry.h:187
Definition geometry.h:782
Definition geometry.h:231
Definition stream.h:320
Definition object.h:113
int num
Definition object.h:115
pdf_cycle_list * up
Definition object.h:114
Definition document.h:463
Definition object.h:127
int len
Definition object.h:128
unsigned char bits[FZ_FLEXIBLE_ARRAY]
Definition object.h:129
Definition object.h:138
int * list
Definition object.h:141
int max
Definition object.h:140
int len
Definition object.h:139
int local_list[8]
Definition object.h:142
Definition interpret.h:44
#define FZ_FLEXIBLE_ARRAY
Definition system.h:46