[poppler] poppler/PSOutputDev.cc poppler/PSOutputDev.h

Albert Astals Cid aacid at kemper.freedesktop.org
Mon Jun 22 12:39:36 PDT 2009


 poppler/PSOutputDev.cc |   10 +++++++++-
 poppler/PSOutputDev.h  |    4 ++++
 2 files changed, 13 insertions(+), 1 deletion(-)

New commits:
commit 5fdc3acb8dded2e7d08e6ef30f4c5ae1a4a11b5e
Author: Till Kamppeter <till.kamppeter at gmail.com>
Date:   Mon Jun 22 21:38:23 2009 +0200

    Only change the page size when it really changes, otherwise duplex commands are lost

diff --git a/poppler/PSOutputDev.cc b/poppler/PSOutputDev.cc
index 204894a..6bec12d 100644
--- a/poppler/PSOutputDev.cc
+++ b/poppler/PSOutputDev.cc
@@ -1308,6 +1308,8 @@ void PSOutputDev::writeHeader(int firstPage, int lastPage,
 
   switch (mode) {
   case psModePSOrigPageSizes:
+    prevWidth = 0;
+    prevHeight = 0;
   case psModePS:
     writePSFmt("%%DocumentMedia: plain {0:d} {1:d} 0 () ()\n",
 	       paperWidth, paperHeight);
@@ -3186,7 +3188,13 @@ void PSOutputDev::startPage(int pageNum, GfxState *state) {
     writePS("%%BeginPageSetup\n");
     writePSFmt("%%PageOrientation: {0:s}\n",
 	       landscape ? "Landscape" : "Portrait");
-    writePSFmt("<</PageSize [{0:d} {1:d}]>> setpagedevice\n", width, height);
+    if ((width != prevWidth) || (height != prevHeight)) {
+      // Set page size only when it actually changes, as otherwise Duplex
+      // printing does not work
+      writePSFmt("<</PageSize [{0:d} {1:d}]>> setpagedevice\n", width, height);
+      prevWidth = width;
+      prevHeight = height;
+    }
     writePS("pdfStartPage\n");
     writePSFmt("{0:d} {1:d} {2:d} {3:d} re W\n", x1, y1, x2 - x1, y2 - y1);
     writePS("%%EndPageSetup\n");
diff --git a/poppler/PSOutputDev.h b/poppler/PSOutputDev.h
index 82378a9..6310375 100644
--- a/poppler/PSOutputDev.h
+++ b/poppler/PSOutputDev.h
@@ -352,6 +352,10 @@ private:
   PSOutMode mode;		// PostScript mode (PS, EPS, form)
   int paperWidth;		// width of paper, in pts
   int paperHeight;		// height of paper, in pts
+  int prevWidth;		// width of previous page
+                                // (only psModePSOrigPageSizes output mode)
+  int prevHeight;		// height of previous page
+                                // (only psModePSOrigPageSizes output mode)
   int imgLLX, imgLLY,		// imageable area, in pts
       imgURX, imgURY;
   GBool preload;		// load all images into memory, and


More information about the poppler mailing list