Imprimir JPanel/JFrame a escala en Java
Posted On lunes, 20 de julio de 2009 at en 14:51 by JaehooBueno pues aqui va una adaptación de la primera version para imprimr un JPanel / JFrame, pero a escala:
1. Implementar la interfaz Printable en la clase que queremos imprimir:
public class PrintMeScale extends javax.swing.JFrame implements Printable{...
2. Sobreescribimos el método print en la clase que queremos imprimir: public int print(Graphics graphics, PageFormat pageFormat, int pageIndex) throws PrinterException {
if (pageIndex > 0)
return NO_SUCH_PAGE;
Graphics2D g2d = (Graphics2D)graphics;
g2d.translate(pageFormat.getImageableX(), pageFormat.getImageableY());
//-------------------------ESCALAR LA IMPRESION-------------------------------//
g2d.scale( ((Number) campo_escala.getValue()).doubleValue(), ((Number) campo_escala.getValue()).doubleValue());
//----------------------------------------------------------------------------//
jPanel1.printAll(graphics);
return PAGE_EXISTS;
}
Como se pede ver el truco esta en utilizar el método scale(X,Y) del objeto g2d, este recibe dos parametros de tipo Double que representan la escala para el alto (X) y el ancho (Y). Ejemplo:
100% == 1.00Imprime el obejo escalado al 70%
80% == 0.80
etc...
g2d.scale(0.70,0.70);3. Y por último mandar a ejecutar la impresión:
try {
PrinterJob job = PrinterJob.getPrinterJob();
job.setPrintable(this);
//--------------------------------------------
boolean aceptar_impresion =job.printDialog();
if(aceptar_impresion)
job.print();
//---------------------------------------------
}
catch (PrinterException ex) {
Logger.getLogger(PrintMeScale.class.getName()).log(Level.SEVERE, null, ex);
}
NOTA: Al ejecutarse la impresion se abre el dialogo de impresion, sin embargo en esta version se ha agreado el boolean aceptar_impresion, porque al darle clic al boton CANCELAR se ejecutaba el trabajo de impresion, con esto queda solucionado.
Dejo la captura del ejemplo con su código.
![]() |
Saludos =P

