summaryrefslogtreecommitdiff
path: root/source/tools/pdfclean.c
diff options
context:
space:
mode:
Diffstat (limited to 'source/tools/pdfclean.c')
-rw-r--r--source/tools/pdfclean.c132
1 files changed, 66 insertions, 66 deletions
diff --git a/source/tools/pdfclean.c b/source/tools/pdfclean.c
index bfeca0e4..07ca7e5a 100644
--- a/source/tools/pdfclean.c
+++ b/source/tools/pdfclean.c
@@ -36,15 +36,15 @@ static void usage(void)
}
static int
-string_in_names_list(pdf_obj *p, pdf_obj *names_list)
+string_in_names_list(fz_context *ctx, pdf_obj *p, pdf_obj *names_list)
{
- int n = pdf_array_len(names_list);
+ int n = pdf_array_len(ctx, names_list);
int i;
- char *str = pdf_to_str_buf(p);
+ char *str = pdf_to_str_buf(ctx, p);
for (i = 0; i < n ; i += 2)
{
- if (!strcmp(pdf_to_str_buf(pdf_array_get(names_list, i)), str))
+ if (!strcmp(pdf_to_str_buf(ctx, pdf_array_get(ctx, names_list, i)), str))
return 1;
}
return 0;
@@ -54,18 +54,18 @@ string_in_names_list(pdf_obj *p, pdf_obj *names_list)
* Recreate page tree to only retain specified pages.
*/
-static void retainpage(pdf_document *doc, pdf_obj *parent, pdf_obj *kids, int page)
+static void retainpage(fz_context *ctx, pdf_document *doc, pdf_obj *parent, pdf_obj *kids, int page)
{
- pdf_obj *pageref = pdf_lookup_page_obj(doc, page-1);
- pdf_obj *pageobj = pdf_resolve_indirect(pageref);
+ pdf_obj *pageref = pdf_lookup_page_obj(ctx, doc, page-1);
+ pdf_obj *pageobj = pdf_resolve_indirect(ctx, pageref);
- pdf_dict_puts(pageobj, "Parent", parent);
+ pdf_dict_puts(ctx, pageobj, "Parent", parent);
/* Store page object in new kids array */
- pdf_array_push(kids, pageref);
+ pdf_array_push(ctx, kids, pageref);
}
-static void retainpages(globals *glo, int argc, char **argv)
+static void retainpages(fz_context *ctx, globals *glo, int argc, char **argv)
{
pdf_obj *oldroot, *root, *pages, *kids, *countobj, *parent, *olddests;
pdf_document *doc = glo->doc;
@@ -76,21 +76,21 @@ static void retainpages(globals *glo, int argc, char **argv)
/* Keep only pages/type and (reduced) dest entries to avoid
* references to unretained pages */
- oldroot = pdf_dict_gets(pdf_trailer(doc), "Root");
- pages = pdf_dict_gets(oldroot, "Pages");
- olddests = pdf_load_name_tree(doc, "Dests");
+ oldroot = pdf_dict_gets(ctx, pdf_trailer(ctx, doc), "Root");
+ pages = pdf_dict_gets(ctx, oldroot, "Pages");
+ olddests = pdf_load_name_tree(ctx, doc, "Dests");
- root = pdf_new_dict(doc, 2);
- pdf_dict_puts(root, "Type", pdf_dict_gets(oldroot, "Type"));
- pdf_dict_puts(root, "Pages", pdf_dict_gets(oldroot, "Pages"));
+ root = pdf_new_dict(ctx, doc, 2);
+ pdf_dict_puts(ctx, root, "Type", pdf_dict_gets(ctx, oldroot, "Type"));
+ pdf_dict_puts(ctx, root, "Pages", pdf_dict_gets(ctx, oldroot, "Pages"));
- pdf_update_object(doc, pdf_to_num(oldroot), root);
+ pdf_update_object(ctx, doc, pdf_to_num(ctx, oldroot), root);
- pdf_drop_obj(root);
+ pdf_drop_obj(ctx, root);
/* Create a new kids array with only the pages we want to keep */
- parent = pdf_new_indirect(doc, pdf_to_num(pages), pdf_to_gen(pages));
- kids = pdf_new_array(doc, 1);
+ parent = pdf_new_indirect(ctx, doc, pdf_to_num(ctx, pages), pdf_to_gen(ctx, pages));
+ kids = pdf_new_array(ctx, doc, 1);
/* Retain pages specified */
while (argc - argidx)
@@ -99,7 +99,7 @@ static void retainpages(globals *glo, int argc, char **argv)
char *spec, *dash;
char *pagelist = argv[argidx];
- pagecount = pdf_count_pages(doc);
+ pagecount = pdf_count_pages(ctx, doc);
spec = fz_strsep(&pagelist, ",");
while (spec)
{
@@ -123,10 +123,10 @@ static void retainpages(globals *glo, int argc, char **argv)
if (spage < epage)
for (page = spage; page <= epage; ++page)
- retainpage(doc, parent, kids, page);
+ retainpage(ctx, doc, parent, kids, page);
else
for (page = spage; page >= epage; --page)
- retainpage(doc, parent, kids, page);
+ retainpage(ctx, doc, parent, kids, page);
spec = fz_strsep(&pagelist, ",");
}
@@ -134,49 +134,49 @@ static void retainpages(globals *glo, int argc, char **argv)
argidx++;
}
- pdf_drop_obj(parent);
+ pdf_drop_obj(ctx, parent);
/* Update page count and kids array */
- countobj = pdf_new_int(doc, pdf_array_len(kids));
- pdf_dict_puts(pages, "Count", countobj);
- pdf_drop_obj(countobj);
- pdf_dict_puts(pages, "Kids", kids);
- pdf_drop_obj(kids);
+ countobj = pdf_new_int(ctx, doc, pdf_array_len(ctx, kids));
+ pdf_dict_puts(ctx, pages, "Count", countobj);
+ pdf_drop_obj(ctx, countobj);
+ pdf_dict_puts(ctx, pages, "Kids", kids);
+ pdf_drop_obj(ctx, kids);
/* Also preserve the (partial) Dests name tree */
if (olddests)
{
- pdf_obj *names = pdf_new_dict(doc, 1);
- pdf_obj *dests = pdf_new_dict(doc, 1);
- int len = pdf_dict_len(olddests);
+ pdf_obj *names = pdf_new_dict(ctx, doc, 1);
+ pdf_obj *dests = pdf_new_dict(ctx, doc, 1);
+ int len = pdf_dict_len(ctx, olddests);
- names_list = pdf_new_array(doc, 32);
+ names_list = pdf_new_array(ctx, doc, 32);
for (i = 0; i < len; i++)
{
- pdf_obj *key = pdf_dict_get_key(olddests, i);
- pdf_obj *val = pdf_dict_get_val(olddests, i);
- pdf_obj *dest = pdf_dict_gets(val, "D");
+ pdf_obj *key = pdf_dict_get_key(ctx, olddests, i);
+ pdf_obj *val = pdf_dict_get_val(ctx, olddests, i);
+ pdf_obj *dest = pdf_dict_gets(ctx, val, "D");
- dest = pdf_array_get(dest ? dest : val, 0);
- if (pdf_array_contains(pdf_dict_gets(pages, "Kids"), dest))
+ dest = pdf_array_get(ctx, dest ? dest : val, 0);
+ if (pdf_array_contains(ctx, pdf_dict_gets(ctx, pages, "Kids"), dest))
{
- pdf_obj *key_str = pdf_new_string(doc, pdf_to_name(key), strlen(pdf_to_name(key)));
- pdf_array_push(names_list, key_str);
- pdf_array_push(names_list, val);
- pdf_drop_obj(key_str);
+ pdf_obj *key_str = pdf_new_string(ctx, doc, pdf_to_name(ctx, key), strlen(pdf_to_name(ctx, key)));
+ pdf_array_push(ctx, names_list, key_str);
+ pdf_array_push(ctx, names_list, val);
+ pdf_drop_obj(ctx, key_str);
}
}
- root = pdf_dict_gets(pdf_trailer(doc), "Root");
- pdf_dict_puts(dests, "Names", names_list);
- pdf_dict_puts(names, "Dests", dests);
- pdf_dict_puts(root, "Names", names);
+ root = pdf_dict_gets(ctx, pdf_trailer(ctx, doc), "Root");
+ pdf_dict_puts(ctx, dests, "Names", names_list);
+ pdf_dict_puts(ctx, names, "Dests", dests);
+ pdf_dict_puts(ctx, root, "Names", names);
- pdf_drop_obj(names);
- pdf_drop_obj(dests);
- pdf_drop_obj(names_list);
- pdf_drop_obj(olddests);
+ pdf_drop_obj(ctx, names);
+ pdf_drop_obj(ctx, dests);
+ pdf_drop_obj(ctx, names_list);
+ pdf_drop_obj(ctx, olddests);
}
/* Force the next call to pdf_count_pages to recount */
@@ -184,36 +184,36 @@ static void retainpages(globals *glo, int argc, char **argv)
/* Edit each pages /Annot list to remove any links that point to
* nowhere. */
- pagecount = pdf_count_pages(doc);
+ pagecount = pdf_count_pages(ctx, doc);
for (i = 0; i < pagecount; i++)
{
- pdf_obj *pageref = pdf_lookup_page_obj(doc, i);
- pdf_obj *pageobj = pdf_resolve_indirect(pageref);
+ pdf_obj *pageref = pdf_lookup_page_obj(ctx, doc, i);
+ pdf_obj *pageobj = pdf_resolve_indirect(ctx, pageref);
- pdf_obj *annots = pdf_dict_gets(pageobj, "Annots");
+ pdf_obj *annots = pdf_dict_gets(ctx, pageobj, "Annots");
- int len = pdf_array_len(annots);
+ int len = pdf_array_len(ctx, annots);
int j;
for (j = 0; j < len; j++)
{
- pdf_obj *o = pdf_array_get(annots, j);
+ pdf_obj *o = pdf_array_get(ctx, annots, j);
pdf_obj *p;
- if (strcmp(pdf_to_name(pdf_dict_gets(o, "Subtype")), "Link"))
+ if (strcmp(pdf_to_name(ctx, pdf_dict_gets(ctx, o, "Subtype")), "Link"))
continue;
- p = pdf_dict_gets(o, "A");
- if (strcmp(pdf_to_name(pdf_dict_gets(p, "S")), "GoTo"))
+ p = pdf_dict_gets(ctx, o, "A");
+ if (strcmp(pdf_to_name(ctx, pdf_dict_gets(ctx, p, "S")), "GoTo"))
continue;
- if (string_in_names_list(pdf_dict_gets(p, "D"), names_list))
+ if (string_in_names_list(ctx, pdf_dict_gets(ctx, p, "D"), names_list))
continue;
/* FIXME: Should probably look at Next too */
/* Remove this annotation */
- pdf_array_delete(annots, j);
+ pdf_array_delete(ctx, annots, j);
j--;
}
}
@@ -228,19 +228,19 @@ void pdfclean_clean(fz_context *ctx, char *infile, char *outfile, char *password
fz_try(ctx)
{
glo.doc = pdf_open_document_no_run(ctx, infile);
- if (pdf_needs_password(glo.doc))
- if (!pdf_authenticate_password(glo.doc, password))
+ if (pdf_needs_password(ctx, glo.doc))
+ if (!pdf_authenticate_password(ctx, glo.doc, password))
fz_throw(glo.ctx, FZ_ERROR_GENERIC, "cannot authenticate password: %s", infile);
/* Only retain the specified subset of the pages */
if (argc)
- retainpages(&glo, argc, argv);
+ retainpages(ctx, &glo, argc, argv);
- pdf_write_document(glo.doc, outfile, opts);
+ pdf_write_document(ctx, glo.doc, outfile, opts);
}
fz_always(ctx)
{
- pdf_close_document(glo.doc);
+ pdf_close_document(ctx, glo.doc);
}
fz_catch(ctx)
{