diff options
Diffstat (limited to 'pdf/pdf_page.c')
-rw-r--r-- | pdf/pdf_page.c | 69 |
1 files changed, 31 insertions, 38 deletions
diff --git a/pdf/pdf_page.c b/pdf/pdf_page.c index 9c67edf0..c97eb9b4 100644 --- a/pdf/pdf_page.c +++ b/pdf/pdf_page.c @@ -95,7 +95,7 @@ pdf_load_page_tree_node(pdf_xref *xref, fz_obj *node, struct info info) } } -fz_error +void pdf_load_page_tree(pdf_xref *xref) { struct info info; @@ -105,9 +105,9 @@ pdf_load_page_tree(pdf_xref *xref) fz_obj *count = fz_dict_gets(pages, "Count"); if (!fz_is_dict(pages)) - return fz_error_make("missing page tree"); + fz_throw(ctx, "missing page tree"); if (!fz_is_int(count)) - return fz_error_make("missing page count"); + fz_throw(ctx, "missing page count"); xref->page_cap = fz_to_int(count); xref->page_len = 0; @@ -120,8 +120,6 @@ pdf_load_page_tree(pdf_xref *xref) info.rotate = NULL; pdf_load_page_tree_node(xref, pages, info); - - return fz_okay; } /* We need to know whether to install a page-level transparency group */ @@ -202,10 +200,9 @@ found: /* we need to combine all sub-streams into one for the content stream interpreter */ -static fz_error -pdf_load_page_contents_array(fz_buffer **bigbufp, pdf_xref *xref, fz_obj *list) +static fz_buffer * +pdf_load_page_contents_array(pdf_xref *xref, fz_obj *list) { - fz_error error; fz_buffer *big; fz_buffer *one; int i, n; @@ -217,10 +214,13 @@ pdf_load_page_contents_array(fz_buffer **bigbufp, pdf_xref *xref, fz_obj *list) for (i = 0; i < n; i++) { fz_obj *stm = fz_array_get(list, i); - error = pdf_load_stream(&one, xref, fz_to_num(stm), fz_to_gen(stm)); - if (error) + fz_try(ctx) { - fz_error_handle(error, "cannot load content stream part %d/%d", i + 1, n); + one = pdf_load_stream(xref, fz_to_num(stm), fz_to_gen(stm)); + } + fz_catch(ctx) + { + fz_warn(ctx, "cannot load content stream part %d/%d", i + 1, n); continue; } @@ -236,44 +236,35 @@ pdf_load_page_contents_array(fz_buffer **bigbufp, pdf_xref *xref, fz_obj *list) if (n > 0 && big->len == 0) { fz_drop_buffer(ctx, big); - return fz_error_make("cannot load content stream"); + fz_throw(ctx, "cannot load content stream"); } - *bigbufp = big; - return fz_okay; + return big; } -static fz_error -pdf_load_page_contents(fz_buffer **bufp, pdf_xref *xref, fz_obj *obj) +static fz_buffer * +pdf_load_page_contents(pdf_xref *xref, fz_obj *obj) { - fz_error error; fz_context *ctx = xref->ctx; if (fz_is_array(obj)) { - error = pdf_load_page_contents_array(bufp, xref, obj); - if (error) - return fz_error_note(error, "cannot load content stream array"); + return pdf_load_page_contents_array(xref, obj); + /* RJW: "cannot load content stream array" */ } else if (pdf_is_stream(xref, fz_to_num(obj), fz_to_gen(obj))) { - error = pdf_load_stream(bufp, xref, fz_to_num(obj), fz_to_gen(obj)); - if (error) - return fz_error_note(error, "cannot load content stream (%d 0 R)", fz_to_num(obj)); - } - else - { - fz_warn(ctx, "page contents missing, leaving page blank"); - *bufp = fz_new_buffer(ctx, 0); + return pdf_load_stream(xref, fz_to_num(obj), fz_to_gen(obj)); + /* RJW: "cannot load content stream (%d 0 R)", fz_to_num(obj) */ } - return fz_okay; + fz_warn(ctx, "page contents missing, leaving page blank"); + return fz_new_buffer(ctx, 0); } -fz_error -pdf_load_page(pdf_page **pagep, pdf_xref *xref, int number) +pdf_page * +pdf_load_page(pdf_xref *xref, int number) { - fz_error error; pdf_page *page; pdf_annot *annot; fz_obj *pageobj, *pageref; @@ -282,7 +273,7 @@ pdf_load_page(pdf_page **pagep, pdf_xref *xref, int number) fz_context *ctx = xref->ctx; if (number < 0 || number >= xref->page_len) - return fz_error_make("cannot find page %d", number + 1); + fz_throw(ctx, "cannot find page %d", number + 1); /* Ensure that we have a store for resource objects */ if (!xref->store) @@ -341,11 +332,14 @@ pdf_load_page(pdf_page **pagep, pdf_xref *xref, int number) fz_keep_obj(page->resources); obj = fz_dict_gets(pageobj, "Contents"); - error = pdf_load_page_contents(&page->contents, xref, obj); - if (error) + fz_try(ctx) + { + page->contents = pdf_load_page_contents(xref, obj); + } + fz_catch(ctx) { pdf_free_page(ctx, page); - return fz_error_note(error, "cannot load page %d contents (%d 0 R)", number + 1, fz_to_num(pageref)); + fz_throw(ctx, "cannot load page %d contents (%d 0 R)", number + 1, fz_to_num(pageref)); } if (pdf_resources_use_blending(ctx, page->resources)) @@ -355,8 +349,7 @@ pdf_load_page(pdf_page **pagep, pdf_xref *xref, int number) if (pdf_resources_use_blending(ctx, annot->ap->resources)) page->transparency = 1; - *pagep = page; - return fz_okay; + return page; } void |