Estoy intentando imprimir varias etiquetas de una sola vez. La idea es crear una instancia de la clase Book, añadir todas las etiquetas (una por página) e imprimir despues el resultado. A priori fácil. El problema es que la impresión resultante es un documento en blanco (si no uso la clase Book e imprimo las etiquetas una a una funciona sin problemas):
Por un lado la clase de las etiquetas:
public class CEtiqueta implements Printable { String val_pre; String bar_cod; String nom_art; int veces; //Constructor para pasar las variables public CEtiqueta(String a, String b, String c, int d){ val_pre = a; nom_art = b; bar_cod = c; veces = d; //numero de etiquetas }
public int print(Graphics g, PageFormat pf, int pageIndex) { if (pageIndex < veces) { //Genero el código de barras JBarcodeBean barcode; barcode = new JBarcodeBean(); barcode.setCodeType(new Interleaved25()); barcode.setCode(bar_cod); barcode.setCheckDigit(true); BufferedImage codigo = barcode.draw(new BufferedImage(100, 20, BufferedImage.TYPE_INT_RGB)); //Genero la etiqueta Graphics2D g2 = (Graphics2D) g; g2.setFont(new Font("Serif", Font.PLAIN, 11)); g2.setPaint(Color.black); g2.drawString(nom_art, 10, 10); g2.drawString(val_pre, 50, 20); g2.drawImage(codigo, 10, 50, barcode); return PAGE_EXISTS; } else { return NO_SUCH_PAGE; } }
Por otro lado imprimo las etiquetas:
PrinterJob pj = PrinterJob.getPrinterJob(); Book paginas = new Book(); //inserto primera etiqueta paginas.append( new CEtiqueta("Feo", "linea 1", "254125487", 1), pj.getPageFormat(null) ); // inserto la segunda etiqueta paginas.append( new CEtiqueta("Feo2", "linea 2", "254125488", 1), pj.getPageFormat(null) ); //asigno Book a PrinterJob pj.setPageable(paginas); //finalmente imprimo solicitando la impresora if ( pj.printDialog() ){ try { pj.print(); } catch (PrinterException e) { System.out.println(e); } }
Si no utilizo la clase Book me imprime la o las etiquetas sin problema, pero tal y como está el código, me imprime una hoja en blanco.
Hola a todos!
Estoy intentando imprimir varias etiquetas de una sola vez. La idea es crear una instancia de la clase Book, añadir todas las etiquetas (una por página) e imprimir despues el resultado. A priori fácil. El problema es que la impresión resultante es un documento en blanco (si no uso la clase Book e imprimo las etiquetas una a una funciona sin problemas):
Por un lado la clase de las etiquetas:
public class CEtiqueta implements Printable {
String val_pre;
String bar_cod;
String nom_art;
int veces;
//Constructor para pasar las variables
public CEtiqueta(String a, String b, String c, int d){
val_pre = a;
nom_art = b;
bar_cod = c;
veces = d; //numero de etiquetas
}
public int print(Graphics g, PageFormat pf, int pageIndex) {
if (pageIndex < veces) {
//Genero el código de barras
JBarcodeBean barcode;
barcode = new JBarcodeBean();
barcode.setCodeType(new Interleaved25());
barcode.setCode(bar_cod);
barcode.setCheckDigit(true);
BufferedImage codigo = barcode.draw(new BufferedImage(100, 20, BufferedImage.TYPE_INT_RGB));
//Genero la etiqueta
Graphics2D g2 = (Graphics2D) g;
g2.setFont(new Font("Serif", Font.PLAIN, 11));
g2.setPaint(Color.black);
g2.drawString(nom_art, 10, 10);
g2.drawString(val_pre, 50, 20);
g2.drawImage(codigo, 10, 50, barcode);
return PAGE_EXISTS;
} else {
return NO_SUCH_PAGE;
}
}
Por otro lado imprimo las etiquetas:
PrinterJob pj = PrinterJob.getPrinterJob();
Book paginas = new Book();
//inserto primera etiqueta
paginas.append( new CEtiqueta("Feo", "linea 1", "254125487", 1), pj.getPageFormat(null) );
// inserto la segunda etiqueta
paginas.append( new CEtiqueta("Feo2", "linea 2", "254125488", 1), pj.getPageFormat(null) );
//asigno Book a PrinterJob
pj.setPageable(paginas);
//finalmente imprimo solicitando la impresora
if ( pj.printDialog() ){
try {
pj.print();
} catch (PrinterException e) {
System.out.println(e);
}
}
Si no utilizo la clase Book me imprime la o las etiquetas sin problema, pero tal y como está el código, me imprime una hoja en blanco.
¿Alguna idea?
Mil gracias!.