<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1">
<style type="text/css" style="display:none;"> P {margin-top:0;margin-bottom:0;} </style>
</head>
<body dir="ltr">
<div>
<div id="appendonsend" style="font-family: Calibri, Helvetica, sans-serif; font-size: 12pt; color: rgb(0, 0, 0);">
</div>
<div style="font-family:Calibri,Helvetica,sans-serif; font-size:12pt; color:rgb(0,0,0)">
Should this also be added to pdftocairo?</div>
<hr tabindex="-1" style="display:inline-block; width:98%">
<div id="divRplyFwdMsg" dir="ltr"><font face="Calibri, sans-serif" color="#000000" style="font-size:11pt"><b>From:</b> poppler <poppler-bounces@lists.freedesktop.org> on behalf of GitLab Mirror <gitlab-mirror@kemper.freedesktop.org><br>
<b>Sent:</b> Thursday, December 5, 2019 7:03 AM<br>
<b>To:</b> poppler@lists.freedesktop.org <poppler@lists.freedesktop.org><br>
<b>Subject:</b> [poppler] utils/pdftoppm.1 utils/pdftoppm.cc</font>
<div> </div>
</div>
<div class="BodyFragment"><font size="2"><span style="font-size:11pt">
<div class="PlainText">utils/pdftoppm.1  |    3 +++<br>
 utils/pdftoppm.cc |   22 ++++++++++++++++------<br>
 2 files changed, 19 insertions(+), 6 deletions(-)<br>
<br>
New commits:<br>
commit 311db0b2de9a63d240d19bb90ba95a78f7856388<br>
Author: corentinfoucault <corentinf@free.fr><br>
Date:   Thu Dec 5 12:03:56 2019 +0000<br>
<br>
    [PdfToPpm] Add an option to scale before rotate<br>
    <br>
    -scale-dimension-before-rotation<br>
<br>
diff --git a/utils/pdftoppm.1 b/utils/pdftoppm.1<br>
index 79d78f4b..56808cd0 100644<br>
--- a/utils/pdftoppm.1<br>
+++ b/utils/pdftoppm.1<br>
@@ -62,6 +62,9 @@ Scales each page vertically to fit in scale-to-y pixels. If scale-to-x<br>
 is set to -1, the horizontal size will determined by the aspect ratio<br>
 of the page.<br>
 .TP<br>
+.B \-scale-dimension-before-rotation<br>
+Swaps horizontal and vertical size for a rotated (landscape) pdf before scaling instead of after.<br>
+.TP<br>
 .BI \-x " number"<br>
 Specifies the x-coordinate of the crop area top left corner<br>
 .TP<br>
diff --git a/utils/pdftoppm.cc b/utils/pdftoppm.cc<br>
index 6a6acacb..aac1f743 100644<br>
--- a/utils/pdftoppm.cc<br>
+++ b/utils/pdftoppm.cc<br>
@@ -74,6 +74,7 @@ static int lastPage = 0;<br>
 static bool printOnlyOdd = false;<br>
 static bool printOnlyEven = false;<br>
 static bool singleFile = false;<br>
+static bool scaleDimensionBeforeRotation = false;<br>
 static double resolution = 0.0;<br>
 static double x_resolution = 150.0;<br>
 static double y_resolution = 150.0;<br>
@@ -128,6 +129,8 @@ static const ArgDesc argDesc[] = {<br>
    "print only even pages"},<br>
   {"-singlefile", argFlag,  &singleFile,   0,<br>
    "write only the first page and do not add digits"},<br>
+  {"-scale-dimension-before-rotation", argFlag,  &scaleDimensionBeforeRotation,   0,<br>
+   "for rotated pdf, resize dimensions before the rotation"},<br>
 <br>
   {"-r",      argFP,       &resolution,    0,<br>
    "resolution, in DPI (default is 150)"},<br>
@@ -218,6 +221,11 @@ static const ArgDesc argDesc[] = {<br>
   {}<br>
 };<br>
 <br>
+static bool needToRotate(int angle)<br>
+{<br>
+    return (angle == 90) || (angle == 270);<br>
+}<br>
+<br>
 static bool parseJpegOptions()<br>
 {<br>
   //jpegOpt format is: <opt1>=<val1>,<opt2>=<val2>,...<br>
@@ -395,7 +403,7 @@ int main(int argc, char *argv[]) {<br>
   bool ok;<br>
   int exitCode;<br>
   int pg, pg_num_len;<br>
-  double pg_w, pg_h, tmp;<br>
+  double pg_w, pg_h;<br>
 <br>
   Win32Console win32Console(&argc, &argv);<br>
   exitCode = 99;<br>
@@ -558,6 +566,9 @@ int main(int argc, char *argv[]) {<br>
       pg_h = doc->getPageMediaHeight(pg);<br>
     }<br>
 <br>
+    if (scaleDimensionBeforeRotation && needToRotate(doc->getPageRotate(pg)))<br>
+      std::swap(pg_w, pg_h);<br>
+<br>
     if (scaleTo != 0) {<br>
       resolution = (72.0 * scaleTo) / (pg_w > pg_h ? pg_w : pg_h);<br>
       x_resolution = y_resolution = resolution;<br>
@@ -575,11 +586,10 @@ int main(int argc, char *argv[]) {<br>
     }<br>
     pg_w = pg_w * (x_resolution / 72.0);<br>
     pg_h = pg_h * (y_resolution / 72.0);<br>
-    if ((doc->getPageRotate(pg) == 90) || (doc->getPageRotate(pg) == 270)) {<br>
-      tmp = pg_w;<br>
-      pg_w = pg_h;<br>
-      pg_h = tmp;<br>
-    }<br>
+<br>
+    if (!scaleDimensionBeforeRotation && needToRotate(doc->getPageRotate(pg)))<br>
+      std::swap(pg_w, pg_h);<br>
+<br>
     if (ppmRoot != nullptr) {<br>
       const char *ext = png ? "png" : (jpeg || jpegcmyk) ? "jpg" : tiff ? "tif" : mono ? "pbm" : gray ? "pgm" : "ppm";<br>
       if (singleFile && !forceNum ) {<br>
_______________________________________________<br>
poppler mailing list<br>
poppler@lists.freedesktop.org<br>
<a href="https://lists.freedesktop.org/mailman/listinfo/poppler">https://lists.freedesktop.org/mailman/listinfo/poppler</a></div>
</span></font></div>
</div>
</body>
</html>