Geração Passagem onibus

2 respostas
CristianPalmaSola10

Galera eu estou tentanto gerar passagens para onibus, carrego um arquivo de template seto todos os dados nos campos e pego os bytes e jogo para um ByteArrayOutputStream, as 3 vias da passagem porem quando gero um arquivo com esse objeto do ByteArrayOutputStream, sai so a primeira via da passagem alguem ai sabe porque, vou postar o codigo

package com.estagio.passagem;

import com.estagio.entidade.Passagem;
import com.estagio.utils.ObjectUtils;
import com.lowagie.text.DocumentException;
import com.lowagie.text.pdf.AcroFields;
import com.lowagie.text.pdf.PdfReader;
import com.lowagie.text.pdf.PdfStamper;
import java.io.ByteArrayOutputStream;
import java.io.File;
import java.io.IOException;
import java.text.SimpleDateFormat;

/**
 * @author Cristian Urbainski
 * @since 03/07/2012
 */
public class GeracaoPassagem {
    
    /**
     * Variaveis da privadas da classe
     */
    private static final String TXT_LINHA = "txtLinha";
    private static final String TXT_NUMERO = "txtNumero";
    private static final String TXT_DE = "txtDe";
    private static final String TXT_PARA = "txtPara";
    private static final String TXT_DATAVIAGEM = "txtDataViagem";
    private static final String TXT_HORARIO = "txtHorario";
    private static final String TXT_SEGURO = "txtSeguro";
    private static final String TXT_PEDAGIO = "txtPedagio";
    private static final String TXT_TAXAEMBARQUE = "txtTaxaEmbarque";
    private static final String TXT_TARIFA = "txtTarifa";
    private static final String TXT_OBSERVACAO = "txtObservacao";
    private static final String TXT_MOTIVO = "txtMotivo";
    private static final String TXT_VALORPASSAGEM = "txtValorPassagem";
    private static final String TXT_VIA = "txtVia";
    
    public static ByteArrayOutputStream  gerarPassagem(Passagem passagem) throws Exception
    {
        int numeroDeVias = 3;
        int numeroViasCriadas = 0;
        
        ByteArrayOutputStream listaPassagem = new ByteArrayOutputStream();
        
        try {
        
            while(numeroViasCriadas < numeroDeVias)
            {

                //TODO trocar caminho de carregamento do arquivo de pdf
                File f = new File("E:/Desenvolvimento/projetoEstagio/web/template/layout_passagem.pdf");
                PdfReader reader = new PdfReader(f.getCanonicalPath());

                ByteArrayOutputStream out = new ByteArrayOutputStream();
                
                PdfStamper stamper = new PdfStamper(reader, out);
                
                AcroFields form = stamper.getAcroFields();
                
                setFieldsInPassagem(form, passagem, (numeroViasCriadas + 1) + "ª Via");
                
                reader.consolidateNamedDestinations();
                stamper.setFormFlattening(Boolean.TRUE);
                stamper.setRotateContents(Boolean.TRUE);
                reader.removeFields();
                stamper.setFullCompression();
                reader.eliminateSharedStreams();
                out.flush();
                out.close();
                reader.close();
                stamper.close();

                listaPassagem.write(out.toByteArray());
                
                numeroViasCriadas++;
            }
            
            return listaPassagem;
            
        } catch (NullPointerException e) {
            System.out.println("Alguma propriedade do objeto do tipo passagem esta nula, por favor verficar.");
            e.printStackTrace();
            throw e;
        }
        catch (IOException ex) {
            System.out.println("Não foi possivel localizar o arquivo de template da passagem, por favor verificar.");
            ex.printStackTrace();
            throw ex;
        }
        catch (DocumentException doc) {
            System.out.println("Problema com documento, por favor verificar.");
            doc.printStackTrace();
            throw doc;
        }
        
    }

    private static void setFieldsInPassagem(AcroFields form, Passagem passagem, String via) throws IOException, DocumentException
    {
        form.setField(TXT_NUMERO, passagem.getIdPassagem().toString());
        form.setField(TXT_DATAVIAGEM, new SimpleDateFormat("dd/MM/yyyy").format(passagem.getDsHoraSaida()));
        form.setField(TXT_DE, passagem.getMunicipioDe().getDsMunicipio());
        form.setField(TXT_HORARIO, new SimpleDateFormat("HH:mm").format(passagem.getDsHoraSaida()));
        form.setField(TXT_LINHA, passagem.getRota().getDsRota());
        form.setField(TXT_MOTIVO, passagem.getDsMotivo());
        form.setField(TXT_OBSERVACAO, passagem.getDsObservacao());
        form.setField(TXT_PARA, passagem.getMunicipioPara().getDsMunicipio());
        form.setField(TXT_PEDAGIO, passagem.getNrPedagio().toString());
        form.setField(TXT_SEGURO, passagem.getNrSeguro().toString());
        form.setField(TXT_TARIFA, passagem.getNrTarifa().toString());
        form.setField(TXT_TAXAEMBARQUE, passagem.getNrTaxaEmbarque().toString());
        form.setField(TXT_VALORPASSAGEM, passagem.getNrValor().toString());
        form.setField(TXT_VIA, via);
    }

}

2 Respostas

C

Acho que voce poderia tentar retornar uma lista ou um array de ByteArrayOutputStream no seu metodo:
List ou ByteArrayOutputStream[] e cada passagem voce coloca em uma posicao da lista/array.

C

Se quiser passar mais de um objeto tem que ser no list, passando apenas o bean sempre te retornará 1…

Abraços

Criado 11 de julho de 2012
Ultima resposta 12 de jul. de 2012
Respostas 2
Participantes 3