Ayudanos contestando la siguiente encuesta acerca de Videojuegos!
Ir a la encuesta
>

Imprimir

 

Archivos necesarios:

En este trial veremos como mandar a imprimir un objeto que este dibujado sobre la pantalla. Este proceso puede verse un poco complicado y revoltoso pero en escencia es muy sencillo. Para imprimir solamente necesitamos crear un par de metodos en los que utilizamos un objeto tipo Graphics para mandar dibujar en la pantalla. Imprimir es muy util y se utiliza en todo tipo de programas, desde las calculadoras que nos permiten imprimir graficas hasta los programas de manejo de texto que nos permiten imprimir el documento.

El primer archivo incluye tres clases que son muy similares a las clases que vimos en el trial de StringTokenizer para graficar datos del INEGI, el segundo archivo incluye el documento del INEGI y un icono que debe estar en el mismo directorio que las clases que se generan al compilar este archivo.

Main.java
Impresion.zip

Media
Media.zip

 

¿Cómo imprimir?

extends

Primero que nada tenemos que importar java.awt.print.* y tenemos que implementar la interfaz Printable.

Ahora vamos a crear el método que manda a imprimir: Primero vamos a crear un objeto de tipo PrinterJob con el método getPrinterJob() de la clase PrinterJob como se ve en la foto de la derecha. Después debemos elegir quién va a manejar el procedimiento de impresión, como nuestra clase principal implementa la interfaz Printable podemos decirle que la misma clase principal se encarga de imprimir (si quisieramos imprimir diferentes imágenes pero solamente una a la vez tendríamos que cambiar el manejador de impresión aqui). Después mostramos el diálogo de impresión mediante el método printDialog() de nuestro objeto PrinterJob.

imprimeGrafica
Tenemos que poner el método printDialog() en un if para que, en caso de que el usuario apriete el botón cancelar, no se mande a imprimir nada. Por último mandamos llamar el método print() de nuestro objeto PrinterJob, como recordaras el encargado de imprimir es la misma forma principal por lo que se va a mandar llamar el método print() de esta y eso es lo siguiente que tenemos que hacer.
print()

El método print() es donde se imprime. Como puedes ver recibe tres parámetros, el primero es un objeto tipo Graphics con el que vamos a "dibujar" lo que se va a imprimir, el segundo es un objeto PageFormat que nos permite conocer algunas propiedades de la página en que vamos a imprimir y por último el tercero es un entero que representa el número de página a imprimir o índice de impresión.

Para imprimir lo primero que hacemos es revisar el índice de impresión, como solamente podemos imprimir documentos de una sola hoja (imprimir de más hojas es un poco más complicado y no tiene sentido para este proyecto) primero revisamos que la hoja que estamos imprimiendo sea efectivamente la 0 o si no regresamos que la hoja no existe.

Después convertimos el objeto Graphics a un objeto Graphics2D como podrás recordar del trial de imágenes esto no es indispensable pero es muy recomendado. Luego vamos a sacar la escala en la que tenemos que imprimir para que todo entre en una sola hoja. En estecaso la gráfica es más grande a lo ancho que a lo alto por lo que la escala se basa en el ancho, como puedes ver aqui utilizamos el PageFormat que recibimos como parámetro para encontrar el ancho sobre el que se puede dibujar en la hoja con getImageableWidth(). Otros métodos útiles del PageFormat son getImageableHeight()y getOrientation(). El segundo devuelve un valor entero que podemos reconocer mediante las constantes de PageFormat LANDSCAPE, PORTRAIT y REVERSE_LANDSCAPE. Por último antes de imprimir vamos a obtener el RepaintManager de graph (que es el objeto que queremos mandar a imprimir) con el fin de apagar el Double Buffering. El Double Buffering es un proceso mediante el cual se remueven fallas visibles del proceso de dibujado en el monitor pero que hace que las impresiones se vean borrosas.

Por último para mandar imprimir mandamos llamar el método paint() de nuestro objeto. En caso de que nuestro objeto sea un contenedor (un JFrame o un JPanel) podemos mandar llamar el método paintAll() para que se dibuje a si mismo y a todos sus hijos. Una vez que ya se mandó imprimir volvemos a cambiar el Double Buffering para que nuestras ventanas se sigan viendo bien y regresamos que la página está lista para mandarse imprimir.

NOTA:

Un tip para que al probar la impresión no gasten millones de hojas. Windows (y una gran cantidad de sistemas operativos) cuentan con la opción de mandar a imprimir a un archivo. Para conseguir esto solamente debes poner una palomita en el checkbox que dice "Print to file" (probablemente: "Imprimir a un archivo" en español). También hay una gran cantidad de programas como Adobe Acrobat, Microsoft Office, SnagIt, etc. que nos proveen esta funcionalidad con algunas otras ventajas.

Mientras todavía no estén muy seguros de que la impresión vaya a dar los resultados esperados utilicen este método para imprimir con lo que pueden ahorrarse una gran cantidad de hojas de prueba.

Print Dialog

RegresarRegresar

         
Ayudanos contestando la siguiente encuesta acerca de Videojuegos!
Ir a la encuesta