package jas.plot.java2; import jas.plot.PrintHelper; import java.awt.Component; import java.awt.Dimension; import java.awt.Graphics; import java.awt.Graphics2D; import java.awt.print.PageFormat; import java.awt.print.Printable; import java.awt.print.PrinterException; import java.awt.print.PrinterJob; import javax.swing.RepaintManager; public class PrintHelper12 extends PrintHelper implements Printable { public void printTarget(Component target) throws Exception { if (debugPrinting) System.out.println("PrintHelper12 printing "+target.getClass().getName()); this.target = target; PrinterJob printJob = PrinterJob.getPrinterJob(); printJob.setPrintable(this); //PageFormat pf = printJob.pageDialog(printJob.defaultPage()); boolean pj = printJob.printDialog(); if (pj) { RepaintManager pm = RepaintManager.currentManager(target); boolean save = pm.isDoubleBufferingEnabled(); try { pm.setDoubleBufferingEnabled(false); setPrintingThread(Thread.currentThread()); printJob.print(); } catch (Exception x) { if (debugPrinting) System.out.println("Exception during printing "+x); throw x; } finally { pm.setDoubleBufferingEnabled(save); setPrintingThread(null); } } } public int print(Graphics g, PageFormat pf, int pi) throws PrinterException { if (pi >= 1) return Printable.NO_SUCH_PAGE; if (debugPrinting) System.out.println("PrintHelper12 printing page"+pi); Graphics2D g2 = (Graphics2D) g; g2.translate(pf.getImageableX(),pf.getImageableY()); Dimension size = target.getSize(); double pageWidth = pf.getImageableWidth(); double pageHeight = pf.getImageableHeight(); double portraiteRatio = Math.min(pageWidth/size.width,pageHeight/size.height); double landscapeRatio = Math.min(pageWidth/size.height,pageHeight/size.width); if (debugPrinting) System.out.println("portraiteRatio="+portraiteRatio+" landscapeRatio="+landscapeRatio); if (!scaleUp) { portraiteRatio = Math.min(portraiteRatio,1); landscapeRatio = Math.min(landscapeRatio,1); } if (debugPrinting) System.out.println("portraiteRatio="+portraiteRatio+" landscapeRatio="+landscapeRatio); boolean useLandscape = (orientation == ORIENTATION_BEST_FIT) ? landscapeRatio > portraiteRatio : orientation == ORIENTATION_LANDSCAPE; if (debugPrinting) System.out.println("portraiteRatio="+portraiteRatio+" landscapeRatio="+landscapeRatio +" useLandscape="+useLandscape); if (useLandscape) { g2.rotate(Math.PI/2); g2.translate(0,-pageWidth); g2.scale(landscapeRatio,landscapeRatio); } else { g2.scale(portraiteRatio,portraiteRatio); } target.paint(g2); return Printable.PAGE_EXISTS; } public void setOrientation(int orientation) { this.orientation = orientation; } public void setScaleUp(boolean scaleUp) { this.scaleUp = scaleUp; } private int orientation = ORIENTATION_BEST_FIT; private boolean scaleUp = false; private Component target; }