Hi, Derek.

This patch, written by Bernhard Link, suppresses PDF annotations when
printing files (it is a feature patch). As I think that it is sensible
to have, I'm sending it.


Regards, Rogério Brito.

-- 
Rogério Brito : rbr...@{ime.usp.br,gmail.com} : GPG key 1024D/7C2CAEB8
http://rb.doesntexist.org : Packages for LaTeX : algorithms.berlios.de
DebianQA: http://qa.debian.org/developer.php?login=rbrito%40ime.usp.br
diff -r -u xpdf-unstable/xpdf/OutputDev.h xpdf-patched/xpdf/OutputDev.h
--- xpdf-unstable/xpdf/OutputDev.h	2007-02-27 23:05:52.000000000 +0100
+++ xpdf-patched/xpdf/OutputDev.h	2007-08-29 12:39:29.000000000 +0200
@@ -88,7 +88,8 @@
   virtual GBool checkPageSlice(Page *page, double hDPI, double vDPI,
 			       int rotate, GBool useMediaBox, GBool crop,
 			       int sliceX, int sliceY, int sliceW, int sliceH,
-			       GBool printing, Catalog *catalog,
+			       GBool printing, GBool suppressAnnotations,
+			       Catalog *catalog,
 			       GBool (*abortCheckCbk)(void *data) = NULL,
 			       void *abortCheckCbkData = NULL)
     { return gTrue; }
diff -r -u xpdf-unstable/xpdf/Page.cc xpdf-patched/xpdf/Page.cc
--- xpdf-unstable/xpdf/Page.cc	2007-02-27 23:05:52.000000000 +0100
+++ xpdf-patched/xpdf/Page.cc	2007-08-29 12:38:10.000000000 +0200
@@ -258,19 +258,20 @@
 
 void Page::display(OutputDev *out, double hDPI, double vDPI,
 		   int rotate, GBool useMediaBox, GBool crop,
-		   GBool printing, Catalog *catalog,
+		   GBool printing, GBool suppressAnnotations,
+		   Catalog *catalog,
 		   GBool (*abortCheckCbk)(void *data),
 		   void *abortCheckCbkData) {
   displaySlice(out, hDPI, vDPI, rotate, useMediaBox, crop,
-	       -1, -1, -1, -1, printing, catalog,
+	       -1, -1, -1, -1, printing, suppressAnnotations, catalog,
 	       abortCheckCbk, abortCheckCbkData);
 }
 
 void Page::displaySlice(OutputDev *out, double hDPI, double vDPI,
 			int rotate, GBool useMediaBox, GBool crop,
 			int sliceX, int sliceY, int sliceW, int sliceH,
-			GBool printing, Catalog *catalog,
-			GBool (*abortCheckCbk)(void *data),
+			GBool printing, GBool suppressAnnotations,
+			Catalog *catalog, GBool (*abortCheckCbk)(void *data),
 			void *abortCheckCbkData) {
 #ifndef PDF_PARSER_ONLY
   PDFRectangle *mediaBox, *cropBox;
@@ -283,7 +284,7 @@
 
   if (!out->checkPageSlice(this, hDPI, vDPI, rotate, useMediaBox, crop,
 			   sliceX, sliceY, sliceW, sliceH,
-			   printing, catalog,
+			   printing, suppressAnnotations, catalog,
 			   abortCheckCbk, abortCheckCbkData)) {
     return;
   }
@@ -319,29 +320,31 @@
   }
   obj.free();
 
-  // draw annotations
-  annotList = new Annots(xref, catalog, getAnnots(&obj));
-  obj.free();
-  acroForm = catalog->getAcroForm()->isDict() ?
-               catalog->getAcroForm()->getDict() : NULL;
-  if (acroForm) {
-    if (acroForm->lookup("NeedAppearances", &obj)) {
-      if (obj.isBool() && obj.getBool()) {
-	annotList->generateAppearances(acroForm);
-      }
-    }
+  if (!suppressAnnotations) {
+    // draw annotations
+    annotList = new Annots(xref, catalog, getAnnots(&obj));
     obj.free();
-  }
-  if (annotList->getNumAnnots() > 0) {
-    if (globalParams->getPrintCommands()) {
-      printf("***** Annotations\n");
+    acroForm = catalog->getAcroForm()->isDict() ?
+      catalog->getAcroForm()->getDict() : NULL;
+    if (acroForm) {
+      if (acroForm->lookup("NeedAppearances", &obj)) {
+	if (obj.isBool() && obj.getBool()) {
+	  annotList->generateAppearances(acroForm);
+	}
+      }
+      obj.free();
     }
-    for (i = 0; i < annotList->getNumAnnots(); ++i) {
-      annotList->getAnnot(i)->draw(gfx, printing);
+    if (annotList->getNumAnnots() > 0) {
+      if (globalParams->getPrintCommands()) {
+	printf("***** Annotations\n");
+      }
+      for (i = 0; i < annotList->getNumAnnots(); ++i) {
+	annotList->getAnnot(i)->draw(gfx, printing);
+      }
+      out->dump();
     }
-    out->dump();
+    delete annotList;
   }
-  delete annotList;
 
   delete gfx;
 #endif
diff -r -u xpdf-unstable/xpdf/Page.h xpdf-patched/xpdf/Page.h
--- xpdf-unstable/xpdf/Page.h	2007-02-27 23:05:52.000000000 +0100
+++ xpdf-patched/xpdf/Page.h	2007-08-29 13:11:15.000000000 +0200
@@ -151,7 +151,7 @@
   // Display a page.
   void display(OutputDev *out, double hDPI, double vDPI,
 	       int rotate, GBool useMediaBox, GBool crop,
-	       GBool printing, Catalog *catalog,
+	       GBool printing, GBool suppressAnnotations, Catalog *catalog,
 	       GBool (*abortCheckCbk)(void *data) = NULL,
 	       void *abortCheckCbkData = NULL);
 
@@ -159,7 +159,8 @@
   void displaySlice(OutputDev *out, double hDPI, double vDPI,
 		    int rotate, GBool useMediaBox, GBool crop,
 		    int sliceX, int sliceY, int sliceW, int sliceH,
-		    GBool printing, Catalog *catalog,
+		    GBool printing, GBool suppressAnnotations,
+		    Catalog *catalog,
 		    GBool (*abortCheckCbk)(void *data) = NULL,
 		    void *abortCheckCbkData = NULL);
 
diff -r -u xpdf-unstable/xpdf/PDFCore.cc xpdf-patched/xpdf/PDFCore.cc
--- xpdf-unstable/xpdf/PDFCore.cc	2007-02-27 23:05:52.000000000 +0100
+++ xpdf-patched/xpdf/PDFCore.cc	2007-08-29 13:48:33.000000000 +0200
@@ -832,7 +832,7 @@
     }
   }
   doc->displayPageSlice(out, page->page, dpi, dpi, rotate,
-			gFalse, gTrue, gFalse, x, y, sliceW, sliceH);
+			gFalse, gTrue, gFalse, gFalse, x, y, sliceW, sliceH);
   tile->bitmap = out->takeBitmap();
   memcpy(tile->ctm, out->getDefCTM(), 6 * sizeof(double));
   memcpy(tile->ictm, out->getDefICTM(), 6 * sizeof(double));
@@ -842,7 +842,7 @@
   if (!page->text) {
     if ((textOut = new TextOutputDev(NULL, gTrue, gFalse, gFalse))) {
       doc->displayPage(textOut, page->page, dpi, dpi, rotate,
-		       gFalse, gTrue, gFalse);
+		       gFalse, gTrue, gFalse, gFalse);
       page->text = textOut->takeText();
       delete textOut;
     }
@@ -1579,7 +1579,7 @@
   } else {
     textOut = new TextOutputDev(NULL, gTrue, gFalse, gFalse);
     if (textOut->isOk()) {
-      doc->displayPage(textOut, pg, dpi, dpi, rotate, gFalse, gTrue, gFalse);
+      doc->displayPage(textOut, pg, dpi, dpi, rotate, gFalse, gTrue, gFalse, gFalse);
       textOut->cvtUserToDev(xMin, yMin, &x0, &y0);
       textOut->cvtUserToDev(xMax, yMax, &x1, &y1);
       if (x0 > x1) {
@@ -1672,7 +1672,7 @@
     for (pg = backward ? pg - 1 : pg + 1;
 	 backward ? pg >= 1 : pg <= doc->getNumPages();
 	 pg += backward ? -1 : 1) {
-      doc->displayPage(textOut, pg, 72, 72, 0, gFalse, gTrue, gFalse);
+      doc->displayPage(textOut, pg, 72, 72, 0, gFalse, gTrue, gFalse, gFalse);
       if (textOut->findText(u, len, gTrue, gTrue, gFalse, gFalse,
 			    caseSensitive, backward,
 			    &xMin, &yMin, &xMax, &yMax)) {
@@ -1685,7 +1685,7 @@
     for (pg = backward ? doc->getNumPages() : 1;
 	 backward ? pg > topPage : pg < topPage;
 	 pg += backward ? -1 : 1) {
-      doc->displayPage(textOut, pg, 72, 72, 0, gFalse, gTrue, gFalse);
+      doc->displayPage(textOut, pg, 72, 72, 0, gFalse, gTrue, gFalse, gFalse);
       if (textOut->findText(u, len, gTrue, gTrue, gFalse, gFalse,
 			    caseSensitive, backward,
 			    &xMin, &yMin, &xMax, &yMax)) {
diff -r -u xpdf-unstable/xpdf/PDFDoc.cc xpdf-patched/xpdf/PDFDoc.cc
--- xpdf-unstable/xpdf/PDFDoc.cc	2007-02-27 23:05:52.000000000 +0100
+++ xpdf-patched/xpdf/PDFDoc.cc	2007-08-29 12:42:52.000000000 +0200
@@ -309,39 +309,43 @@
 void PDFDoc::displayPage(OutputDev *out, int page,
 			 double hDPI, double vDPI, int rotate,
 			 GBool useMediaBox, GBool crop, GBool printing,
+			 GBool suppressAnnotations,
 			 GBool (*abortCheckCbk)(void *data),
 			 void *abortCheckCbkData) {
   if (globalParams->getPrintCommands()) {
     printf("***** page %d *****\n", page);
   }
   catalog->getPage(page)->display(out, hDPI, vDPI,
-				  rotate, useMediaBox, crop, printing, catalog,
+				  rotate, useMediaBox, crop, printing,
+				  suppressAnnotations, catalog,
 				  abortCheckCbk, abortCheckCbkData);
 }
 
 void PDFDoc::displayPages(OutputDev *out, int firstPage, int lastPage,
 			  double hDPI, double vDPI, int rotate,
 			  GBool useMediaBox, GBool crop, GBool printing,
+			 GBool suppressAnnotations,
 			  GBool (*abortCheckCbk)(void *data),
 			  void *abortCheckCbkData) {
   int page;
 
   for (page = firstPage; page <= lastPage; ++page) {
     displayPage(out, page, hDPI, vDPI, rotate, useMediaBox, crop, printing,
-		abortCheckCbk, abortCheckCbkData);
+		suppressAnnotations, abortCheckCbk, abortCheckCbkData);
   }
 }
 
 void PDFDoc::displayPageSlice(OutputDev *out, int page,
 			      double hDPI, double vDPI, int rotate,
 			      GBool useMediaBox, GBool crop, GBool printing,
+			      GBool suppressAnnotations,
 			      int sliceX, int sliceY, int sliceW, int sliceH,
 			      GBool (*abortCheckCbk)(void *data),
 			      void *abortCheckCbkData) {
   catalog->getPage(page)->displaySlice(out, hDPI, vDPI,
 				       rotate, useMediaBox, crop,
 				       sliceX, sliceY, sliceW, sliceH,
-				       printing, catalog,
+				       printing, suppressAnnotations, catalog,
 				       abortCheckCbk, abortCheckCbkData);
 }
 
diff -r -u xpdf-unstable/xpdf/PDFDoc.h xpdf-patched/xpdf/PDFDoc.h
--- xpdf-unstable/xpdf/PDFDoc.h	2007-02-27 23:05:52.000000000 +0100
+++ xpdf-patched/xpdf/PDFDoc.h	2007-08-29 12:41:43.000000000 +0200
@@ -89,6 +89,7 @@
   void displayPage(OutputDev *out, int page,
 		   double hDPI, double vDPI, int rotate,
 		   GBool useMediaBox, GBool crop, GBool printing,
+		   GBool suppressAnnotations,
 		   GBool (*abortCheckCbk)(void *data) = NULL,
 		   void *abortCheckCbkData = NULL);
 
@@ -96,6 +97,7 @@
   void displayPages(OutputDev *out, int firstPage, int lastPage,
 		    double hDPI, double vDPI, int rotate,
 		    GBool useMediaBox, GBool crop, GBool printing,
+		    GBool suppressAnnotations,
 		    GBool (*abortCheckCbk)(void *data) = NULL,
 		    void *abortCheckCbkData = NULL);
 
@@ -103,6 +105,7 @@
   void displayPageSlice(OutputDev *out, int page,
 			double hDPI, double vDPI, int rotate,
 			GBool useMediaBox, GBool crop, GBool printing,
+			GBool suppressAnnotations,
 			int sliceX, int sliceY, int sliceW, int sliceH,
 			GBool (*abortCheckCbk)(void *data) = NULL,
 			void *abortCheckCbkData = NULL);
diff -r -u xpdf-unstable/xpdf/pdfimages.cc xpdf-patched/xpdf/pdfimages.cc
--- xpdf-unstable/xpdf/pdfimages.cc	2007-02-27 23:05:52.000000000 +0100
+++ xpdf-patched/xpdf/pdfimages.cc	2007-08-29 13:48:33.000000000 +0200
@@ -135,7 +135,7 @@
   imgOut = new ImageOutputDev(imgRoot, dumpJPEG);
   if (imgOut->isOk()) {
     doc->displayPages(imgOut, firstPage, lastPage, 72, 72, 0,
-		      gFalse, gTrue, gFalse);
+		      gFalse, gTrue, gFalse, gFalse);
   }
   delete imgOut;
 
diff -r -u xpdf-unstable/xpdf/pdftoppm.cc xpdf-patched/xpdf/pdftoppm.cc
--- xpdf-unstable/xpdf/pdftoppm.cc	2007-02-27 23:05:52.000000000 +0100
+++ xpdf-patched/xpdf/pdftoppm.cc	2007-08-29 12:50:34.000000000 +0200
@@ -34,6 +34,7 @@
 static char cfgFileName[256] = "";
 static GBool printVersion = gFalse;
 static GBool printHelp = gFalse;
+static GBool suppressAnnotations = gFalse;
 
 static ArgDesc argDesc[] = {
   {"-f",      argInt,      &firstPage,     0,
@@ -46,6 +47,8 @@
    "generate a monochrome PBM file"},
   {"-gray",   argFlag,     &gray,          0,
    "generate a grayscale PGM file"},
+  {"-noannots", argFlag,   &suppressAnnotations,  0,
+   "ommit annotations"},
 #if HAVE_T1LIB_H
   {"-t1lib",      argString,      enableT1libStr, sizeof(enableT1libStr),
    "enable t1lib font rasterizer: yes, no"},
@@ -179,7 +182,7 @@
   splashOut->startDoc(doc->getXRef());
   for (pg = firstPage; pg <= lastPage; ++pg) {
     doc->displayPage(splashOut, pg, resolution, resolution, 0,
-		     gFalse, gTrue, gFalse);
+		     gFalse, gTrue, gFalse, suppressAnnotations);
     sprintf(ppmFile, "%.*s-%06d.%s",
 	    (int)sizeof(ppmFile) - 32, ppmRoot, pg,
 	    mono ? "pbm" : gray ? "pgm" : "ppm");
diff -r -u xpdf-unstable/xpdf/pdftops.cc xpdf-patched/xpdf/pdftops.cc
--- xpdf-unstable/xpdf/pdftops.cc	2007-02-27 23:05:52.000000000 +0100
+++ xpdf-patched/xpdf/pdftops.cc	2007-08-29 13:48:33.000000000 +0200
@@ -60,6 +60,7 @@
 static char cfgFileName[256] = "";
 static GBool printVersion = gFalse;
 static GBool printHelp = gFalse;
+static GBool suppressAnnotations = gFalse;
 
 static ArgDesc argDesc[] = {
   {"-f",          argInt,      &firstPage,      0,
@@ -118,6 +119,8 @@
    "owner password (for encrypted files)"},
   {"-upw",        argString,   userPassword,    sizeof(userPassword),
    "user password (for encrypted files)"},
+  {"-noannots",   argFlag,   &suppressAnnotations,  0,
+   "ommit annotations"},
   {"-q",          argFlag,     &quiet,          0,
    "don't print any messages or errors"},
   {"-cfg",        argString,      cfgFileName,    sizeof(cfgFileName),
@@ -318,7 +321,8 @@
 			  doc->getCatalog(), firstPage, lastPage, mode);
   if (psOut->isOk()) {
     doc->displayPages(psOut, firstPage, lastPage, 72, 72,
-		      0, !pageCrop, globalParams->getPSCrop(), gTrue);
+		      0, !pageCrop, globalParams->getPSCrop(), gTrue,
+		      suppressAnnotations);
   } else {
     delete psOut;
     exitCode = 2;
diff -r -u xpdf-unstable/xpdf/pdftotext.cc xpdf-patched/xpdf/pdftotext.cc
--- xpdf-unstable/xpdf/pdftotext.cc	2007-02-27 23:05:52.000000000 +0100
+++ xpdf-patched/xpdf/pdftotext.cc	2007-08-29 13:48:33.000000000 +0200
@@ -47,6 +47,7 @@
 static char cfgFileName[256] = "";
 static GBool printVersion = gFalse;
 static GBool printHelp = gFalse;
+static GBool suppressAnnotations = gFalse;
 
 static ArgDesc argDesc[] = {
   {"-f",       argInt,      &firstPage,     0,
@@ -65,6 +66,8 @@
    "output end-of-line convention (unix, dos, or mac)"},
   {"-nopgbrk", argFlag,     &noPageBreaks,  0,
    "don't insert page breaks between pages"},
+  {"-noannots", argFlag,   &suppressAnnotations,  0,
+   "ommit annotations"},
   {"-opw",     argString,   ownerPassword,  sizeof(ownerPassword),
    "owner password (for encrypted files)"},
   {"-upw",     argString,   userPassword,   sizeof(userPassword),
@@ -235,7 +238,7 @@
 			      physLayout, rawOrder, htmlMeta);
   if (textOut->isOk()) {
     doc->displayPages(textOut, firstPage, lastPage, 72, 72, 0,
-		      gFalse, gTrue, gFalse);
+		      gFalse, gTrue, gFalse, suppressAnnotations);
   } else {
     delete textOut;
     exitCode = 2;
diff -r -u xpdf-unstable/xpdf/PSOutputDev.cc xpdf-patched/xpdf/PSOutputDev.cc
--- xpdf-unstable/xpdf/PSOutputDev.cc	2007-02-27 23:05:52.000000000 +0100
+++ xpdf-patched/xpdf/PSOutputDev.cc	2007-08-29 12:39:07.000000000 +0200
@@ -2722,7 +2722,8 @@
 				  int rotateA, GBool useMediaBox, GBool crop,
 				  int sliceX, int sliceY,
 				  int sliceW, int sliceH,
-				  GBool printing, Catalog *catalog,
+				  GBool printing, GBool suppressAnnotations,
+				  Catalog *catalog,
 				  GBool (*abortCheckCbk)(void *data),
 				  void *abortCheckCbkData) {
 #if HAVE_SPLASH
@@ -2743,7 +2744,8 @@
   scan = new PreScanOutputDev();
   page->displaySlice(scan, 72, 72, rotateA, useMediaBox, crop,
 		     sliceX, sliceY, sliceW, sliceH,
-		     printing, catalog, abortCheckCbk, abortCheckCbkData);
+		     printing, suppressAnnotations,
+		     catalog, abortCheckCbk, abortCheckCbkData);
   rasterize = scan->usesTransparency();
   delete scan;
   if (!rasterize) {
@@ -2770,7 +2772,8 @@
   page->displaySlice(splashOut, splashDPI, splashDPI, rotateA,
 		     useMediaBox, crop,
 		     sliceX, sliceY, sliceW, sliceH,
-		     printing, catalog, abortCheckCbk, abortCheckCbkData);
+		     printing, suppressAnnotations,
+		     catalog, abortCheckCbk, abortCheckCbkData);
 
   // start the PS page
   page->makeBox(splashDPI, splashDPI, rotateA, useMediaBox, gFalse,
diff -r -u xpdf-unstable/xpdf/PSOutputDev.h xpdf-patched/xpdf/PSOutputDev.h
--- xpdf-unstable/xpdf/PSOutputDev.h	2007-02-27 23:05:52.000000000 +0100
+++ xpdf-patched/xpdf/PSOutputDev.h	2007-08-29 12:40:24.000000000 +0200
@@ -130,7 +130,8 @@
   virtual GBool checkPageSlice(Page *page, double hDPI, double vDPI,
 			       int rotate, GBool useMediaBox, GBool crop,
 			       int sliceX, int sliceY, int sliceW, int sliceH,
-			       GBool printing, Catalog *catalog,
+			       GBool printing, GBool suppressAnnotations,
+			       Catalog *catalog,
 			       GBool (*abortCheckCbk)(void *data) = NULL,
 			       void *abortCheckCbkData = NULL);
 
diff -r -u xpdf-unstable/xpdf/XPDFViewer.cc xpdf-patched/xpdf/XPDFViewer.cc
--- xpdf-unstable/xpdf/XPDFViewer.cc	2007-02-27 23:05:52.000000000 +0100
+++ xpdf-patched/xpdf/XPDFViewer.cc	2007-08-29 13:48:33.000000000 +0200
@@ -3161,7 +3161,7 @@
 //------------------------------------------------------------------------
 
 void XPDFViewer::initPrintDialog() {
-  Widget sep1, sep2, row, label1, label2, okBtn, cancelBtn;
+  Widget sep1, sep2, sep3, row, label1, label2, okBtn, cancelBtn;
   Arg args[20];
   int n;
   XmString s;
@@ -3287,10 +3287,37 @@
   sep2 = XmCreateSeparator(printDialog, "sep2", args, n);
   XtManageChild(sep2);
 
-  //----- "print" and "cancel" buttons
+  //----- "suppress Annotations"
   n = 0;
   XtSetArg(args[n], XmNtopAttachment, XmATTACH_WIDGET); ++n;
   XtSetArg(args[n], XmNtopWidget, sep2); ++n;
+  XtSetArg(args[n], XmNtopOffset, 4); ++n;
+  XtSetArg(args[n], XmNleftAttachment, XmATTACH_FORM); ++n;
+  XtSetArg(args[n], XmNindicatorType, XmONE_OF_MANY); ++n;
+  XtSetArg(args[n], XmNset, XmUNSET); ++n;
+  s = XmStringCreateLocalized("Suppress annotations (even those marked as printable)");
+  XtSetArg(args[n], XmNlabelString, s); ++n;
+  suppressAnnotationsBtn = XmCreateToggleButton(printDialog, "suppressAnnotations", args, n);
+  XmStringFree(s);
+  XtManageChild(suppressAnnotationsBtn);
+
+  //----- separator
+  n = 0;
+  XtSetArg(args[n], XmNtopAttachment, XmATTACH_WIDGET); ++n;
+  XtSetArg(args[n], XmNtopWidget, suppressAnnotationsBtn); ++n;
+  XtSetArg(args[n], XmNtopOffset, 8); ++n;
+  XtSetArg(args[n], XmNleftAttachment, XmATTACH_FORM); ++n;
+  XtSetArg(args[n], XmNleftOffset, 8); ++n;
+  XtSetArg(args[n], XmNrightAttachment, XmATTACH_FORM); ++n;
+  XtSetArg(args[n], XmNrightOffset, 8); ++n;
+  XtSetArg(args[n], XmNorientation, XmHORIZONTAL); ++n;
+  sep3 = XmCreateSeparator(printDialog, "sep3", args, n);
+  XtManageChild(sep3);
+
+  //----- "print" and "cancel" buttons
+  n = 0;
+  XtSetArg(args[n], XmNtopAttachment, XmATTACH_WIDGET); ++n;
+  XtSetArg(args[n], XmNtopWidget, sep3); ++n;
   XtSetArg(args[n], XmNtopOffset, 8); ++n;
   XtSetArg(args[n], XmNleftAttachment, XmATTACH_FORM); ++n;
   XtSetArg(args[n], XmNleftOffset, 4); ++n;
@@ -3302,7 +3329,7 @@
 		&printPrintCbk, (XtPointer)this);
   n = 0;
   XtSetArg(args[n], XmNtopAttachment, XmATTACH_WIDGET); ++n;
-  XtSetArg(args[n], XmNtopWidget, sep2); ++n;
+  XtSetArg(args[n], XmNtopWidget, sep3); ++n;
   XtSetArg(args[n], XmNtopOffset, 8); ++n;
   XtSetArg(args[n], XmNrightAttachment, XmATTACH_FORM); ++n;
   XtSetArg(args[n], XmNrightOffset, 4); ++n;
@@ -3362,6 +3389,7 @@
   if (psFileName) {
     delete psFileName;
   }
+  XmToggleButtonSetState(suppressAnnotationsBtn, False, False);
 
   sprintf(buf, "%d", doc->getNumPages());
   XmTextFieldSetString(printFirstPage, "1");
@@ -3399,7 +3427,7 @@
 void XPDFViewer::printPrintCbk(Widget widget, XtPointer ptr,
 			       XtPointer callData) {
   XPDFViewer *viewer = (XPDFViewer *)ptr;
-  unsigned char withCmd;
+  unsigned char withCmd, suppressAnnotations;
   GString *psFileName;
   int firstPage, lastPage;
   PDFDoc *doc;
@@ -3433,13 +3461,15 @@
   } else if (lastPage > doc->getNumPages()) {
     lastPage = doc->getNumPages();
   }
+  XtVaGetValues(viewer->suppressAnnotationsBtn, XmNset, &suppressAnnotations, NULL);
 
   psOut = new PSOutputDev(psFileName->getCString(), doc->getXRef(),
 			  doc->getCatalog(), firstPage, lastPage,
 			  psModePS);
   if (psOut->isOk()) {
     doc->displayPages(psOut, firstPage, lastPage, 72, 72,
-		      0, gTrue, globalParams->getPSCrop(), gTrue);
+		      0, gTrue, globalParams->getPSCrop(), gTrue,
+		      suppressAnnotations?gTrue:gFalse);
   }
   delete psOut;
   delete psFileName;
diff -r -u xpdf-unstable/xpdf/XPDFViewer.h xpdf-patched/xpdf/XPDFViewer.h
--- xpdf-unstable/xpdf/XPDFViewer.h	2007-02-27 23:05:52.000000000 +0100
+++ xpdf-patched/xpdf/XPDFViewer.h	2007-08-29 13:03:24.000000000 +0200
@@ -347,6 +347,7 @@
   Widget printFileText;
   Widget printFirstPage;
   Widget printLastPage;
+  Widget suppressAnnotationsBtn;
 };
 
 #endif

Reply via email to