Book a Demo!
CoCalc Logo Icon
StoreFeaturesDocsShareSupportNewsAboutPoliciesSign UpSign In
Download
7638 views
1
#ifndef MUPDF_PDF_XREF_H
2
#define MUPDF_PDF_XREF_H
3
4
/*
5
pdf_create_object: Allocate a slot in the xref table and return a fresh unused object number.
6
*/
7
int pdf_create_object(fz_context *ctx, pdf_document *doc);
8
9
/*
10
pdf_delete_object: Remove object from xref table, marking the slot as free.
11
*/
12
void pdf_delete_object(fz_context *ctx, pdf_document *doc, int num);
13
14
/*
15
pdf_update_object: Replace object in xref table with the passed in object.
16
*/
17
void pdf_update_object(fz_context *ctx, pdf_document *doc, int num, pdf_obj *obj);
18
19
/*
20
pdf_update_stream: Replace stream contents for object in xref table with the passed in buffer.
21
22
The buffer contents must match the /Filter setting if 'compressed' is true.
23
If 'compressed' is false, the /Filter and /DecodeParms entries are deleted.
24
The /Length entry is updated.
25
*/
26
void pdf_update_stream(fz_context *ctx, pdf_document *doc, pdf_obj *ref, fz_buffer *buf, int compressed);
27
28
/*
29
* xref and object / stream api
30
*/
31
32
typedef struct pdf_xref_entry_s pdf_xref_entry;
33
34
struct pdf_xref_entry_s
35
{
36
char type; /* 0=unset (f)ree i(n)use (o)bjstm */
37
unsigned char flags; /* bit 0 = marked */
38
unsigned short gen; /* generation / objstm index */
39
int ofs; /* file offset / objstm object number */
40
int stm_ofs; /* on-disk stream */
41
fz_buffer *stm_buf; /* in-memory stream (for updated objects) */
42
pdf_obj *obj; /* stored/cached object */
43
};
44
45
enum
46
{
47
PDF_OBJ_FLAG_MARK = 1,
48
};
49
50
typedef struct pdf_xref_subsec_s pdf_xref_subsec;
51
52
struct pdf_xref_subsec_s
53
{
54
pdf_xref_subsec *next;
55
int len;
56
int start;
57
pdf_xref_entry *table;
58
};
59
60
struct pdf_xref_s
61
{
62
int num_objects;
63
pdf_xref_subsec *subsec;
64
pdf_obj *trailer;
65
pdf_obj *pre_repair_trailer;
66
};
67
68
pdf_xref_entry *pdf_cache_object(fz_context *ctx, pdf_document *doc, int num, int gen);
69
70
int pdf_count_objects(fz_context *ctx, pdf_document *doc);
71
pdf_obj *pdf_resolve_indirect(fz_context *ctx, pdf_obj *ref);
72
pdf_obj *pdf_load_object(fz_context *ctx, pdf_document *doc, int num, int gen);
73
74
fz_buffer *pdf_load_raw_stream(fz_context *ctx, pdf_document *doc, int num, int gen);
75
fz_buffer *pdf_load_stream(fz_context *ctx, pdf_document *doc, int num, int gen);
76
fz_stream *pdf_open_raw_stream(fz_context *ctx, pdf_document *doc, int num, int gen);
77
fz_stream *pdf_open_stream(fz_context *ctx, pdf_document *doc, int num, int gen);
78
79
fz_stream *pdf_open_inline_stream(fz_context *ctx, pdf_document *doc, pdf_obj *stmobj, int length, fz_stream *chain, fz_compression_params *params);
80
fz_compressed_buffer *pdf_load_compressed_stream(fz_context *ctx, pdf_document *doc, int num, int gen);
81
void pdf_load_compressed_inline_image(fz_context *ctx, pdf_document *doc, pdf_obj *dict, int length, fz_stream *cstm, int indexed, fz_image *image);
82
fz_stream *pdf_open_stream_with_offset(fz_context *ctx, pdf_document *doc, int num, int gen, pdf_obj *dict, int stm_ofs);
83
fz_stream *pdf_open_compressed_stream(fz_context *ctx, fz_compressed_buffer *);
84
fz_stream *pdf_open_contents_stream(fz_context *ctx, pdf_document *doc, pdf_obj *obj);
85
fz_buffer *pdf_load_raw_renumbered_stream(fz_context *ctx, pdf_document *doc, int num, int gen, int orig_num, int orig_gen);
86
fz_buffer *pdf_load_renumbered_stream(fz_context *ctx, pdf_document *doc, int num, int gen, int orig_num, int orig_gen, int *truncated);
87
fz_stream *pdf_open_raw_renumbered_stream(fz_context *ctx, pdf_document *doc, int num, int gen, int orig_num, int orig_gen);
88
89
pdf_obj *pdf_trailer(fz_context *ctx, pdf_document *doc);
90
void pdf_set_populating_xref_trailer(fz_context *ctx, pdf_document *doc, pdf_obj *trailer);
91
int pdf_xref_len(fz_context *ctx, pdf_document *doc);
92
pdf_xref_entry *pdf_get_populating_xref_entry(fz_context *ctx, pdf_document *doc, int i);
93
pdf_xref_entry *pdf_get_xref_entry(fz_context *ctx, pdf_document *doc, int i);
94
void pdf_replace_xref(fz_context *ctx, pdf_document *doc, pdf_xref_entry *entries, int n);
95
void pdf_xref_ensure_incremental_object(fz_context *ctx, pdf_document *doc, int num);
96
int pdf_xref_is_incremental(fz_context *ctx, pdf_document *doc, int num);
97
98
void pdf_repair_xref(fz_context *ctx, pdf_document *doc);
99
void pdf_repair_obj_stms(fz_context *ctx, pdf_document *doc);
100
pdf_obj *pdf_new_ref(fz_context *ctx, pdf_document *doc, pdf_obj *obj);
101
void pdf_ensure_solid_xref(fz_context *ctx, pdf_document *doc, int num);
102
void pdf_mark_xref(fz_context *ctx, pdf_document *doc);
103
void pdf_clear_xref(fz_context *ctx, pdf_document *doc);
104
void pdf_clear_xref_to_mark(fz_context *ctx, pdf_document *doc);
105
106
int pdf_repair_obj(fz_context *ctx, pdf_document *doc, pdf_lexbuf *buf, int *stmofsp, int *stmlenp, pdf_obj **encrypt, pdf_obj **id, pdf_obj **page, int *tmpofs);
107
108
pdf_obj *pdf_progressive_advance(fz_context *ctx, pdf_document *doc, int pagenum);
109
110
void pdf_print_xref(fz_context *ctx, pdf_document *);
111
112
#endif
113
114