Urge. Impresion en Java.
Miren necesito de manera urgente lograr imprimir, pero usando Print Job, Printable y dem谩s como he encontrado en muchos lugares, s贸lo hemos logrado imprimir pantallas, y pues eso no es lo que queremos, sin embargo necesitamos imprimir unos datos que est谩n en la pantalla y otros que no, pero los quieren con otro formato.
Supongo que esto puede ser con un Stream o flujo, ya tengo un flujo que escribe, pero ahora c贸mo abro el puerto? o c贸mo le digo que lo mande a la impresora.(Traten de ser muy claros, recuerden estamos a distancia, si cuentan con un ejemplo lo agradecer茅)
Supongo que esto puede ser con un Stream o flujo, ya tengo un flujo que escribe, pero ahora c贸mo abro el puerto? o c贸mo le digo que lo mande a la impresora.(Traten de ser muy claros, recuerden estamos a distancia, si cuentan con un ejemplo lo agradecer茅)
Yo he utilizado el PrintJob y Printable, como dices, y lo que hago es ir escribiendo en una Label y mandarla a imprimir.
Te paso el c贸digo de dos clases que utilizo, la que manda a imprimir y la que contiene lo que se quiere imprimir (la label). Me fijo ahora que la Impresora hereda de Panel, pero no se porque, posiblemente no haga falta, pero como yo tambi茅n me tuve que pelear con todo esto de la impresi贸n, no hablo muy seguor. Espero que te sirva de ejemplo. Un saludo.
import java.awt.*;
import java.awt.event.*;
import java.awt.print.*;
public class Impresora extends Panel {
public Impresora() {
setBackground(Color.white);
}
public static void imprimirObjeto(Object o) {
PrinterJob printJob = PrinterJob.getPrinterJob();
printJob.setPrintable((Printable)o);
try {
if (printJob.printDialog()) {
printJob.setJobName("Expedientes");
printJob.print();
}
}
catch(Exception e2) {
e2.printStackTrace();
}
}
}
// y la clase que hereda de Label (esta imprime un cuadro con ciertos datos, aqui tienes que mandar a imprimir lo que necesites:
import java.awt.*;
import java.awt.event.*;
import java.awt.print.*;
public class FichaExpediente extends Label implements Printable{
private int x;
private int y;
private int ancho;
private int alto;
private static Expediente expediente;
private static Cliente cliente;
public FichaExpediente(Expediente exp, Cliente c) {
expediente = exp;
cliente = c;
this.setAlignment(Label.CENTER);
}
public void paint(Graphics g) {
Font f = Font.getFont("Courier");
g.setFont(f);
g.setColor(Color.black);
System.out.println(x + "," + y + "," + ancho + "," + alto);
x = 5;
y = 5;
ancho = 425;
alto = 210;
g.drawRect(x,y,ancho,alto);
x = x + 20;
sumar();
g.drawString(" ",x,y);
sumar();
g.drawString("Nº Exp: " + formatString(Integer.toString(expediente.getNumeroExpediente()),40) + "Entrada : " + expediente.getFechaSistema(), x, y);
linea(g);
g.drawString("Cliente: " + cliente.getNombre(),x,y);
linea(g);
g.drawString("Asunto: " + expediente.getAsunto(),x,y);
linea(g);
g.drawString("Observaciones: " + cliente.getObservaciones(),x,y);
linea(g);
g.drawString("Persona de Contacto: " + cliente.getPersonaContacto(),x,y);
linea(g);
g.drawString("Tel茅fono: " + formatString(cliente.getTlf1(),50) + "Fax: " + cliente.getFax(),x,y);
linea(g);
g.drawString("Tlf 2: " + formatString(cliente.getTlf2(),20) + "Tlf 3: " + formatString(cliente.getTlf3(),20) + "Tlf 4: "+ cliente.getTlf4(),x,y);
}
public int print(Graphics g, PageFormat pf, int pi) throws PrinterException{
if (pi >= 1) {
return (Printable.NO_SUCH_PAGE);
}
Graphics2D g2 = (Graphics2D)g;
g2.translate(pf.getImageableX(),pf.getImageableY());
paint(g2);
return (Printable.PAGE_EXISTS);
}
public static void imprimirExpediente(Expediente exp, Cliente c) {
Impresora.imprimirObjeto(new FichaExpediente(exp,c));
}
private void sumar() {
y = y + 10;
}
private String formatString(String s, int n) {
if (s == null) {
s = "";
}
while (s.length() < n) {
s = s + " ";
}
return s;
}
private void linea(Graphics g) {
sumar();
g.drawLine(x - 20,y,ancho+(x-20),y);
sumar();
g.drawString(" ",x,y);
sumar();
}
}
A ver si te sirve.
Te paso el c贸digo de dos clases que utilizo, la que manda a imprimir y la que contiene lo que se quiere imprimir (la label). Me fijo ahora que la Impresora hereda de Panel, pero no se porque, posiblemente no haga falta, pero como yo tambi茅n me tuve que pelear con todo esto de la impresi贸n, no hablo muy seguor. Espero que te sirva de ejemplo. Un saludo.
import java.awt.*;
import java.awt.event.*;
import java.awt.print.*;
public class Impresora extends Panel {
public Impresora() {
setBackground(Color.white);
}
public static void imprimirObjeto(Object o) {
PrinterJob printJob = PrinterJob.getPrinterJob();
printJob.setPrintable((Printable)o);
try {
if (printJob.printDialog()) {
printJob.setJobName("Expedientes");
printJob.print();
}
}
catch(Exception e2) {
e2.printStackTrace();
}
}
}
// y la clase que hereda de Label (esta imprime un cuadro con ciertos datos, aqui tienes que mandar a imprimir lo que necesites:
import java.awt.*;
import java.awt.event.*;
import java.awt.print.*;
public class FichaExpediente extends Label implements Printable{
private int x;
private int y;
private int ancho;
private int alto;
private static Expediente expediente;
private static Cliente cliente;
public FichaExpediente(Expediente exp, Cliente c) {
expediente = exp;
cliente = c;
this.setAlignment(Label.CENTER);
}
public void paint(Graphics g) {
Font f = Font.getFont("Courier");
g.setFont(f);
g.setColor(Color.black);
System.out.println(x + "," + y + "," + ancho + "," + alto);
x = 5;
y = 5;
ancho = 425;
alto = 210;
g.drawRect(x,y,ancho,alto);
x = x + 20;
sumar();
g.drawString(" ",x,y);
sumar();
g.drawString("Nº Exp: " + formatString(Integer.toString(expediente.getNumeroExpediente()),40) + "Entrada : " + expediente.getFechaSistema(), x, y);
linea(g);
g.drawString("Cliente: " + cliente.getNombre(),x,y);
linea(g);
g.drawString("Asunto: " + expediente.getAsunto(),x,y);
linea(g);
g.drawString("Observaciones: " + cliente.getObservaciones(),x,y);
linea(g);
g.drawString("Persona de Contacto: " + cliente.getPersonaContacto(),x,y);
linea(g);
g.drawString("Tel茅fono: " + formatString(cliente.getTlf1(),50) + "Fax: " + cliente.getFax(),x,y);
linea(g);
g.drawString("Tlf 2: " + formatString(cliente.getTlf2(),20) + "Tlf 3: " + formatString(cliente.getTlf3(),20) + "Tlf 4: "+ cliente.getTlf4(),x,y);
}
public int print(Graphics g, PageFormat pf, int pi) throws PrinterException{
if (pi >= 1) {
return (Printable.NO_SUCH_PAGE);
}
Graphics2D g2 = (Graphics2D)g;
g2.translate(pf.getImageableX(),pf.getImageableY());
paint(g2);
return (Printable.PAGE_EXISTS);
}
public static void imprimirExpediente(Expediente exp, Cliente c) {
Impresora.imprimirObjeto(new FichaExpediente(exp,c));
}
private void sumar() {
y = y + 10;
}
private String formatString(String s, int n) {
if (s == null) {
s = "";
}
while (s.length() < n) {
s = s + " ";
}
return s;
}
private void linea(Graphics g) {
sumar();
g.drawLine(x - 20,y,ancho+(x-20),y);
sumar();
g.drawString(" ",x,y);
sumar();
}
}
A ver si te sirve.
