From 4e338fa918babb5e49e2323d057f70d94fb44cd2 Mon Sep 17 00:00:00 2001 From: Sebastian Rasmussen Date: Tue, 30 Jun 2009 03:27:50 +0200 Subject: Add support to print information about encrypted pdfs. --- apps/pdfinfo.c | 40 +++++++++++++++++++++++++++++++++------- 1 file changed, 33 insertions(+), 7 deletions(-) (limited to 'apps') diff --git a/apps/pdfinfo.c b/apps/pdfinfo.c index 215d5ddf..4d3ed2bc 100644 --- a/apps/pdfinfo.c +++ b/apps/pdfinfo.c @@ -129,6 +129,9 @@ struct info struct { fz_obj *obj; } info; + struct { + fz_obj *obj; + } crypt; struct { fz_rect *bbox; } dim; @@ -160,6 +163,7 @@ struct info }; struct info *info = nil; +struct info *cryptinfo = nil; struct info **dim = nil; int dims = 0; struct info **font = nil; @@ -201,17 +205,33 @@ gatherglobalinfo() info->page = -1; info->pageref = nil; - info->ref = fz_dictgets(src->trailer, "Info"); - + info->ref = nil; info->u.info.obj = nil; - if (!info->ref) - return; + if (src->info) + { + info->ref = fz_dictgets(src->trailer, "Info"); + if (!fz_isdict(info->ref) && !fz_isindirect(info->ref)) + die(fz_throw("not an indirect info object")); + + info->u.info.obj = src->info; + } + + cryptinfo = fz_malloc(sizeof (struct info)); - if (!fz_isdict(info->ref) && !fz_isindirect(info->ref)) - die(fz_throw("not an indirect info object")); + cryptinfo->page = -1; + cryptinfo->pageref = nil; + cryptinfo->ref = nil; + cryptinfo->u.crypt.obj = nil; - info->u.info.obj = src->info; + if (src->crypt) + { + cryptinfo->ref = fz_dictgets(src->trailer, "Encrypt"); + if (!fz_isdict(cryptinfo->ref) && !fz_isindirect(cryptinfo->ref)) + die(fz_throw("not an indirect crypt object")); + + cryptinfo->u.crypt.obj = src->crypt->encrypt; + } } fz_error @@ -777,6 +797,12 @@ printglobalinfo(char *filename) fz_debugobj(info->u.info.obj); } + if (cryptinfo->u.crypt.obj) + { + printf("\nEncryption object (%d %d R):\n", fz_tonum(cryptinfo->ref), fz_togen(cryptinfo->ref)); + fz_debugobj(cryptinfo->u.crypt.obj); + } + printf("\nPages: %d\n\n", pdf_getpagecount(srcpages)); } -- cgit v1.2.3