Mira yo realize algo parecido para imprimir boletas
pero no implemente la interface Printable
Código Javascript
:
Ver originalpublic class ImprimirBoletas {
private Font fuente;
private PrintJob pj;
private Graphics pagina;
private int incX;
private int incY;
private Pedido boleta;
private Vector<ItemPedido> items;
public ImprimirBoletas(Pedido boleta) {
try {
incX = 40;
incY = 84;
this.boleta = boleta;
this.items = PedidoLogic.listaItemPedido(boleta);
fuente = new Font("Dialog", Font.PLAIN, 10);
pj = Toolkit.getDefaultToolkit().getPrintJob(new Frame(), "Impresión de Boleta", null);
} catch (Exception ex) {
ex.printStackTrace();
}
}
public void imprimir() {
Cliente cliente = null;
CNatural cnatural = null;
ItemPedido item = null;
Producto producto = null;
try {
pagina = pj.getGraphics();
pagina.setFont(fuente);
pagina.setColor(Color.black);
cliente = boleta.getCliente();
if (cliente.getTipoCliente() == TipoCliente.NATURAL) {
cnatural = (CNatural) cliente;
pagina.drawString(cnatural.getNombres(), incX, incY);
pagina.drawString(Utilitarios.getStringFecha(boleta.getFechaEmision()), incX + 110, incY);
pagina.drawString(cnatural.getDireccion(), incX, incY + 15);
pagina.drawString(cnatural.getDni(), incX, incY + 39);
}
//////////////////////
//Productos
int altura = 68;
double importe = .0, total = .0;
incX=20;
for (int i = 0; i < items.size(); i++) {
item = items.get(i);
producto = item.getProducto();
pagina.drawString(item.getCantidad() + "", incX, incY + altura);
pagina.drawString(producto.getNombre(), incX + 30, incY + altura);
importe = Utilitarios.getRedondeo(item.getPrecioUnitario() * item.getCantidad());
total += importe;
pagina.drawString(importe + "", incX + 140, incY + altura);
altura += 15;
}
incY += 100;
pagina.drawString(total + "", incX + 140, incY + 20);
pagina.dispose();
pj.end();
} catch (Exception e) {
JOptionPane.showMessageDialog(null, "Impresión cancelada...", "Aviso",
JOptionPane.WARNING_MESSAGE);
}
}
}
cada vez q quiero utilizar instancio la clase y llamamo el metodo imprimit