diff options
Diffstat (limited to 'source/pdf')
-rw-r--r-- | source/pdf/pdf-annot-edit.c | 2 | ||||
-rw-r--r-- | source/pdf/pdf-clean.c | 8 | ||||
-rw-r--r-- | source/pdf/pdf-device.c | 12 | ||||
-rw-r--r-- | source/pdf/pdf-font.c | 16 | ||||
-rw-r--r-- | source/pdf/pdf-image.c | 2 | ||||
-rw-r--r-- | source/pdf/pdf-page.c | 6 | ||||
-rw-r--r-- | source/pdf/pdf-write.c | 6 | ||||
-rw-r--r-- | source/pdf/pdf-xref.c | 47 |
8 files changed, 63 insertions, 36 deletions
diff --git a/source/pdf/pdf-annot-edit.c b/source/pdf/pdf-annot-edit.c index 6b085055..06b3495e 100644 --- a/source/pdf/pdf-annot-edit.c +++ b/source/pdf/pdf-annot-edit.c @@ -421,7 +421,7 @@ void pdf_set_free_text_details(fz_context *ctx, pdf_document *doc, pdf_annot *an find_free_font_name(ctx, form_fonts, nbuf, sizeof(nbuf)); font = pdf_new_dict(ctx, doc, 5); - ref = pdf_new_ref(ctx, doc, font); + ref = pdf_add_object(ctx, doc, font); pdf_dict_puts_drop(ctx, form_fonts, nbuf, ref); pdf_dict_put_drop(ctx, font, PDF_NAME_Type, PDF_NAME_Font); diff --git a/source/pdf/pdf-clean.c b/source/pdf/pdf-clean.c index 8e1dc894..2c8ade73 100644 --- a/source/pdf/pdf-clean.c +++ b/source/pdf/pdf-clean.c @@ -39,7 +39,7 @@ pdf_clean_stream_object(fz_context *ctx, pdf_document *doc, pdf_obj *obj, pdf_ob if (own_res) { - ref = pdf_new_ref(ctx, doc, res); + ref = pdf_add_object(ctx, doc, res); pdf_dict_put(ctx, obj, PDF_NAME_Resources, ref); } } @@ -112,7 +112,7 @@ pdf_clean_type3(fz_context *ctx, pdf_document *doc, pdf_obj *obj, pdf_obj *orig_ /* ProcSet - no cleaning possible. Inherit this from the old dict. */ pdf_dict_put(ctx, res, PDF_NAME_ProcSet, pdf_dict_get(ctx, orig_res, PDF_NAME_ProcSet)); - ref = pdf_new_ref(ctx, doc, res); + ref = pdf_add_object(ctx, doc, res); pdf_dict_put(ctx, obj, PDF_NAME_Resources, ref); } fz_always(ctx) @@ -161,7 +161,7 @@ void pdf_clean_page_contents(fz_context *ctx, pdf_document *doc, pdf_page *page, { /* create a new object to replace the array */ new_obj = pdf_new_dict(ctx, doc, 1); - new_ref = pdf_new_ref(ctx, doc, new_obj); + new_ref = pdf_add_object(ctx, doc, new_obj); pdf_drop_obj(ctx, page->contents); page->contents = contents = pdf_keep_obj(ctx, new_ref); } @@ -268,7 +268,7 @@ void pdf_clean_page_contents(fz_context *ctx, pdf_document *doc, pdf_page *page, pdf_update_stream(ctx, doc, contents, buffer, 0); pdf_drop_obj(ctx, page->resources); - ref = pdf_new_ref(ctx, doc, res); + ref = pdf_add_object(ctx, doc, res); page->resources = pdf_keep_obj(ctx, ref); pdf_dict_put(ctx, page->me, PDF_NAME_Resources, ref); } diff --git a/source/pdf/pdf-device.c b/source/pdf/pdf-device.c index 42d4bcb0..baed991a 100644 --- a/source/pdf/pdf-device.c +++ b/source/pdf/pdf-device.c @@ -323,7 +323,7 @@ pdf_dev_alpha(fz_context *ctx, pdf_device *pdev, float alpha, int stroke) { char text[32]; pdf_dict_put_drop(ctx, o, (stroke ? PDF_NAME_CA : PDF_NAME_ca), pdf_new_real(ctx, doc, alpha)); - ref = pdf_new_ref(ctx, doc, o); + ref = pdf_add_object(ctx, doc, o); fz_snprintf(text, sizeof(text), "ExtGState/Alp%d", i); pdf_dict_putp(ctx, pdev->resources, text, ref); } @@ -577,7 +577,7 @@ pdf_dev_new_form(fz_context *ctx, pdf_obj **form_ref, pdf_device *pdev, const fz pdf_dict_put_drop(ctx, group, PDF_NAME_CS, PDF_NAME_DeviceCMYK); else pdf_dict_put_drop(ctx, group, PDF_NAME_CS, PDF_NAME_DeviceRGB); - group_ref = pdev->groups[num].ref = pdf_new_ref(ctx, doc, group); + group_ref = pdev->groups[num].ref = pdf_add_object(ctx, doc, group); } fz_always(ctx) { @@ -598,7 +598,7 @@ pdf_dev_new_form(fz_context *ctx, pdf_obj **form_ref, pdf_device *pdev, const fz pdf_dict_put(ctx, form, PDF_NAME_Group, group_ref); pdf_dict_put_drop(ctx, form, PDF_NAME_FormType, pdf_new_int(ctx, doc, 1)); pdf_dict_put_drop(ctx, form, PDF_NAME_BBox, pdf_new_rect(ctx, doc, bbox)); - *form_ref = pdf_new_ref(ctx, doc, form); + *form_ref = pdf_add_object(ctx, doc, form); } fz_always(ctx) { @@ -916,8 +916,8 @@ pdf_dev_begin_mask(fz_context *ctx, fz_device *dev, const fz_rect *bbox, int lum egs = pdf_new_dict(ctx, doc, 5); pdf_dict_put_drop(ctx, egs, PDF_NAME_Type, PDF_NAME_ExtGState); - pdf_dict_put_drop(ctx, egs, PDF_NAME_SMask, pdf_new_ref(ctx, doc, smask)); - egs_ref = pdf_new_ref(ctx, doc, egs); + pdf_dict_put_drop(ctx, egs, PDF_NAME_SMask, pdf_add_object(ctx, doc, smask)); + egs_ref = pdf_add_object(ctx, doc, egs); { char text[32]; @@ -1165,7 +1165,7 @@ fz_device *pdf_page_write(fz_context *ctx, pdf_document *doc, pdf_page *page) obj = pdf_new_dict(ctx, doc, 0); fz_try(ctx) { - pdf_obj *new_contents = pdf_new_ref(ctx, doc, obj); + pdf_obj *new_contents = pdf_add_object(ctx, doc, obj); pdf_dict_put(ctx, page->me, PDF_NAME_Contents, new_contents); pdf_drop_obj(ctx, page->contents); page->contents = new_contents; diff --git a/source/pdf/pdf-font.c b/source/pdf/pdf-font.c index f45f71c6..e2f37cbd 100644 --- a/source/pdf/pdf-font.c +++ b/source/pdf/pdf-font.c @@ -1412,7 +1412,7 @@ pdf_add_font_file(fz_context *ctx, pdf_document *doc, fz_font *font) pdf_dict_put_drop(ctx, obj, PDF_NAME_Subtype, PDF_NAME_Type1C); break; } - ref = pdf_new_ref(ctx, doc, obj); + ref = pdf_add_object(ctx, doc, obj); pdf_update_stream(ctx, doc, ref, buf, 0); } fz_always(ctx) @@ -1471,7 +1471,7 @@ pdf_add_font_descriptor(fz_context *ctx, pdf_document *doc, pdf_font_desc *fontd } } - ref = pdf_new_ref(ctx, doc, fdobj); + ref = pdf_add_object(ctx, doc, fdobj); } fz_always(ctx) { @@ -1523,7 +1523,7 @@ pdf_add_simple_font_widths(fz_context *ctx, pdf_document *doc, pdf_font_desc *fo fz_rethrow(ctx); } - return pdf_new_ref(ctx, doc, arr); + return pdf_add_object_drop(ctx, doc, arr); } static pdf_obj* @@ -1666,7 +1666,7 @@ pdf_add_cid_font_widths(fz_context *ctx, pdf_document *doc, pdf_font_desc *fontd pdf_drop_obj(ctx, run_obj); fz_rethrow(ctx); } - return pdf_new_ref(ctx, doc, fwobj); + return pdf_add_object_drop(ctx, doc, fwobj); } /* Descendant font construction used for CID font creation from ttf or Adobe type1 */ @@ -1720,7 +1720,7 @@ pdf_add_descendant_font(fz_context *ctx, pdf_document *doc, pdf_font_desc *fontd if (fw != NULL) pdf_dict_put(ctx, fobj, PDF_NAME_W, fw); - fref = pdf_new_ref(ctx, doc, fobj); + fref = pdf_add_object(ctx, doc, fobj); } fz_always(ctx) { @@ -1897,7 +1897,7 @@ pdf_add_to_unicode(fz_context *ctx, pdf_document *doc, fz_font *font) fz_buffer_printf(ctx, buf, "end\nend\n"); fobj = pdf_new_dict(ctx, doc, 3); - fref = pdf_new_ref(ctx, doc, fobj); + fref = pdf_add_object(ctx, doc, fobj); pdf_update_stream(ctx, doc, fref, buf, 0); } fz_always(ctx) @@ -1969,7 +1969,7 @@ pdf_add_cid_font(fz_context *ctx, pdf_document *doc, fz_font *font) pdf_dict_put(ctx, fobj, PDF_NAME_DescendantFonts, obj_array); if (obj_tounicode_ref) pdf_dict_put(ctx, fobj, PDF_NAME_ToUnicode, obj_tounicode_ref); - fref = pdf_new_ref(ctx, doc, fobj); + fref = pdf_add_object(ctx, doc, fobj); /* Add ref to our font resource hash table. */ fref = pdf_insert_resource(ctx, doc->resources->font, digest, fref); @@ -2054,7 +2054,7 @@ pdf_add_simple_font(fz_context *ctx, pdf_document *doc, fz_font *font) pdf_dict_put(ctx, fobj, PDF_NAME_FontDescriptor, fdes_ref); } - fref = pdf_new_ref(ctx, doc, fobj); + fref = pdf_add_object(ctx, doc, fobj); /* Add ref to our font resource hash table. */ fref = pdf_insert_resource(ctx, doc->resources->font, digest, fref); diff --git a/source/pdf/pdf-image.c b/source/pdf/pdf-image.c index df745616..04e1c1f0 100644 --- a/source/pdf/pdf-image.c +++ b/source/pdf/pdf-image.c @@ -441,7 +441,7 @@ pdf_add_image(fz_context *ctx, pdf_document *doc, fz_image *image, int mask) } if (image->mask) pdf_add_image(ctx, doc, image->mask, 0); - imref = pdf_new_ref(ctx, doc, imobj); + imref = pdf_add_object(ctx, doc, imobj); pdf_update_stream(ctx, doc, imref, buffer, 1); /* Add ref to our image resource hash table. */ diff --git a/source/pdf/pdf-page.c b/source/pdf/pdf-page.c index f327bfab..7242b16a 100644 --- a/source/pdf/pdf-page.c +++ b/source/pdf/pdf-page.c @@ -628,7 +628,7 @@ pdf_insert_page(fz_context *ctx, pdf_document *doc, pdf_page *page, int at) pdf_obj *page_ref; int i; - page_ref = pdf_new_ref(ctx, doc, page->me); + page_ref = pdf_add_object(ctx, doc, page->me); fz_try(ctx) { @@ -742,7 +742,7 @@ pdf_create_page(fz_context *ctx, pdf_document *doc, const fz_rect *mediabox, int if (contents != NULL) { obj = pdf_new_dict(ctx, doc, 4); - page->contents = pdf_new_ref(ctx, doc, obj); + page->contents = pdf_add_object(ctx, doc, obj); pdf_update_stream(ctx, doc, page->contents, contents, 0); pdf_drop_obj(ctx, obj); obj = NULL; @@ -755,7 +755,7 @@ pdf_create_page(fz_context *ctx, pdf_document *doc, const fz_rect *mediabox, int pdf_dict_put(ctx, pageobj, PDF_NAME_Resources, resources); else { - pdf_obj *ref = pdf_new_ref(ctx, doc, resources); + pdf_obj *ref = pdf_add_object(ctx, doc, resources); pdf_dict_put(ctx, pageobj, PDF_NAME_Resources, ref); pdf_drop_obj(ctx, ref); } diff --git a/source/pdf/pdf-write.c b/source/pdf/pdf-write.c index 6e9065bd..62ea6c88 100644 --- a/source/pdf/pdf-write.c +++ b/source/pdf/pdf-write.c @@ -1149,7 +1149,7 @@ add_linearization_objs(fz_context *ctx, pdf_document *doc, pdf_write_state *opts { /* Linearization params */ params_obj = pdf_new_dict(ctx, doc, 10); - params_ref = pdf_new_ref(ctx, doc, params_obj); + params_ref = pdf_add_object(ctx, doc, params_obj); params_num = pdf_to_num(ctx, params_ref); opts->use_list[params_num] = USE_PARAMS; @@ -1178,7 +1178,7 @@ add_linearization_objs(fz_context *ctx, pdf_document *doc, pdf_write_state *opts /* Primary hint stream */ hint_obj = pdf_new_dict(ctx, doc, 10); - hint_ref = pdf_new_ref(ctx, doc, hint_obj); + hint_ref = pdf_add_object(ctx, doc, hint_obj); hint_num = pdf_to_num(ctx, hint_ref); opts->use_list[hint_num] = USE_HINTS; @@ -2947,7 +2947,7 @@ make_page_tree_node(fz_context *ctx, pdf_document *doc, int l, int r, pdf_obj *p if (!root) pdf_dict_put(ctx, me, PDF_NAME_Parent, parent_ref); a = pdf_new_array(ctx, doc, KIDS_PER_LEVEL); - me_ref = pdf_new_ref(ctx, doc, me); + me_ref = pdf_add_object(ctx, doc, me); for (spaces = KIDS_PER_LEVEL; l < r; spaces--) { diff --git a/source/pdf/pdf-xref.c b/source/pdf/pdf-xref.c index 4456c741..f8711d3c 100644 --- a/source/pdf/pdf-xref.c +++ b/source/pdf/pdf-xref.c @@ -700,14 +700,6 @@ pdf_xref_size_from_old_trailer(fz_context *ctx, pdf_document *doc, pdf_lexbuf *b return size; } -pdf_obj * -pdf_new_ref(fz_context *ctx, pdf_document *doc, pdf_obj *obj) -{ - int num = pdf_create_object(ctx, doc); - pdf_update_object(ctx, doc, num, obj); - return pdf_new_indirect(ctx, doc, num, 0); -} - static pdf_xref_entry * pdf_xref_find_subsection(fz_context *ctx, pdf_document *doc, fz_off_t ofs, int len) { @@ -2731,6 +2723,41 @@ pdf_document *pdf_specifics(fz_context *ctx, fz_document *doc) return (pdf_document *)((doc && doc->close == (fz_document_close_fn *)pdf_close_document) ? doc : NULL); } +pdf_obj * +pdf_add_object(fz_context *ctx, pdf_document *doc, pdf_obj *obj) +{ + int num; + if (pdf_is_indirect(ctx, obj)) + return pdf_keep_obj(ctx, obj); + num = pdf_create_object(ctx, doc); + pdf_update_object(ctx, doc, num, obj); + return pdf_new_indirect(ctx, doc, num, 0); +} + +pdf_obj * +pdf_add_object_drop(fz_context *ctx, pdf_document *doc, pdf_obj *obj) +{ + pdf_obj *ind; + fz_try(ctx) + ind = pdf_add_object(ctx, doc, obj); + fz_always(ctx) + pdf_drop_obj(ctx, obj); + fz_catch(ctx) + fz_rethrow(ctx); + return ind; +} + +pdf_obj * +pdf_add_stream(fz_context *ctx, pdf_document *doc, fz_buffer *buf) +{ + pdf_obj *ind = pdf_add_object_drop(ctx, doc, pdf_new_dict(ctx, doc, 4)); + fz_try(ctx) + pdf_update_stream(ctx, doc, ind, buf, 0); + fz_catch(ctx) + pdf_drop_obj(ctx, ind); + return ind; +} + pdf_document *pdf_create_document(fz_context *ctx) { pdf_document *doc; @@ -2757,12 +2784,12 @@ pdf_document *pdf_create_document(fz_context *ctx) trailer = pdf_new_dict(ctx, doc, 2); pdf_dict_put_drop(ctx, trailer, PDF_NAME_Size, pdf_new_int(ctx, doc, 3)); o = root = pdf_new_dict(ctx, doc, 2); - pdf_dict_put_drop(ctx, trailer, PDF_NAME_Root, pdf_new_ref(ctx, doc, o)); + pdf_dict_put_drop(ctx, trailer, PDF_NAME_Root, pdf_add_object(ctx, doc, o)); pdf_drop_obj(ctx, o); o = NULL; pdf_dict_put_drop(ctx, root, PDF_NAME_Type, PDF_NAME_Catalog); o = pages = pdf_new_dict(ctx, doc, 3); - pdf_dict_put_drop(ctx, root, PDF_NAME_Pages, pdf_new_ref(ctx, doc, o)); + pdf_dict_put_drop(ctx, root, PDF_NAME_Pages, pdf_add_object(ctx, doc, o)); pdf_drop_obj(ctx, o); o = NULL; pdf_dict_put_drop(ctx, pages, PDF_NAME_Type, PDF_NAME_Pages); |