Imprimir ticket com itens de uma venda

3 respostas
L

E ae galera…
To com um problema ao imprimir um ticket de uma venda. No caso criei o método impressao() que imprimi normalmente, tipo mostra o nome do cliente, valor da venda, data da venda,etc, mas não consigo listar todos os itens dessa venda no ticket, alguém tem alguma dica?

Abraço

@SuppressWarnings("FinalizeCalledExplicitly")
    private void impressao() {
        Frame f = new Frame("Imp");
        Toolkit tk = f.getToolkit();
        PrintJob pj = tk.getPrintJob(f, "Recibo", null);
        if (pj != null) {
            Graphics m = pj.getGraphics();
            m.drawString("     CNPJ: 00.000.000/0000-00", 0, 50);
            m.drawString("     Cliente: " + venda.getCliente().getNome(), 0, 120);

//         m.drawString("     " + venda.getItensVenda().size(), 0, 130);  Listar todos os itens da venda

            m.drawString(" Valor: " + new DecimalFormat("#,##0.00").format(venda.getValorTotal()), 0, 140);   
            m.dispose();
            m.finalize();
            pj.end();
            pj.finalize();
        }
        f.dispose();
 }

Classe Venda

public class Venda implements Serializable {

    @Id
    @GeneratedValue(strategy = GenerationType.IDENTITY)
    private Long idVenda;
    private Boolean finalizado;
    private Boolean cancelado;
    private Boolean pago;
    @Temporal(TemporalType.DATE)
    private Date dtVenda;
    private BigDecimal valorTotal;
    private BigDecimal descontoVenda;
    private BigDecimal valorAcrescimo;
    private BigDecimal quantidadeItens;
    private String observacao;
    @ManyToOne
    @JoinColumn(name = "idCliente")
    private Cliente cliente;
    @OneToMany(cascade = CascadeType.ALL, fetch = FetchType.LAZY, mappedBy = "venda", orphanRemoval = true, targetEntity = ItensVenda.class)
    List<ItensVenda> itensVenda = new ArrayList<ItensVenda>();

Classe ItensVenda

public class ItensVenda implements Serializable {

    @Id
    @GeneratedValue(strategy = GenerationType.IDENTITY)
    @Column(name = "IDITENSVENDA")
    private Long idVenda;
    @Column(name = "VALOR")
    private BigDecimal valor;
    @Column(name = "DESCONTO")
    private BigDecimal desconto;
    @Column(name = "QUANTIDADEITENS")
    private BigDecimal qtdItens;
    @Column(name = "QUANTIDADE")
    private BigDecimal quantidade;
    @ManyToOne
    @JoinColumn(name = "IDPRODUTO")
    private Produto produto;
    @ManyToOne
    @JoinColumn(name = "IDVENDA")
    private Venda venda;

3 Respostas

Y

Nunca usei o PrintJob, mas você não pode iterar o List itensVenda depois de inserir o valor?
Algo +/- assim:

m.drawString(" Valor: " + new DecimalFormat("#,##0.00").format(venda.getValorTotal()), 0, 140);
for(ItensVenda item : itensVenda) {
    m.drawString("Item: " + new DecimalFormat("#,##0.00").format(item.getValor()), 0, 140);
}

Outra coisa. Em relação ao nome da classe ItensVenda, não seria melhor mudar para ItemVenda e deixar o plural para o nome do List na classe Venda? Afinal, a ItensVenda armazena os dados de apenas um item.

[]'s
Daniel

L

Obrigado Yorgan, deu certo.

Mas agora estou com outro problema. Como eu tenho que definar as coordenadas da pagina, os itens estão ficando todos na mesma linha.
Então to tentando descobrir um jeito que ao adicionar os itens, eles fiquem um embaixo do outro, com coordenadas diferentes, tem alguma dica?

Abraço

@SuppressWarnings("FinalizeCalledExplicitly")
    private void imprimirTicket() {
        Frame f = new Frame("Impressora");
        Toolkit tk = f.getToolkit();
        PrintJob pj = tk.getPrintJob(f, "Recibo de Venda", null);
        if (pj != null) {
            Graphics g = pj.getGraphics();
            g.drawString("     CNPJ: 00.000.000/0000-00", 0, 50);
            g.drawString("     -----------------------------------------------------", 0, 70);
            g.drawString("     Data: " + new SimpleDateFormat("dd/MM/yyyy HH:mm:ss").format(venda.getDtVenda()), 0, 100);
            g.drawString("     ITEM CÒDIGO   DESCRIÇÂO   QTD  Vl UNIT(R$)", 0, 80);
            for (ItensVenda item : venda.getItensVenda()) {
                g.drawString("     " + (item.getProduto().getNome()), 0, 160);
                g.drawString("" + (item.getQuantidade()), 150, 160);
                g.drawString("" + new DecimalFormat("#,##0.00").format(item.getValor()), 220, 160);
            }
            g.drawString("     Valor Total: " + new DecimalFormat("#,##0.00").format(venda.getValorTotal()), 0, 190);
            g.drawString("     Cliente: " + venda.getCliente().getNome().toUpperCase(), 0, 210);
            g.drawString("     _______________________________________", 0, 220);      
            g.dispose();
            g.finalize();
            pj.end();
            pj.finalize();
        }
        f.dispose();
       
    }
Y

Ele não quebrou nenhuma linha?
Já tentou colocar \n no final da String?

Criado 19 de novembro de 2011
Ultima resposta 21 de nov. de 2011
Respostas 3
Participantes 2