* @param boleto
*
*/
public InputStream transform(Boleto... boletos) {
NumberFormatter formatter = new NumberFormatter(new DecimalFormat(
"#,##0.00"));
// gera template com o fundo do boleto
URL imagemTitulo = BoletoTransformer.class
.getResource("/br/com/caelum/stella/boleto/img/template.png");
boolean firstPage = true;
for (Boleto boleto : boletos) {
if (!firstPage) {
writer.newPage();
}
try {
writer.writeImage(0, 55, imageFor(imagemTitulo), 514.22f,
385.109f);
writer.writeImage(0, 805 - 486, imageFor(boleto.getBanco()
.getImage()), 100, 23);
} catch (IOException e) {
throw new GeracaoBoletoException(
"Erro na leitura das imagens do boleto", e);
}
for (int i = 0; i < boleto.getDescricoes().size(); i++) {
writer.writeBold(5, 805 - 70 - i * 15, boleto.getDescricoes()
.get(i));
}
writer.write(50, LINHA1, boleto.getEmissor().getCedente());
writer.write(5, LINHA2, boleto.getSacado().getNome());
writer.write(230, LINHA2, formatDate(boleto.getDatas()
.getVencimento()));
try {
writer.write(400, LINHA2, formatter.valueToString(boleto
.getValorBoleto().doubleValue()));
} catch (NumberFormatException e) {
throw new CriacaoBoletoException(
"Erro na formatação do valor do boleto", e);
} catch (ParseException e) {
throw new CriacaoBoletoException(
"Erro na formatação do valor do boleto", e);
}
writer.write(5, LINHA3, boleto.getEmissor().getAgenciaFormatado()
+ "-"
+ boleto.getEmissor().getDvAgencia()
+ " / "
+ boleto.getBanco().getContaCorrenteDoEmissorFormatado(
boleto.getEmissor()) + "-"
+ boleto.getEmissor().getDvContaCorrente());
writer.write(146, LINHA3, boleto.getBanco()
.getNossoNumeroDoEmissorFormatado(boleto.getEmissor()));
writer.writeBold(125, LINHA4, boleto.getBanco()
.getNumeroFormatado());
writer.writeBold(175, LINHA4, boleto.getBanco()
.geraLinhaDigitavelPara(boleto));
for (int i = 0; i < boleto.getLocaisDePagamento().size(); i++) {
writer.write(5, LINHA5 - (i - 1) * 10, boleto
.getLocaisDePagamento().get(i));
}
writer.write(425, LINHA5, formatDate(boleto.getDatas()
.getVencimento()));
writer.write(5, LINHA6, boleto.getEmissor().getCedente());
writer.write(420, LINHA6, boleto.getEmissor().getAgenciaFormatado()
+ " - "
+ boleto.getEmissor().getDvAgencia()
+ " / "
+ boleto.getBanco().getContaCorrenteDoEmissorFormatado(
boleto.getEmissor()) + "-"
+ boleto.getEmissor().getDvContaCorrente());
writer.write(5, LINHA7,
formatDate(boleto.getDatas().getDocumento()));
writer.write(70, LINHA7,
!boleto.getNoDocumento().equals("") ? boleto
.getNoDocumentoFormatado() : boleto.getBanco()
.getNossoNumeroDoEmissorFormatado(
boleto.getEmissor()));
writer.write(180, LINHA7, boleto.getEspecieDocumento());
writer.write(250, LINHA7, boleto.getAceite() ? "S" : "N");
writer.write(300, LINHA7, formatDate(boleto.getDatas()
.getProcessamento()));
writer.write(410, LINHA7, boleto.getEmissor().getCarteira()
+ " / "
+ boleto.getBanco().getNossoNumeroDoEmissorFormatado(
boleto.getEmissor()));
writer.write(122, LINHA8, boleto.getBanco()
.getCarteiraDoEmissorFormatado(boleto.getEmissor()));
writer.write(190, LINHA8, boleto.getEspecieMoeda());
try {
writer.write(430, LINHA8, formatter.valueToString(boleto
.getValorBoleto().doubleValue()));
} catch (NumberFormatException e) {
throw new CriacaoBoletoException(
"Erro na formatação do valor do boleto", e);
} catch (ParseException e) {