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.c74
1 files changed, 47 insertions, 27 deletions
diff --git a/source/pdf/pdf-clean.c b/source/pdf/pdf-clean.c
index 4bdaae7b..399d9339 100644
--- a/source/pdf/pdf-clean.c
+++ b/source/pdf/pdf-clean.c
@@ -1,18 +1,21 @@
-#include "pdf-interpret-imp.h"
+#include "mupdf/pdf.h"
static void
pdf_clean_stream_object(fz_context *ctx, pdf_document *doc, pdf_obj *obj, pdf_obj *orig_res, fz_cookie *cookie, int own_res)
{
- pdf_process process, process2;
- fz_buffer *buffer;
+ pdf_processor *proc_buffer = NULL;
+ pdf_processor *proc_filter = NULL;
pdf_obj *res = NULL;
pdf_obj *ref = NULL;
+ fz_buffer *buffer;
if (!obj)
return;
fz_var(res);
fz_var(ref);
+ fz_var(proc_buffer);
+ fz_var(proc_filter);
buffer = fz_new_buffer(ctx, 1024);
@@ -27,10 +30,10 @@ pdf_clean_stream_object(fz_context *ctx, pdf_document *doc, pdf_obj *obj, pdf_ob
res = pdf_new_dict(ctx, doc, 1);
- pdf_init_process_buffer(ctx, &process2, buffer);
- pdf_init_process_filter(ctx, &process, &process2, res);
+ proc_buffer = pdf_new_buffer_processor(ctx, buffer);
+ proc_filter = pdf_new_filter_processor(ctx, proc_buffer, doc, orig_res, res);
- pdf_process_stream_object(ctx, doc, obj, &process, orig_res, cookie);
+ pdf_process_contents(ctx, proc_filter, doc, orig_res, obj, cookie);
pdf_update_stream(ctx, doc, obj, buffer, 0);
@@ -42,6 +45,8 @@ pdf_clean_stream_object(fz_context *ctx, pdf_document *doc, pdf_obj *obj, pdf_ob
}
fz_always(ctx)
{
+ pdf_drop_processor(ctx, proc_filter);
+ pdf_drop_processor(ctx, proc_buffer);
fz_drop_buffer(ctx, buffer);
pdf_drop_obj(ctx, res);
pdf_drop_obj(ctx, ref);
@@ -55,15 +60,17 @@ pdf_clean_stream_object(fz_context *ctx, pdf_document *doc, pdf_obj *obj, pdf_ob
static void
pdf_clean_type3(fz_context *ctx, pdf_document *doc, pdf_obj *obj, pdf_obj *orig_res, fz_cookie *cookie)
{
- pdf_process process, process2;
- fz_buffer *buffer;
- int i, l;
+ pdf_processor *proc_buffer = NULL;
+ pdf_processor *proc_filter = NULL;
pdf_obj *res = NULL;
pdf_obj *ref = NULL;
pdf_obj *charprocs;
+ int i, l;
fz_var(res);
fz_var(ref);
+ fz_var(proc_buffer);
+ fz_var(proc_filter);
fz_try(ctx)
{
@@ -79,19 +86,27 @@ pdf_clean_type3(fz_context *ctx, pdf_document *doc, pdf_obj *obj, pdf_obj *orig_
for (i = 0; i < l; i++)
{
- pdf_obj *key = pdf_dict_get_key(ctx, charprocs, i);
pdf_obj *val = pdf_dict_get_val(ctx, charprocs, i);
+ fz_buffer *buffer = fz_new_buffer(ctx, 1024);
+ fz_try(ctx)
+ {
+ proc_buffer = pdf_new_buffer_processor(ctx, buffer);
+ proc_filter = pdf_new_filter_processor(ctx, proc_buffer, doc, orig_res, res);
- buffer = fz_new_buffer(ctx, 1024);
- pdf_init_process_buffer(ctx, &process2, buffer);
- pdf_init_process_filter(ctx, &process, &process2, res);
-
- pdf_process_stream_object(ctx, doc, val, &process, orig_res, cookie);
+ pdf_process_contents(ctx, proc_filter, doc, orig_res, val, cookie);
- pdf_update_stream(ctx, doc, val, buffer, 0);
- pdf_dict_put(ctx, charprocs, key, val);
- fz_drop_buffer(ctx, buffer);
- buffer = NULL;
+ pdf_update_stream(ctx, doc, val, buffer, 0);
+ }
+ fz_always(ctx)
+ {
+ pdf_drop_processor(ctx, proc_filter);
+ pdf_drop_processor(ctx, proc_buffer);
+ fz_drop_buffer(ctx, buffer);
+ }
+ fz_catch(ctx)
+ {
+ fz_rethrow(ctx);
+ }
}
/* ProcSet - no cleaning possible. Inherit this from the old dict. */
@@ -102,7 +117,6 @@ pdf_clean_type3(fz_context *ctx, pdf_document *doc, pdf_obj *obj, pdf_obj *orig_
}
fz_always(ctx)
{
- fz_drop_buffer(ctx, buffer);
pdf_drop_obj(ctx, res);
pdf_drop_obj(ctx, ref);
}
@@ -114,28 +128,33 @@ pdf_clean_type3(fz_context *ctx, pdf_document *doc, pdf_obj *obj, pdf_obj *orig_
void pdf_clean_page_contents(fz_context *ctx, pdf_document *doc, pdf_page *page, fz_cookie *cookie, pdf_page_contents_process_fn *proc_fn, void *proc_arg)
{
- pdf_process process, process2;
- fz_buffer *buffer = fz_new_buffer(ctx, 1024);
- pdf_obj *contents;
+ pdf_processor *proc_buffer = NULL;
+ pdf_processor *proc_filter = NULL;
pdf_obj *new_obj = NULL;
pdf_obj *new_ref = NULL;
pdf_obj *res = NULL;
pdf_obj *ref = NULL;
pdf_obj *obj;
+ pdf_obj *contents;
+ fz_buffer *buffer;
fz_var(new_obj);
fz_var(new_ref);
fz_var(res);
fz_var(ref);
+ fz_var(proc_buffer);
+ fz_var(proc_filter);
+
+ buffer = fz_new_buffer(ctx, 1024);
fz_try(ctx)
{
res = pdf_new_dict(ctx, doc, 1);
- pdf_init_process_buffer(ctx, &process2, buffer);
- pdf_init_process_filter(ctx, &process, &process2, res);
+ proc_buffer = pdf_new_buffer_processor(ctx, buffer);
+ proc_filter = pdf_new_filter_processor(ctx, proc_buffer, doc, page->resources, res);
- pdf_process_stream_object(ctx, doc, page->contents, &process, page->resources, cookie);
+ pdf_process_contents(ctx, proc_filter, doc, page->resources, page->contents, cookie);
contents = page->contents;
if (pdf_is_array(ctx, contents))
@@ -247,7 +266,6 @@ void pdf_clean_page_contents(fz_context *ctx, pdf_document *doc, pdf_page *page,
(*proc_fn)(ctx, buffer, res, proc_arg);
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);
@@ -255,6 +273,8 @@ void pdf_clean_page_contents(fz_context *ctx, pdf_document *doc, pdf_page *page,
}
fz_always(ctx)
{
+ pdf_drop_processor(ctx, proc_filter);
+ pdf_drop_processor(ctx, proc_buffer);
fz_drop_buffer(ctx, buffer);
pdf_drop_obj(ctx, new_obj);
pdf_drop_obj(ctx, new_ref);