Inspired by the @cappytoi answer , I created the ListenablePrinterJob class, which allows you to print instances of Printable , Pageable, and Doc .
Usage example
PrintService defaultPrintService = PrintServiceLookup.lookupDefaultPrintService(); ListenablePrinterJob job = new ListenablePrinterJob(defaultPrintService); job.setPrintJobListener(new PrintJobAdapter() {
Full source code
import javax.print.Doc; import javax.print.DocFlavor; import javax.print.DocPrintJob; import javax.print.PrintException; import javax.print.PrintService; import javax.print.SimpleDoc; import javax.print.event.PrintJobListener; import java.awt.print.Book; import java.awt.print.PageFormat; import java.awt.print.Pageable; import java.awt.print.Printable; import java.awt.print.PrinterJob; public class ListenablePrinterJob { private final PrintService printService; private PrintJobListener printJobListener; public ListenablePrinterJob(PrintService printService) { this.printService = printService; } private static PageFormat getDefaultPageFormat() { return PrinterJob.getPrinterJob().defaultPage(); } private static Pageable toPageable(Printable printable, PageFormat page, int numPages) { Book book = new Book(); book.append(printable, page, numPages); return book; } public void print(Printable printable) throws PrintException { print(printable, getDefaultPageFormat()); } public void print(Printable printable, int numPages) throws PrintException { print(printable, numPages, getDefaultPageFormat()); } public void print(Printable printable, PageFormat pageFormat) throws PrintException { print(toPageable(printable, pageFormat, 1)); } public void print(Printable printable, int numPages, PageFormat pageFormat) throws PrintException { print(toPageable(printable, pageFormat, numPages)); } public void print(Pageable pageable) throws PrintException { print(new SimpleDoc(pageable, DocFlavor.SERVICE_FORMATTED.PAGEABLE, null)); } public void print(Doc doc) throws PrintException { DocPrintJob printJob = printService.createPrintJob(); printJob.addPrintJobListener(printJobListener); printJob.print(doc, null); } public void setPrintJobListener(PrintJobListener printJobListener) { this.printJobListener = printJobListener; } }
source share