Это будет похоже на решение старого вопроса, но для тех, кто ищет ответ, как я, я надеюсь, что это поможет.
Можно использовать события только для java.awt, конвертировав вашу печатную форму в javax.print. Вот как вы можете сделать это правильно, не нарушая формат страницы.
// get default service
PrintService service = PrintServiceLookup.lookupDefaultPrintService();
// this is your old awt job, which you can use to get default pageFormat
PrinterJob job = PrinterJob.getPrinterJob();
// set your printer service to old awt so that you can get the default paper
job.setPrintService(service);
// get the default page format from the printer you selected
PageFormat pageFormat = job.getPageFormat(null);
// do some paper stuff etc. here
// get your doc
DocPrintJob printJob = service.createPrintJob();
Book book = new Book();
// Print interface implements printable
book.append(new PrintInterface(), pageFormat);
// make your attr here
PrintRequestAttributeSet aset = new HashPrintRequestAttributeSet();
aset.add(PrintQuality.HIGH);
// Create your doc for pageable
SimpleDoc doc = new SimpleDoc(book, DocFlavor.SERVICE_FORMATTED.PAGEABLE, null);
/// and voila, print it
printJob.print(doc, aset);
То же самое можно сделать для одной печатной формы, но в настоящее время я не смог найти способ изменить PageFormat для этого, поэтому я просто пропустил ее. Таким образом, вы можете использовать Pageable или Printable, и вы все равно можете использовать эти события, просто добавив их с помощью printJob.addPrintJobListener ()
Это ни в коем случае не полный код, но он дает вам представление о том, хотите ли вы его.