summaryrefslogtreecommitdiff
path: root/source/pdf/pdf-clean.c
diff options
context:
space:
mode:
Diffstat (limited to 'source/pdf/pdf-clean.c')
-rw-r--r--source/pdf/pdf-clean.c33
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);