summaryrefslogtreecommitdiff
path: root/pdf/pdf_page.c
diff options
context:
space:
mode:
authorTor Andersson <tor.andersson@artifex.com>2012-06-15 10:29:02 +0200
committerTor Andersson <tor.andersson@artifex.com>2012-06-15 10:46:38 +0200
commit0882fa28aa176f4f5097d5c18cbeda5349250ec9 (patch)
treec5e3004de6e41a274d91a9a219c015739d1a17ac /pdf/pdf_page.c
parent2032c57a56631435de30df689fc78939f1650bf8 (diff)
downloadmupdf-0882fa28aa176f4f5097d5c18cbeda5349250ec9.tar.xz
Support UserUnit for scaling PDF pages.
Diffstat (limited to 'pdf/pdf_page.c')
-rw-r--r--pdf/pdf_page.c19
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)