Imprimir desde java
Para imprimir desde java hacemos en primer lugar una clase que implemente Printable. Al método print() se le pasan varios parámetros:
- Graphics. Con el que debemos dibujar lo que queremos que salga en la impresora. g.drawText(), g.drawLine(), etc.
- PageFormat. Nos dice si la página está horizontal o vertical, para que lo tengamos en cuenta a la hora de dibujar.
- Número de página. Para que sepamos qué página se está imprimiendo y dibujemos lo que vaya en esa página.
En este método debemos devolver:
- PAGE_EXISTS si hemos dibujado algo en la página cuyo número nos han pasado y debe imprimirse.
- NO_SUCH_PAGE si ese número de página ya no tiene nada que dibujar.
Por ejemplo, si nuestro texto es de una sola página, cuando nos pasen número de página igual a cero escribiremos el texto de la página y devolveremos PAGE_EXISTS. Si nos pasan número de página igual a uno, no dibujaremos nada y devolveremos NO_SUCH_PAGE, con lo que se parará la impresión.
Un ejemplo de esta clase puede ser:
class MiPrintable implements Printable { public int print (Graphics g, PageFormat f, int pageIndex) { if (pageIndex == 0) { // Imprime "Hola mundo" en la primera pagina, en la posicion 100,100 g.drawString("Hola mundo", 100,100); return PAGE_EXISTS; } else return NO_SUCH_PAGE; } }
Una vez que tenemos preparada la clase, sólo hay que pasársela a un PrinterJob y mandarla imprimir. Esto se hace así
PrinterJob job = PrinterJob.getPrinterJob(); job.setPrintable( new MiPrintable()); try { job.print(); } catch (PrinterException e) { e.printStackTrace(); }
Simplemente se obtiene el PrinterJob con PrinterJob.getPrinterJob(), se le pasa el Printable con job.setPrintable() y se manda imprimir con job.print().
Diálogos de impresión[edit]
Podemos mostrar los diálogos habituales de impresión antes de imprimir de la siguiente forma
// Diálogo para elegir el formato de impresión PageFormat pageFormat = new PageFormat(); pageFormat=job.pageDialog(pageFormat); // Diálogo para confirmar impresion. // Devuelve true si el usuario decide imprimir. if (job.printDialog()) job.print();