Your message dated Sun, 11 Sep 2011 22:00:28 -0400
with message-id <[email protected]>
and subject line closing
has caused the Debian Bug report #440080,
regarding xpdf: please add possibility to suppress annotations
to be marked as done.

This means that you claim that the problem has been dealt with.
If this is not the case it is now your responsibility to reopen the
Bug report if necessary, and/or fix the problem forthwith.

(NB: If you are a system administrator and have no idea what this
message is talking about, this may indicate a serious mail system
misconfiguration somewhere. Please contact [email protected]
immediately.)


-- 
440080: http://bugs.debian.org/cgi-bin/bugreport.cgi?bug=440080
Debian Bug Tracking System
Contact [email protected] with problems
--- Begin Message ---
Package: xpdf-reader
Version: 3.02-1.1
Severity: wishlist
Tags: patch

If there are popup windows in the pdf file xpdf shows a question in a
red circle (I don't know if there is a possiblity in xpdf to activate
them, but it does not matter) and xpdf also puts those question marks
in circle into the postscript when printing or converting using pdftops,
when the pdf files says so (which some pdf files in the wild do so
annoyingly, I suppose acroread does some javascript that finaly removes
them or something like that, so nobody seems to care to fix those).

It would be nice if xpdf and pdftops had possibilites to suppress those
annotations. Attached patch does this. (At least it works here).
It adds a -noannots to pdftops and pdftoppm and an checkbox into the
xpdf print dialog to suppress those.

Hochachtungsvoll,
        Bernhard R. Link
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

--- End Message ---
--- Begin Message ---
Looks like there isn't interest in this anymore (as it was reassigned
over a year ago and the submitter has yet to respond).


--- End Message ---

Reply via email to