Imprimir uma lista em uma mesma etiqueta na zebra

Estou com o seguinte problema, tenho uma lista com 5 registros e preciso imprimir todos na mesma etiqueta zebra, o problema que está sendo impresso 1 registro por etiqueta.
Abaixo o fonte:

public static void imprimirEtiquetaAcessorio(List<ExpedicaoEmbarqueAgrupadoBean> lista, String ip) throws Exception {        
        
        try {
                
            for (ExpedicaoEmbarqueAgrupadoBean xxx : lista) {
                
                ZebraLabel zebraLabel = new ZebraLabel(800, 1200);

                zebraLabel.setDefaultZebraFont(ZebraFont.ZEBRA_ZERO);
                
                zebraLabel.addElement(new ZebraText(25, 65, "COD./VALIDADE", 8));
                zebraLabel.addElement(new ZebraText(300, 65, "DESCRICAO/REGISTRO", 8)); 
                zebraLabel.addElement(new ZebraText(25, 120, "" + xxx.getProduto(), 7));
                zebraLabel.addElement(new ZebraText(150, 120, "" + xxx.getDesc(), 7));

                zebraLabel.addElement(new ZebraText(55, 150, "" + xxx.getValidade(), 7));
                zebraLabel.addElement(new ZebraText(200, 150, "" + xxx.getAnvisa(), 7));
                
                zebraLabel.getZplCode();
                ZebraUtils.printZpl(zebraLabel, ip, 9100);
                
            }
            
            
        } catch (Exception ex) {
            Logger.getLogger(ImpressaoZebraUtil.class.getName()).log(Level.SEVERE, null, ex);
            throw new RuntimeException("Erro no imprimirEtiquetaAcessorio em ImpressaoZebraUtil  " + ex);
        }

    }

Não é só você chamar o printZpl fora do laço?

Ja tentei, não deu.

Posta o código com sua alteração.

public static void imprimirEtiquetaAcessorio(List<ExpedicaoEmbarqueAgrupadoBean> lista, int quantCx, String ip) throws Exception {        
        
        try {
            
            ZebraLabel zebraLabel = null;
                
            for (ExpedicaoEmbarqueAgrupadoBean xxx : lista) {
                
                zebraLabel = new ZebraLabel(800, 1200);

                zebraLabel.setDefaultZebraFont(ZebraFont.ZEBRA_ZERO);
                
                zebraLabel.addElement(new ZebraText(25, 65, "COD./VALIDADE", 8));
                zebraLabel.addElement(new ZebraText(300, 65, "DESCRICAO/REGISTRO", 8)); 
                zebraLabel.addElement(new ZebraText(25, 120, "" + xxx.getProduto(), 7));
                zebraLabel.addElement(new ZebraText(150, 120, "" + xxx.getDesc(), 7));

                zebraLabel.addElement(new ZebraText(55, 150, "" + xxx.getValidade(), 7));
                zebraLabel.addElement(new ZebraText(200, 150, "" + xxx.getAnvisa(), 7));
                
            }
            zebraLabel.getZplCode();
            ZebraUtils.printZpl(zebraLabel, ip, 9100);
            
            
        } catch (Exception ex) {
            Logger.getLogger(ImpressaoZebraUtil.class.getName()).log(Level.SEVERE, null, ex);
            throw new RuntimeException("Erro no imprimirEtiquetaAcessorio em ImpressaoZebraUtil  " + ex);
        }

    }

Acredito que o problema é que a cada iteração você está “matando” o zebraLabel anterior e criando um novo, dessa forma você só vai imprimir o último zebraLabel criado.

Provavelmente você tem que ter um único zebraLabel e adicionar os elements dos itens que deseja imprimir, dessa forma, ao final você terá um único zebraLabel com todas as informações.

1 curtida

O problema é que está setado as posições para impressão, e acaba imprimindo em uma nova etiqueta na mesma posição. Não encontrei uma posição “default” para não precisar informa-las manualmente.

Ué, mas é só você substituir esses valores fixos por variáveis e ir incrementando as posições a cada iteração do laço.
No seu caso, provavelmente é só a posição Y que vai precisar de variáveis.

Eu pensei nisso, mas quando acabou a atiqueta ele não iniciou em uma nova. E tem mais uma questão que me deparei agora é com a impressão do cabecalho, eu tenho que imprimir um cabecalho + 5 registros por etiqueta, automaticamente no 6º item eu deveria criar um cabecalho antes e assim até o final.

E qual o problema disso?

Consegui resolver, creio que não seja a melhor prática, mas funcionou.
Abaixo o fonte.

public static void imprimirEtiquetaZebraAcessorio(List<ExpedicaoEmbarqueAgrupadoBean> lista, String ip) throws Exception {

        try {
            ZebraLabel zebraLabel = null;
            ZebraLabel zebraLabel2 = null;
            ZebraLabel zebraLabel3 = null;
            ZebraLabel zebraLabel4 = null;
            ZebraLabel zebraLabel5 = null;

            zebraLabel = new ZebraLabel();
            zebraLabel2 = new ZebraLabel();
            zebraLabel3 = new ZebraLabel();
            zebraLabel4 = new ZebraLabel();
            zebraLabel5 = new ZebraLabel();

            zebraLabel.setDefaultZebraFont(ZebraFont.ZEBRA_ZERO);
            zebraLabel2.setDefaultZebraFont(ZebraFont.ZEBRA_ZERO);
            zebraLabel3.setDefaultZebraFont(ZebraFont.ZEBRA_ZERO);
            zebraLabel4.setDefaultZebraFont(ZebraFont.ZEBRA_ZERO);
            zebraLabel5.setDefaultZebraFont(ZebraFont.ZEBRA_ZERO);
            
            //for (ExpedicaoEmbarqueAgrupadoBean xxx : lista) {
            for (int i = 0, j=130, k=160; i < lista.size(); i++, j+=60, k+=60) {
                zebraLabel.addElement(new ZebraText(25, 65, "COD./VALIDADE", 8));
                zebraLabel.addElement(new ZebraText(300, 65, "DESCRICAO/REGISTRO", 8));
                zebraLabel.addElement(new ZebraText(25, j, lista.get(i).getProduto() + "    " + lista.get(i).getDesc(), 7));
                zebraLabel.addElement(new ZebraText(55, k, lista.get(i).getValidade() + "    " + lista.get(i).getAnvisa(), 7));
                
                if(i == 5){    
                    j=130;k=160;
                    zebraLabel2.addElement(new ZebraText(25, 65, "COD./VALIDADE", 8));
                    zebraLabel2.addElement(new ZebraText(300, 65, "DESCRICAO/REGISTRO", 8));
                    zebraLabel2.addElement(new ZebraText(25, j, lista.get(i).getProduto() + "    " + lista.get(i).getDesc(), 7));
                    zebraLabel2.addElement(new ZebraText(55, k, lista.get(i).getValidade() + "    " + lista.get(i).getAnvisa(), 7));
                    
                }
                if(i == 10){
                    j=130;k=160;
                    zebraLabel3.addElement(new ZebraText(25, 65, "COD./VALIDADE", 8));
                    zebraLabel4.addElement(new ZebraText(300, 65, "DESCRICAO/REGISTRO", 8));
                    zebraLabel3.addElement(new ZebraText(25, j, lista.get(i).getProduto() + "    " + lista.get(i).getDesc(), 7));
                    zebraLabel3.addElement(new ZebraText(55, k, lista.get(i).getValidade() + "    " + lista.get(i).getAnvisa(), 7));
                }
                
                if(i == 15){
                    j=130;k=160;
                    zebraLabel4.addElement(new ZebraText(25, 65, "COD./VALIDADE", 8));
                    zebraLabel4.addElement(new ZebraText(300, 65, "DESCRICAO/REGISTRO", 8));
                    zebraLabel4.addElement(new ZebraText(25, j, lista.get(i).getProduto() + "    " + lista.get(i).getDesc(), 7));
                    zebraLabel4.addElement(new ZebraText(55, k, lista.get(i).getValidade() + "    " + lista.get(i).getAnvisa(), 7));
                }
                if(i == 20){
                    j=130;k=160;
                    zebraLabel5.addElement(new ZebraText(25, 65, "COD./VALIDADE", 8));
                    zebraLabel5.addElement(new ZebraText(300, 65, "DESCRICAO/REGISTRO", 8));
                    zebraLabel5.addElement(new ZebraText(25, j, lista.get(i).getProduto() + "    " + lista.get(i).getDesc(), 7));
                    zebraLabel5.addElement(new ZebraText(55, k, lista.get(i).getValidade() + "    " + lista.get(i).getAnvisa(), 7));
                }
               
                //zebraLabel.getZplCode();
            }
            ZebraUtils.printZpl(zebraLabel, ip, 9100);
            ZebraUtils.printZpl(zebraLabel2, ip, 9100);
            ZebraUtils.printZpl(zebraLabel3, ip, 9100);
            ZebraUtils.printZpl(zebraLabel4, ip, 9100);
            ZebraUtils.printZpl(zebraLabel5, ip, 9100);

        } catch (ZebraPrintException ex) {
            Logger.getLogger(ImpressaoZebraUtil.class.getName()).log(Level.SEVERE, null, ex);
            throw new RuntimeException("Erro no imprimirEtiquetaZebraAcessorio em ImpressaoZebraUtil  " + ex);
        }

    }