Imprimir desde java

De ChuWiki
Saltar a: navegación, buscar

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

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();