Imprimir desde java

From ChuWiki
Jump to navigation Jump to search

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