package com.revolsys.swing.map.print; import java.awt.event.ActionEvent; import java.awt.print.PageFormat; import java.awt.print.Paper; import java.awt.print.PrinterException; import java.awt.print.PrinterJob; import javax.print.PrintService; import javax.swing.Icon; import com.revolsys.geometry.model.BoundingBox; import com.revolsys.logging.Logs; import com.revolsys.swing.Icons; import com.revolsys.swing.action.I18nAction; import com.revolsys.swing.map.Viewport2D; import com.revolsys.swing.map.layer.Project; import com.revolsys.swing.parallel.Invoke; public class Print extends I18nAction { private static final Icon ICON = Icons.getIcon("printer"); /** * */ private static final long serialVersionUID = 8194892040166851551L; private PrintService printService; public Print() { super(ICON); } @Override public void actionPerformed(final ActionEvent event) { final Project project = Project.get(); final Viewport2D viewport = project.getViewport(); final PrinterJob job = PrinterJob.getPrinterJob(); final PageFormat format = job.defaultPage(); format.setOrientation(PageFormat.PORTRAIT); final Paper paper = format.getPaper(); paper.setImageableArea(29, 29, format.getWidth() - 58, format.getHeight() - 58); format.setPaper(paper); if (this.printService != null) { try { job.setPrintService(this.printService); } catch (final PrinterException e) { // TODO Auto-generated catch block e.printStackTrace(); } } final BoundingBox boundingBox = viewport.getBoundingBox(); final MapPageable pageable = new MapPageable(project, boundingBox, format, 20000, 300, 200); job.setPageable(pageable); final boolean doPrint = job.printDialog(); if (doPrint) { this.printService = job.getPrintService(); Invoke.background("Print", () -> { try { job.print(); } catch (final Exception e) { Logs.error(this, "Unable to print", e); } }); } } }