[poppler] utils/pdftocairo.cc
Adrian Johnson
ajohnson at kemper.freedesktop.org
Sat Oct 31 01:04:56 PDT 2015
utils/pdftocairo.cc | 42 ++++++++++++++++++++----------------------
1 file changed, 20 insertions(+), 22 deletions(-)
New commits:
commit 0e14049bc5b85f8ae2e1a56bc09480a499343e49
Author: Adrian Johnson <ajohnson at redneon.com>
Date: Sat Oct 31 18:32:49 2015 +1030
pdftocairo: fix fit to page transformation
Testing with the test case in bug 87161 revealed some bugs.
diff --git a/utils/pdftocairo.cc b/utils/pdftocairo.cc
index 18fade4..bdc6460 100644
--- a/utils/pdftocairo.cc
+++ b/utils/pdftocairo.cc
@@ -447,8 +447,13 @@ static void getOutputSize(double page_w, double page_h, double *width, double *h
*width = page_w;
*height = page_h;
} else {
- *width = paperWidth;
- *height = paperHeight;
+ if (page_w > page_h) {
+ *width = paperHeight;
+ *height = paperWidth;
+ } else {
+ *width = paperWidth;
+ *height = paperHeight;
+ }
}
} else {
getCropSize(page_w * (x_resolution / 72.0),
@@ -470,27 +475,20 @@ static void getFitToPageTransform(double page_w, double page_h,
else
scale = y_scale;
+ if (scale > 1.0 && !expand)
+ scale = 1.0;
+ if (scale < 1.0 && noShrink)
+ scale = 1.0;
+
cairo_matrix_init_identity (m);
- if (scale > 1.0) {
- // page is smaller than paper
- if (expand) {
- // expand to fit
- cairo_matrix_scale (m, scale, scale);
- } else if (!noCenter) {
- // centre page
- cairo_matrix_translate (m, (paper_w - page_w)/2, (paper_h - page_h)/2);
- } else {
- if (!svg) {
- // move to PostScript origin
- cairo_matrix_translate (m, 0, (paper_h - page_h));
- }
- }
- } else if (scale < 1.0)
- // page is larger than paper
- if (!noShrink) {
- // shrink to fit
- cairo_matrix_scale (m, scale, scale);
- }
+ if (!noCenter) {
+ // centre page
+ cairo_matrix_translate (m, (paper_w - page_w*scale)/2, (paper_h - page_h*scale)/2);
+ } else if (!svg) {
+ // move to PostScript origin
+ cairo_matrix_translate (m, 0, (paper_h - page_h*scale));
+ }
+ cairo_matrix_scale (m, scale, scale);
}
static cairo_status_t writeStream(void *closure, const unsigned char *data, unsigned int length)
More information about the poppler
mailing list