Q: Is it possible to specify staple & duplex options on a per-document basis with jPDFPrint?

A: Yes, it is:  Java supports setting print job attributes for each print job, this is done through PrintRequestAttribute objects. jPDFPrint supports passing these attributes through.

The attributes that you want to use are:




Here is a sample Java code that will verify that the printer supports the DUPLEX attribute and then print using the DUPLEX attribute:

package print;
import java.awt.print.PrinterException;
import java.awt.print.PrinterJob;
import javax.print.PrintService;
import javax.print.PrintServiceLookup;
import javax.print.attribute.HashPrintRequestAttributeSet;
import javax.print.attribute.HashPrintServiceAttributeSet;
import javax.print.attribute.PrintServiceAttributeSet;
import javax.print.attribute.standard.Chromaticity;
import javax.print.attribute.standard.PrintQuality;
import javax.print.attribute.standard.PrinterName;
import javax.print.attribute.standard.Sides;
import com.qoppa.pdfPrint.PDFPrint;
public class PrintWithAttributes
    public static void main (String [] args)
            // Load the PDF document
            PDFPrint pdfPrint = new PDFPrint("input.pdf", null);
            // Create attribute set to print to a file
            HashPrintRequestAttributeSet attrSet = new HashPrintRequestAttributeSet();
            // Lookup the print service by name
            PrintService printService = getPrintService("printer name");
            // Check if the printer supports duplex
            if (printService.isAttributeValueSupported(Sides.DUPLEX, null, null))
            	// Print with duplex
                // Send the PDF to the printer
                pdfPrint.print ("printer name", null, attrSet);
        catch (Throwable t)
	public static PrintService getPrintService(String printerName) throws PrinterException
		PrintServiceAttributeSet pSet = new HashPrintServiceAttributeSet();
		pSet.add(new PrinterName(printerName, null));
		PrintService[] pServices = PrintServiceLookup.lookupPrintServices(null, pSet);
		if (pServices.length > 0)
			return pServices[0];
			throw new PrinterException("No Such Printer: " + printerName);

You can see all attributes supported by java by looking at the Java JDK Javadoc API and look at all classes that implement PrintRequestAttribute.