diff options
author | Tor Andersson <tor.andersson@artifex.com> | 2012-06-15 10:29:02 +0200 |
---|---|---|
committer | Tor Andersson <tor.andersson@artifex.com> | 2012-06-15 10:46:38 +0200 |
commit | 0882fa28aa176f4f5097d5c18cbeda5349250ec9 (patch) | |
tree | c5e3004de6e41a274d91a9a219c015739d1a17ac /pdf/pdf_page.c | |
parent | 2032c57a56631435de30df689fc78939f1650bf8 (diff) | |
download | mupdf-0882fa28aa176f4f5097d5c18cbeda5349250ec9.tar.xz |
Support UserUnit for scaling PDF pages.
Diffstat (limited to 'pdf/pdf_page.c')
-rw-r--r-- | pdf/pdf_page.c | 19 |
1 files changed, 14 insertions, 5 deletions
diff --git a/pdf/pdf_page.c b/pdf/pdf_page.c index 42e830da..cfd9774e 100644 --- a/pdf/pdf_page.c +++ b/pdf/pdf_page.c @@ -290,6 +290,7 @@ pdf_load_page(pdf_document *xref, int number) pdf_obj *pageobj, *pageref, *obj; fz_rect mediabox, cropbox, realbox; fz_matrix ctm; + float userunit; pdf_load_page_tree(xref); if (number < 0 || number >= xref->page_len) @@ -305,6 +306,12 @@ pdf_load_page(pdf_document *xref, int number) page->links = NULL; page->annots = NULL; + obj = pdf_dict_gets(pageobj, "UserUnit"); + if (pdf_is_real(obj)) + userunit = pdf_to_real(obj); + else + userunit = 1; + mediabox = pdf_to_rect(ctx, pdf_dict_gets(pageobj, "MediaBox")); if (fz_is_empty_rect(mediabox)) { @@ -319,10 +326,10 @@ pdf_load_page(pdf_document *xref, int number) if (!fz_is_empty_rect(cropbox)) mediabox = fz_intersect_rect(mediabox, cropbox); - page->mediabox.x0 = MIN(mediabox.x0, mediabox.x1); - page->mediabox.y0 = MIN(mediabox.y0, mediabox.y1); - page->mediabox.x1 = MAX(mediabox.x0, mediabox.x1); - page->mediabox.y1 = MAX(mediabox.y0, mediabox.y1); + page->mediabox.x0 = MIN(mediabox.x0, mediabox.x1) * userunit; + page->mediabox.y0 = MIN(mediabox.y0, mediabox.y1) * userunit; + page->mediabox.x1 = MAX(mediabox.x0, mediabox.x1) * userunit; + page->mediabox.y1 = MAX(mediabox.y0, mediabox.y1) * userunit; if (page->mediabox.x1 - page->mediabox.x0 < 1 || page->mediabox.y1 - page->mediabox.y0 < 1) { @@ -342,7 +349,9 @@ pdf_load_page(pdf_document *xref, int number) ctm = fz_concat(fz_rotate(-page->rotate), fz_scale(1, -1)); realbox = fz_transform_rect(ctm, page->mediabox); - page->ctm = fz_concat(ctm, fz_translate(-realbox.x0, -realbox.y0)); + ctm = fz_concat(ctm, fz_scale(userunit, userunit)); + ctm = fz_concat(ctm, fz_translate(-realbox.x0, -realbox.y0)); + page->ctm = ctm; obj = pdf_dict_gets(pageobj, "Annots"); if (obj) |