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

Reply via email to