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);
}
}
package com.estagio.teste;
import com.estagio.entidade.*;
import com.estagio.inicializa.InicializaApp;
import com.estagio.passagem.GeracaoPassagem;
import java.io.ByteArrayOutputStream;
import java.io.File;
import java.io.FileOutputStream;
import java.math.BigDecimal;
import java.math.BigInteger;
import java.util.Date;
import org.hibernate.criterion.MatchMode;
import org.hibernate.criterion.Restrictions;
import urbainskidao.UrbainskiDAO;
/**
* @author Cristian Urbainski
* @since 09/07/2012
*/
public class TestGeneratingPassagem {
public static void main(String[] args) {
UrbainskiDAO dao = new UrbainskiDAO();
try {
InicializaApp.inicializa();
dao.beginTras();
Passagem p = new Passagem();
Municipio munDe = (Municipio) dao.getSessao().createCriteria(Municipio.class)
.add(Restrictions.ilike("dsMunicipio", "PALMA SOLA", MatchMode.EXACT))
.uniqueResult();
Municipio munP = (Municipio) dao.getSessao().createCriteria(Municipio.class)
.add(Restrictions.ilike("dsMunicipio", "FRANCISCO BELTRAO", MatchMode.EXACT))
.uniqueResult();
p.setMunicipioDe(munDe);
p.setMunicipioPara(munP);
p.setDia((Dia) dao.getSessao().createCriteria(Dia.class).setMaxResults(1).uniqueResult());
p.setDsMotivo("Trabalho");
p.setDsObservacao("");
p.setFuncionario((Funcionario) dao.getSessao().createCriteria(Funcionario.class).setMaxResults(1).uniqueResult());
p.setIdDia(p.getDia().getIdDia());
p.setIdFuncionario(p.getFuncionario().getIdFuncionario());
p.setIdMunicipioDe(p.getMunicipioDe().getIdMunicipio());
p.setIdMunicipioPara(p.getMunicipioPara().getIdMunicipio());
p.setIdPassagem(10);
p.setRota((Rota) dao.getSessao().createCriteria(Rota.class).setMaxResults(1).uniqueResult());
p.setIdRota(p.getRota().getIdRota());
p.setNrNumero(485);
p.setNrPedagio(new BigDecimal("1.6"));
p.setNrPoltrona(10);
p.setNrTarifa(new BigDecimal("2.3"));
p.setNrTaxaEmbarque(new BigDecimal("1.2"));
p.setNrSeguro(new BigDecimal("0.8"));
p.setNrValor(p.getNrPedagio().add(p.getNrTarifa()).add(p.getNrTaxaEmbarque()).add(p.getNrSeguro()));
p.setDsHoraSaida(new Date());
ByteArrayOutputStream out = GeracaoPassagem.gerarPassagem(p);
FileOutputStream outF = new FileOutputStream(new File("C:/Users/Cristian/Desktop/testePassagem.pdf"));
outF.write(out.toByteArray());
out.flush();
out.close();
outF.flush();
outF.close();
} catch (Exception e) {
e.printStackTrace();
}
}
}
Eu carrego tres vezes o pdf e jogo os bytes para dentro do mesmo ByteArrayOutputStream mas quando gravo o arquivo no disco e abro ele, ele gravou apenas a primeira passagem (1ª via ) e não as 3ª vias de passagens, alguem sabe aonde eu estou errando ?