diff options
Diffstat (limited to 'source/pdf/pdf-clean.c')
-rw-r--r-- | source/pdf/pdf-clean.c | 33 |
1 files changed, 9 insertions, 24 deletions
diff --git a/source/pdf/pdf-clean.c b/source/pdf/pdf-clean.c index b88bbb71..7a72a2e2 100644 --- a/source/pdf/pdf-clean.c +++ b/source/pdf/pdf-clean.c @@ -5,7 +5,6 @@ pdf_clean_stream_object(fz_context *ctx, pdf_document *doc, pdf_obj *obj, pdf_ob { pdf_process process, process2; fz_buffer *buffer; - int num; pdf_obj *res = NULL; pdf_obj *ref = NULL; @@ -33,9 +32,7 @@ pdf_clean_stream_object(fz_context *ctx, pdf_document *doc, pdf_obj *obj, pdf_ob pdf_process_stream_object(ctx, doc, obj, &process, orig_res, cookie); - num = pdf_to_num(ctx, obj); - pdf_dict_dels(ctx, obj, "Filter"); - pdf_update_stream(ctx, doc, num, buffer); + pdf_update_stream(ctx, doc, obj, buffer, 0); if (own_res) { @@ -60,7 +57,7 @@ pdf_clean_type3(fz_context *ctx, pdf_document *doc, pdf_obj *obj, pdf_obj *orig_ { pdf_process process, process2; fz_buffer *buffer; - int num, i, l; + int i, l; pdf_obj *res = NULL; pdf_obj *ref = NULL; pdf_obj *charprocs; @@ -91,9 +88,7 @@ pdf_clean_type3(fz_context *ctx, pdf_document *doc, pdf_obj *obj, pdf_obj *orig_ pdf_process_stream_object(ctx, doc, val, &process, orig_res, cookie); - num = pdf_to_num(ctx, val); - pdf_dict_dels(ctx, val, "Filter"); - pdf_update_stream(ctx, doc, num, buffer); + pdf_update_stream(ctx, doc, val, buffer, 0); pdf_dict_put(ctx, charprocs, key, val); fz_drop_buffer(ctx, buffer); buffer = NULL; @@ -121,7 +116,6 @@ void pdf_clean_page_contents(fz_context *ctx, pdf_document *doc, pdf_page *page, { pdf_process process, process2; fz_buffer *buffer = fz_new_buffer(ctx, 1024); - int num; pdf_obj *contents; pdf_obj *new_obj = NULL; pdf_obj *new_ref = NULL; @@ -146,25 +140,15 @@ void pdf_clean_page_contents(fz_context *ctx, pdf_document *doc, pdf_page *page, contents = page->contents; if (pdf_is_array(ctx, contents)) { - int n = pdf_array_len(ctx, contents); - int i; - - for (i = n-1; i > 0; i--) - pdf_array_delete(ctx, contents, i); - /* We cannot rewrite the 0th entry of contents - * directly as it may occur in other pages content - * dictionaries too. We therefore clone it and make - * a new object reference. */ - new_obj = pdf_copy_dict(ctx, pdf_array_get(ctx, contents, 0)); + /* 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); - num = pdf_to_num(ctx, new_ref); - pdf_array_put(ctx, contents, 0, new_ref); - pdf_dict_dels(ctx, new_obj, "Filter"); + page->contents = contents = new_ref; } else { - num = pdf_to_num(ctx, contents); pdf_dict_dels(ctx, contents, "Filter"); + pdf_dict_dels(ctx, contents, "DecodeParms"); } /* Now deal with resources. The spec allows for Type3 fonts and form @@ -262,7 +246,8 @@ void pdf_clean_page_contents(fz_context *ctx, pdf_document *doc, pdf_page *page, if (proc_fn) (*proc_fn)(proc_arg, buffer, res); - pdf_update_stream(ctx, doc, num, buffer); + pdf_update_stream(ctx, doc, contents, buffer, 0); + pdf_drop_obj(ctx, page->resources); ref = pdf_new_ref(ctx, doc, res); page->resources = pdf_keep_obj(ctx, ref); |