Rev 4680 | Details | Compare with Previous | Last modification | View Log | RSS feed
Rev | Author | Line No. | Line |
---|---|---|---|
4680 | right-hear | 1 | #ifndef _MUPDF_H_ |
2 | #define _MUPDF_H_ |
||
3 | |||
4 | #ifndef _FITZ_H_ |
||
5 | #error "fitz.h must be included before mupdf.h" |
||
6 | #endif |
||
7 | |||
8 | typedef struct pdf_xref_s pdf_xref; |
||
9 | |||
10 | /* |
||
11 | * tokenizer and low-level object parser |
||
12 | */ |
||
13 | |||
14 | enum |
||
15 | { |
||
16 | PDF_TOK_ERROR, PDF_TOK_EOF, |
||
17 | PDF_TOK_OPEN_ARRAY, PDF_TOK_CLOSE_ARRAY, |
||
18 | PDF_TOK_OPEN_DICT, PDF_TOK_CLOSE_DICT, |
||
19 | PDF_TOK_OPEN_BRACE, PDF_TOK_CLOSE_BRACE, |
||
20 | PDF_TOK_NAME, PDF_TOK_INT, PDF_TOK_REAL, PDF_TOK_STRING, PDF_TOK_KEYWORD, |
||
21 | PDF_TOK_R, PDF_TOK_TRUE, PDF_TOK_FALSE, PDF_TOK_NULL, |
||
22 | PDF_TOK_OBJ, PDF_TOK_ENDOBJ, |
||
23 | PDF_TOK_STREAM, PDF_TOK_ENDSTREAM, |
||
24 | PDF_TOK_XREF, PDF_TOK_TRAILER, PDF_TOK_STARTXREF, |
||
25 | PDF_NUM_TOKENS |
||
26 | }; |
||
27 | |||
28 | fz_error pdf_lex(int *tok, fz_stream *f, char *buf, int n, int *len); |
||
29 | |||
30 | fz_error pdf_parse_array(fz_obj **op, pdf_xref *xref, fz_stream *f, char *buf, int cap); |
||
31 | fz_error pdf_parse_dict(fz_obj **op, pdf_xref *xref, fz_stream *f, char *buf, int cap); |
||
32 | fz_error pdf_parse_stm_obj(fz_obj **op, pdf_xref *xref, fz_stream *f, char *buf, int cap); |
||
33 | fz_error pdf_parse_ind_obj(fz_obj **op, pdf_xref *xref, fz_stream *f, char *buf, int cap, int *num, int *gen, int *stm_ofs); |
||
34 | |||
35 | fz_rect pdf_to_rect(fz_obj *array); |
||
36 | fz_matrix pdf_to_matrix(fz_obj *array); |
||
37 | char *pdf_to_utf8(fz_obj *src); |
||
38 | unsigned short *pdf_to_ucs2(fz_obj *src); |
||
39 | fz_obj *pdf_to_utf8_name(fz_obj *src); |
||
40 | char *pdf_from_ucs2(unsigned short *str); |
||
41 | |||
42 | /* |
||
43 | * xref and object / stream api |
||
44 | */ |
||
45 | |||
46 | typedef struct pdf_xref_entry_s pdf_xref_entry; |
||
47 | typedef struct pdf_crypt_s pdf_crypt; |
||
48 | |||
49 | struct pdf_xref_entry_s |
||
50 | { |
||
51 | int ofs; /* file offset / objstm object number */ |
||
52 | int gen; /* generation / objstm index */ |
||
53 | int stm_ofs; /* on-disk stream */ |
||
54 | fz_obj *obj; /* stored/cached object */ |
||
55 | int type; /* 0=unset (f)ree i(n)use (o)bjstm */ |
||
56 | }; |
||
57 | |||
58 | struct pdf_xref_s |
||
59 | { |
||
60 | fz_stream *file; |
||
61 | int version; |
||
62 | int startxref; |
||
63 | int file_size; |
||
64 | pdf_crypt *crypt; |
||
65 | fz_obj *trailer; |
||
66 | |||
67 | int len; |
||
68 | pdf_xref_entry *table; |
||
69 | |||
70 | int page_len; |
||
71 | int page_cap; |
||
72 | fz_obj **page_objs; |
||
73 | fz_obj **page_refs; |
||
74 | |||
75 | struct pdf_store_s *store; |
||
76 | |||
77 | char scratch[65536]; |
||
78 | }; |
||
79 | |||
80 | fz_obj *pdf_resolve_indirect(fz_obj *ref); |
||
81 | fz_error pdf_cache_object(pdf_xref *, int num, int gen); |
||
82 | fz_error pdf_load_object(fz_obj **objp, pdf_xref *, int num, int gen); |
||
83 | void pdf_update_object( pdf_xref *xref, int num, int gen, fz_obj *newobj); |
||
84 | |||
85 | int pdf_is_stream(pdf_xref *xref, int num, int gen); |
||
86 | fz_stream *pdf_open_inline_stream(fz_stream *chain, pdf_xref *xref, fz_obj *stmobj, int length); |
||
87 | fz_error pdf_load_raw_stream(fz_buffer **bufp, pdf_xref *xref, int num, int gen); |
||
88 | fz_error pdf_load_stream(fz_buffer **bufp, pdf_xref *xref, int num, int gen); |
||
89 | fz_error pdf_open_raw_stream(fz_stream **stmp, pdf_xref *, int num, int gen); |
||
90 | fz_error pdf_open_stream(fz_stream **stmp, pdf_xref *, int num, int gen); |
||
91 | fz_error pdf_open_stream_at(fz_stream **stmp, pdf_xref *xref, int num, int gen, fz_obj *dict, int stm_ofs); |
||
92 | |||
93 | fz_error pdf_open_xref_with_stream(pdf_xref **xrefp, fz_stream *file, char *password); |
||
94 | fz_error pdf_open_xref(pdf_xref **xrefp, const char *filename, char *password); |
||
95 | void pdf_free_xref(pdf_xref *); |
||
96 | |||
97 | /* private */ |
||
98 | fz_error pdf_repair_xref(pdf_xref *xref, char *buf, int bufsize); |
||
99 | fz_error pdf_repair_obj_stms(pdf_xref *xref); |
||
100 | void pdf_debug_xref(pdf_xref *); |
||
101 | void pdf_resize_xref(pdf_xref *xref, int newcap); |
||
102 | |||
103 | /* |
||
104 | * Encryption |
||
105 | */ |
||
106 | |||
107 | enum |
||
108 | { |
||
109 | PDF_PERM_PRINT = 1 << 2, |
||
110 | PDF_PERM_CHANGE = 1 << 3, |
||
111 | PDF_PERM_COPY = 1 << 4, |
||
112 | PDF_PERM_NOTES = 1 << 5, |
||
113 | PDF_PERM_FILL_FORM = 1 << 8, |
||
114 | PDF_PERM_ACCESSIBILITY = 1 << 9, |
||
115 | PDF_PERM_ASSEMBLE = 1 << 10, |
||
116 | PDF_PERM_HIGH_RES_PRINT = 1 << 11, |
||
117 | PDF_DEFAULT_PERM_FLAGS = 0xfffc |
||
118 | }; |
||
119 | |||
120 | fz_error pdf_new_crypt(pdf_crypt **cp, fz_obj *enc, fz_obj *id); |
||
121 | void pdf_free_crypt(pdf_crypt *crypt); |
||
122 | |||
123 | void pdf_crypt_obj(pdf_crypt *crypt, fz_obj *obj, int num, int gen); |
||
124 | fz_stream *pdf_open_crypt(fz_stream *chain, pdf_crypt *crypt, int num, int gen); |
||
125 | fz_stream *pdf_open_crypt_with_filter(fz_stream *chain, pdf_crypt *crypt, char *name, int num, int gen); |
||
126 | |||
127 | int pdf_needs_password(pdf_xref *xref); |
||
128 | int pdf_authenticate_password(pdf_xref *xref, char *pw); |
||
129 | int pdf_has_permission(pdf_xref *xref, int p); |
||
130 | |||
131 | int pdf_get_crypt_revision(pdf_xref *xref); |
||
132 | char *pdf_get_crypt_method(pdf_xref *xref); |
||
133 | int pdf_get_crypt_length(pdf_xref *xref); |
||
134 | unsigned char *pdf_get_crypt_key(pdf_xref *xref); |
||
135 | |||
136 | void pdf_debug_crypt(pdf_crypt *crypt); |
||
137 | |||
138 | /* |
||
139 | * Resource store |
||
140 | */ |
||
141 | |||
142 | typedef struct pdf_store_s pdf_store; |
||
143 | |||
144 | pdf_store *pdf_new_store(void); |
||
145 | void pdf_free_store(pdf_store *store); |
||
146 | void pdf_debug_store(pdf_store *store); |
||
147 | |||
148 | void pdf_store_item(pdf_store *store, void *keepfn, void *dropfn, fz_obj *key, void *val); |
||
149 | void *pdf_find_item(pdf_store *store, void *dropfn, fz_obj *key); |
||
150 | void pdf_remove_item(pdf_store *store, void *dropfn, fz_obj *key); |
||
151 | void pdf_age_store(pdf_store *store, int maxage); |
||
152 | |||
153 | /* |
||
154 | * Functions, Colorspaces, Shadings and Images |
||
155 | */ |
||
156 | |||
157 | typedef struct pdf_function_s pdf_function; |
||
158 | |||
159 | fz_error pdf_load_function(pdf_function **func, pdf_xref *xref, fz_obj *ref); |
||
160 | void pdf_eval_function(pdf_function *func, float *in, int inlen, float *out, int outlen); |
||
161 | pdf_function *pdf_keep_function(pdf_function *func); |
||
162 | void pdf_drop_function(pdf_function *func); |
||
163 | |||
164 | fz_error pdf_load_colorspace(fz_colorspace **csp, pdf_xref *xref, fz_obj *obj); |
||
165 | fz_pixmap *pdf_expand_indexed_pixmap(fz_pixmap *src); |
||
166 | |||
167 | fz_error pdf_load_shading(fz_shade **shadep, pdf_xref *xref, fz_obj *obj); |
||
168 | |||
169 | fz_error pdf_load_inline_image(fz_pixmap **imgp, pdf_xref *xref, fz_obj *rdb, fz_obj *dict, fz_stream *file); |
||
170 | fz_error pdf_load_image(fz_pixmap **imgp, pdf_xref *xref, fz_obj *obj); |
||
171 | int pdf_is_jpx_image(fz_obj *dict); |
||
172 | |||
173 | /* |
||
174 | * Pattern |
||
175 | */ |
||
176 | |||
177 | typedef struct pdf_pattern_s pdf_pattern; |
||
178 | |||
179 | struct pdf_pattern_s |
||
180 | { |
||
181 | int refs; |
||
182 | int ismask; |
||
183 | float xstep; |
||
184 | float ystep; |
||
185 | fz_matrix matrix; |
||
186 | fz_rect bbox; |
||
187 | fz_obj *resources; |
||
188 | fz_buffer *contents; |
||
189 | }; |
||
190 | |||
191 | fz_error pdf_load_pattern(pdf_pattern **patp, pdf_xref *xref, fz_obj *obj); |
||
192 | pdf_pattern *pdf_keep_pattern(pdf_pattern *pat); |
||
193 | void pdf_drop_pattern(pdf_pattern *pat); |
||
194 | |||
195 | /* |
||
196 | * XObject |
||
197 | */ |
||
198 | |||
199 | typedef struct pdf_xobject_s pdf_xobject; |
||
200 | |||
201 | struct pdf_xobject_s |
||
202 | { |
||
203 | int refs; |
||
204 | fz_matrix matrix; |
||
205 | fz_rect bbox; |
||
206 | int isolated; |
||
207 | int knockout; |
||
208 | int transparency; |
||
209 | fz_colorspace *colorspace; |
||
210 | fz_obj *resources; |
||
211 | fz_buffer *contents; |
||
212 | }; |
||
213 | |||
214 | fz_error pdf_load_xobject(pdf_xobject **xobjp, pdf_xref *xref, fz_obj *obj); |
||
215 | pdf_xobject *pdf_keep_xobject(pdf_xobject *xobj); |
||
216 | void pdf_drop_xobject(pdf_xobject *xobj); |
||
217 | |||
218 | /* |
||
219 | * CMap |
||
220 | */ |
||
221 | |||
222 | typedef struct pdf_cmap_s pdf_cmap; |
||
223 | typedef struct pdf_range_s pdf_range; |
||
224 | |||
225 | enum { PDF_CMAP_SINGLE, PDF_CMAP_RANGE, PDF_CMAP_TABLE, PDF_CMAP_MULTI }; |
||
226 | |||
227 | struct pdf_range_s |
||
228 | { |
||
229 | unsigned short low; |
||
230 | /* Next, we pack 2 fields into the same unsigned short. Top 14 bits |
||
231 | * are the extent, bottom 2 bits are flags: single, range, table, |
||
232 | * multi */ |
||
233 | unsigned short extent_flags; |
||
234 | unsigned short offset; /* range-delta or table-index */ |
||
235 | }; |
||
236 | |||
237 | struct pdf_cmap_s |
||
238 | { |
||
239 | int refs; |
||
240 | char cmap_name[32]; |
||
241 | |||
242 | char usecmap_name[32]; |
||
243 | pdf_cmap *usecmap; |
||
244 | |||
245 | int wmode; |
||
246 | |||
247 | int codespace_len; |
||
248 | struct |
||
249 | { |
||
250 | unsigned short n; |
||
251 | unsigned short low; |
||
252 | unsigned short high; |
||
253 | } codespace[40]; |
||
254 | |||
255 | int rlen, rcap; |
||
256 | pdf_range *ranges; |
||
257 | |||
258 | int tlen, tcap; |
||
259 | unsigned short *table; |
||
260 | }; |
||
261 | |||
262 | pdf_cmap *pdf_new_cmap(void); |
||
263 | pdf_cmap *pdf_keep_cmap(pdf_cmap *cmap); |
||
264 | void pdf_drop_cmap(pdf_cmap *cmap); |
||
265 | |||
266 | void pdf_debug_cmap(pdf_cmap *cmap); |
||
267 | int pdf_get_wmode(pdf_cmap *cmap); |
||
268 | void pdf_set_wmode(pdf_cmap *cmap, int wmode); |
||
269 | void pdf_set_usecmap(pdf_cmap *cmap, pdf_cmap *usecmap); |
||
270 | |||
271 | void pdf_add_codespace(pdf_cmap *cmap, int low, int high, int n); |
||
272 | void pdf_map_range_to_table(pdf_cmap *cmap, int low, int *map, int len); |
||
273 | void pdf_map_range_to_range(pdf_cmap *cmap, int srclo, int srchi, int dstlo); |
||
274 | void pdf_map_one_to_many(pdf_cmap *cmap, int one, int *many, int len); |
||
275 | void pdf_sort_cmap(pdf_cmap *cmap); |
||
276 | |||
277 | int pdf_lookup_cmap(pdf_cmap *cmap, int cpt); |
||
278 | int pdf_lookup_cmap_full(pdf_cmap *cmap, int cpt, int *out); |
||
279 | unsigned char *pdf_decode_cmap(pdf_cmap *cmap, unsigned char *s, int *cpt); |
||
280 | |||
281 | pdf_cmap *pdf_new_identity_cmap(int wmode, int bytes); |
||
282 | fz_error pdf_parse_cmap(pdf_cmap **cmapp, fz_stream *file); |
||
283 | fz_error pdf_load_embedded_cmap(pdf_cmap **cmapp, pdf_xref *xref, fz_obj *ref); |
||
284 | fz_error pdf_load_system_cmap(pdf_cmap **cmapp, char *name); |
||
285 | pdf_cmap *pdf_find_builtin_cmap(char *cmap_name); |
||
286 | |||
287 | /* |
||
288 | * Font |
||
289 | */ |
||
290 | |||
291 | enum |
||
292 | { |
||
293 | PDF_FD_FIXED_PITCH = 1 << 0, |
||
294 | PDF_FD_SERIF = 1 << 1, |
||
295 | PDF_FD_SYMBOLIC = 1 << 2, |
||
296 | PDF_FD_SCRIPT = 1 << 3, |
||
297 | PDF_FD_NONSYMBOLIC = 1 << 5, |
||
298 | PDF_FD_ITALIC = 1 << 6, |
||
299 | PDF_FD_ALL_CAP = 1 << 16, |
||
300 | PDF_FD_SMALL_CAP = 1 << 17, |
||
301 | PDF_FD_FORCE_BOLD = 1 << 18 |
||
302 | }; |
||
303 | |||
304 | enum { PDF_ROS_CNS, PDF_ROS_GB, PDF_ROS_JAPAN, PDF_ROS_KOREA }; |
||
305 | |||
306 | void pdf_load_encoding(char **estrings, char *encoding); |
||
307 | int pdf_lookup_agl(char *name); |
||
308 | const char **pdf_lookup_agl_duplicates(int ucs); |
||
309 | |||
310 | extern const unsigned short pdf_doc_encoding[256]; |
||
311 | extern const char * const pdf_mac_roman[256]; |
||
312 | extern const char * const pdf_mac_expert[256]; |
||
313 | extern const char * const pdf_win_ansi[256]; |
||
314 | extern const char * const pdf_standard[256]; |
||
315 | |||
316 | typedef struct pdf_font_desc_s pdf_font_desc; |
||
317 | typedef struct pdf_hmtx_s pdf_hmtx; |
||
318 | typedef struct pdf_vmtx_s pdf_vmtx; |
||
319 | |||
320 | struct pdf_hmtx_s |
||
321 | { |
||
322 | unsigned short lo; |
||
323 | unsigned short hi; |
||
324 | int w; /* type3 fonts can be big! */ |
||
325 | }; |
||
326 | |||
327 | struct pdf_vmtx_s |
||
328 | { |
||
329 | unsigned short lo; |
||
330 | unsigned short hi; |
||
331 | short x; |
||
332 | short y; |
||
333 | short w; |
||
334 | }; |
||
335 | |||
336 | struct pdf_font_desc_s |
||
337 | { |
||
338 | int refs; |
||
339 | |||
340 | fz_font *font; |
||
341 | |||
342 | /* FontDescriptor */ |
||
343 | int flags; |
||
344 | float italic_angle; |
||
345 | float ascent; |
||
346 | float descent; |
||
347 | float cap_height; |
||
348 | float x_height; |
||
349 | float missing_width; |
||
350 | |||
351 | /* Encoding (CMap) */ |
||
352 | pdf_cmap *encoding; |
||
353 | pdf_cmap *to_ttf_cmap; |
||
354 | int cid_to_gid_len; |
||
355 | unsigned short *cid_to_gid; |
||
356 | |||
357 | /* ToUnicode */ |
||
358 | pdf_cmap *to_unicode; |
||
359 | int cid_to_ucs_len; |
||
360 | unsigned short *cid_to_ucs; |
||
361 | |||
362 | /* Metrics (given in the PDF file) */ |
||
363 | int wmode; |
||
364 | |||
365 | int hmtx_len, hmtx_cap; |
||
366 | pdf_hmtx dhmtx; |
||
367 | pdf_hmtx *hmtx; |
||
368 | |||
369 | int vmtx_len, vmtx_cap; |
||
370 | pdf_vmtx dvmtx; |
||
371 | pdf_vmtx *vmtx; |
||
372 | |||
373 | int is_embedded; |
||
374 | }; |
||
375 | |||
376 | void pdf_set_font_wmode(pdf_font_desc *font, int wmode); |
||
377 | void pdf_set_default_hmtx(pdf_font_desc *font, int w); |
||
378 | void pdf_set_default_vmtx(pdf_font_desc *font, int y, int w); |
||
379 | void pdf_add_hmtx(pdf_font_desc *font, int lo, int hi, int w); |
||
380 | void pdf_add_vmtx(pdf_font_desc *font, int lo, int hi, int x, int y, int w); |
||
381 | void pdf_end_hmtx(pdf_font_desc *font); |
||
382 | void pdf_end_vmtx(pdf_font_desc *font); |
||
383 | pdf_hmtx pdf_get_hmtx(pdf_font_desc *font, int cid); |
||
384 | pdf_vmtx pdf_get_vmtx(pdf_font_desc *font, int cid); |
||
385 | |||
386 | fz_error pdf_load_to_unicode(pdf_font_desc *font, pdf_xref *xref, char **strings, char *collection, fz_obj *cmapstm); |
||
387 | |||
388 | int pdf_font_cid_to_gid(pdf_font_desc *fontdesc, int cid); |
||
389 | |||
390 | unsigned char *pdf_find_builtin_font(char *name, unsigned int *len); |
||
391 | unsigned char *pdf_find_substitute_font(int mono, int serif, int bold, int italic, unsigned int *len); |
||
392 | unsigned char *pdf_find_substitute_cjk_font(int ros, int serif, unsigned int *len); |
||
393 | |||
394 | fz_error pdf_load_type3_font(pdf_font_desc **fontp, pdf_xref *xref, fz_obj *rdb, fz_obj *obj); |
||
395 | fz_error pdf_load_font(pdf_font_desc **fontp, pdf_xref *xref, fz_obj *rdb, fz_obj *obj); |
||
396 | |||
397 | pdf_font_desc *pdf_new_font_desc(void); |
||
398 | pdf_font_desc *pdf_keep_font(pdf_font_desc *fontdesc); |
||
399 | void pdf_drop_font(pdf_font_desc *font); |
||
400 | |||
401 | void pdf_debug_font(pdf_font_desc *fontdesc); |
||
402 | |||
403 | /* |
||
404 | * Interactive features |
||
405 | */ |
||
406 | |||
407 | typedef struct pdf_link_s pdf_link; |
||
408 | typedef struct pdf_annot_s pdf_annot; |
||
409 | typedef struct pdf_outline_s pdf_outline; |
||
410 | |||
411 | typedef enum pdf_link_kind_e |
||
412 | { |
||
413 | PDF_LINK_GOTO = 0, |
||
414 | PDF_LINK_URI, |
||
415 | PDF_LINK_LAUNCH, |
||
416 | PDF_LINK_NAMED, |
||
417 | PDF_LINK_ACTION, |
||
418 | } pdf_link_kind; |
||
419 | |||
420 | struct pdf_link_s |
||
421 | { |
||
422 | pdf_link_kind kind; |
||
423 | fz_rect rect; |
||
424 | fz_obj *dest; |
||
425 | pdf_link *next; |
||
426 | }; |
||
427 | |||
428 | struct pdf_annot_s |
||
429 | { |
||
430 | fz_obj *obj; |
||
431 | fz_rect rect; |
||
432 | pdf_xobject *ap; |
||
433 | fz_matrix matrix; |
||
434 | pdf_annot *next; |
||
435 | }; |
||
436 | |||
437 | struct pdf_outline_s |
||
438 | { |
||
439 | char *title; |
||
440 | pdf_link *link; |
||
441 | int count; |
||
442 | pdf_outline *child; |
||
443 | pdf_outline *next; |
||
444 | }; |
||
445 | |||
446 | fz_obj *pdf_lookup_dest(pdf_xref *xref, fz_obj *needle); |
||
447 | fz_obj *pdf_lookup_name(pdf_xref *xref, char *which, fz_obj *needle); |
||
448 | fz_obj *pdf_load_name_tree(pdf_xref *xref, char *which); |
||
449 | |||
450 | pdf_outline *pdf_load_outline(pdf_xref *xref); |
||
451 | void pdf_debug_outline(pdf_outline *outline, int level); |
||
452 | void pdf_free_outline(pdf_outline *outline); |
||
453 | |||
454 | pdf_link *pdf_load_link(pdf_xref *xref, fz_obj *dict); |
||
455 | void pdf_load_links(pdf_link **, pdf_xref *, fz_obj *annots); |
||
456 | void pdf_free_link(pdf_link *link); |
||
457 | |||
458 | void pdf_load_annots(pdf_annot **, pdf_xref *, fz_obj *annots); |
||
459 | void pdf_free_annot(pdf_annot *link); |
||
460 | |||
461 | /* |
||
462 | * Page tree, pages and related objects |
||
463 | */ |
||
464 | |||
465 | typedef struct pdf_page_s pdf_page; |
||
466 | |||
467 | struct pdf_page_s |
||
468 | { |
||
469 | fz_rect mediabox; |
||
470 | int rotate; |
||
471 | int transparency; |
||
472 | fz_obj *resources; |
||
473 | fz_buffer *contents; |
||
474 | pdf_link *links; |
||
475 | pdf_annot *annots; |
||
476 | }; |
||
477 | |||
478 | fz_error pdf_load_page_tree(pdf_xref *xref); |
||
479 | int pdf_find_page_number(pdf_xref *xref, fz_obj *pageobj); |
||
480 | int pdf_count_pages(pdf_xref *xref); |
||
481 | |||
482 | fz_error pdf_load_page(pdf_page **pagep, pdf_xref *xref, int number); |
||
483 | void pdf_free_page(pdf_page *page); |
||
484 | |||
485 | /* |
||
486 | * Content stream parsing |
||
487 | */ |
||
488 | |||
489 | fz_error pdf_run_page_with_usage(pdf_xref *xref, pdf_page *page, fz_device *dev, fz_matrix ctm, char *target); |
||
490 | fz_error pdf_run_page(pdf_xref *xref, pdf_page *page, fz_device *dev, fz_matrix ctm); |
||
491 | fz_error pdf_run_glyph(pdf_xref *xref, fz_obj *resources, fz_buffer *contents, fz_device *dev, fz_matrix ctm); |
||
492 | |||
493 | #endif><>><>><>><>><>><>><>><>><>><>><>><>><>><>><>><>><> |