Durante mucho tiempo he programado en Java sin saber
como realizar una impresión a
través de la impresora, esto puede ser muy importante si se desea
realizar un sistema de facturación, calculo de remuneraciones,
ticket o comprobantes de algún tipo.
Ahora
voy a describir algunos pasos que encontré y me han permitido
realizar impresiones desde Java.
Lo
primero que se debe crear es una clase donde se ingrese toda la
información que se desea imprimir, para esto creamos el archivo
ObjetoDeImpresion.java
que implementa la interfaz de java Printable, como se puede ver en el
siguiente ejemplo.
import
java.awt.*;
import
java.awt.print.*;
class
ObjetoDeImpresion implements Printable{
public int
print(Graphics g, PageFormat f, int pageIndex){
if(pageIndex
== 0){
g.drawString(“texto
que se imprime”, 100, 200);
return
PAGE_EXISTS;
}else{
return
NO_SUCH_PAGE;
}
}
}
Con
la clase anterior se dibuja la cadena “texto que se imprime” en
las coordenadas 100 pixeles a lo ancho y 200 pixeles a lo alto, estas
coordenadas se consideran desde la parte superior izquierda de la
hoja y van aumentando hacia la derecha en el caso de la primera
coordenada (100) y hacia abajo en el caso de la segunda coordenada
(200).
Si
deseas imprimir más líneas solo tienes que agregar más texto
utilizando la sentencia g.drawString(“mas
texto”, coordenada_x, coordenada_y),
con esto puedes dibujar todos los textos que se desee imprimir.
Debo
aclarar que hasta este punto no se ha enviado ningún documento a la
impresora, para esto se debe crear la siguiente clase, en el archivo
Imprimir.java.
import
java.io.*;
import
java.awt.print.*;
import
java.awt.print.PrinterJob.*;
import
java.awt.print.PageFormat.*;
class Imprimir{
static public
void main(String []args){
PrinterJob
job = PrinterJob.getPrinterJob();
job.setPrintable(new
ObjetoDeImpresion());
if(job.printDialog()){
try{
job.print();
}catch(PrinterException
e){
System.out.println(e);
}
}
}
}
La
clase Imprimir es la encargada de enviar el texto a la impresora,
para entender un poco mejor el funcionamiento de esta clase explicare
lo que hacen algunas de estas líneas.
Para
comenzar se debe aclarar que la clase Imprimir es una clase
ejecutable por eso tiene el método main
que permite comenzar a ejecutar todo el programa.
El
primer paso es crear un objeto PrinterJob el cual nos permitirá
manipular la interfaz de la impresora que nos proporciona el sistema
operativo que se esta utilizando, es importante mencionar que la
creación de este objeto no se realiza con la sentencia new
PrinterJob(),
como la mayoría de las instancias de objetos, sino con la sentencia
PrinterJob.getPrinterJob().
Una
vez que se tiene instanciado el objeto que permite manipular la
interfaz de la impresora, se le debe asignar al objeto la instancia de
la clase que se desea imprimir, en este caso la clase
ObjetoDeImpresion utilizando la sentencia Job.setPrintable(new
ObjetoDeImpresion()).
El
siguiente paso es opcional y permite desplegar la interfaz que proporciona el sistema operativo para la impresora con ella se puede
selección la impresora, seleccionar la hoja y los margenes, esta
sentencia también recibe la respuesta que el usuario selecciona en la
interfaz, indicando si se debe realizar la impresión o se cancela,
para esto se utiliza la sentencia job.printDialog().
Por
último esta la sentencia job.print()
que realiza la impresión del documento, esta sentencia puede ser
utilizada sin utilizar el dialogo de la impresora descrita en el
segmento anterior, en este caso la impresión se realiza en la
impresora por defecto, con los margenes y las propiedades que la
impresora tiene por defecto.
Con
la información que he descrito se puede realizar la impresión de
cualquier documento que se genere a través de un programa realizado
en Java.
A
pesar que con la información anterior se puede imprimir el
documento, existen ocasiones donde se desea controlar algunas
propiedades de la impresión, sobre todo sino se desea desplegar la
ventana de propiedades de la impresora, para revisar esta información
se presenta el siguiente código.
import
java.io.*;
import
java.awt.print.*;
import
java.awt.print.PrinterJob;
import
java.awt.print.PageFormat;
class Imprimir{
static public
void main(String []args){
PrinterJob
job = PrinterJob.getPrinterJob();
PageFormat pf
= job.defaultPage();
Paper paper =
new Paper();
paper.setSize(612.0,832.0);
double margin
= 10;
paper.setImageableArea(margin,
margin, paper.getWidth() – margin, paper.getHeight() – margin);
pf.setPaper(paper);
pf.setOrientation(PageFormat.LANDSCAPE);
job.setPrintable(new
ObjetoDeImpresion(), pf);
job.setJobName(“nombre_de_impresion”);
try{
job.print();
}catch(PrinterException
e){
System.out.println(e);
}
}
}
La
primera sentencia nueva que aparece es PageFormat
pf = job.defaultPage()
que permite crear un objeto del tipo PageFormat el cual permitirá
ingresar algunas de las propiedades de la impresión.
Luego
se debe crear el objeto paper utilizando la sentencia Paper
paper = new Paper(),
esto permite asignar el tamaño de la hoja y el margen.
Después
se define el tamaño de la hoja utilizando la sentencia
paper.setSize(612.0,832.0)
donde 612.0 representa el ancho de la hoja y 832.0 indica el alto de
la hoja.
El
siguiente paso es definir el tamaño de margen, para esto se utiliza
la sentencia double
margin = 10,
con este valor se puede definir los margenes del documento de
impresión utilizando la sentencia paper.setImageableArea(margin,
margin, paper.getWidth() - margin, paper.getHeight() - margin),
donde el primer margen representa la coordenada x, el segundo margen
representa la coordenada y, luego se debe indicar el ancho desde la
coordenada x y por último se indica el alto del documento desde la
coordenada y.
Ahora
que se han establecido los valores de la pagina se debe asignar los
valores al objeto PageFormat utilizando la sentencia
pf.setPaper(paper).
También
es necesario definir la orientación de la impresión, para esto se
utiliza la sentencia pf.setOrientation(PageFormat.LANDSCAPE)
que permite una orientación horizontal. Los otros valores que existen para la orientación de la página son PORTRAIT
que realiza una orientación vertical de la hoja y REVERSE_LANDSCAPE
que orienta la hoja de modo horizontal invertido.
La
sentencia siguiente permite asignar el objeto que se desea imprimir y
el formato de la hoja que se desea imprimir utilizando la siguiente línea de código job.setPrintable(new
ObjetoDeImpresion(), pf).
Finalmente
se puede asignar el nombre a la impresión a través del código
job.setJobName(“nombre_de_impresion”).
Referencias:
"Gracias,
por compartir tus conocimientos"