Pessoal,
Gostaria de contar com a ajuda de vocês.
Preciso gerar um boleto em PDF com Jasper e Java (WEB), e já estou quase no término da minha tarefa, porém estou encontrando problemas com a geração de códigos de barra.
Vi que tem um tipo que é muito utilizado que é o “Interleaved 2 of 5”, porém estou um pouco perdido.
Já achei diversos exemplos na Internet, mas eles eram ou de aplicações stand-alone ou de geração de imagem em disco, o que não acho legal.
Achei uma classe na internet que trabalha com um jar chamado barbecue-1.1.jar, porém ele gera a imagem em disco. Acredito que pode haver um problema caso duas usuários consigam chamar a geração do PDF de Boleto ao mesmo mili-segundo. Quase impossível, mas pode ocorrer. Quero evitar esse tipo de problema.
Um amigo meu que trabalha comigo utilizou essa solução de geração de imagem pois na versão 0.4 do iReport o código de barras não vinha com o QUIET ZONE que a FENABAN obriga ter.
Estou usando no momento a versão 1.2.0 do iReport, e acredito que isto já esteja corrigido. O problema é que eu não consigo nem exibir o PDF. Adicionei o objeto de código de barras no relatório e em suas configurações coloco ele pegando o valor de um atributo do meu VO que representa a CCB.
Esse atributo é do tipo String e possui a linah digitável que eu pego de um serviço CICS, porém sem espaços em branco e pontos.
[color=red]Barcode expression: $F{codigoBarra}[/color]
Configurei o código de barras como Int2of5 no atributo “Type” da aba “Barcode”.
No meu lib do WEB-INF possuo os seguintes .jar do jasper:
. jasperreports-1.2.0.jar
. itext-1.02b.jar
. barbecue-1.1.jar
A geração do meu boleto em PDF fiz da seguinte maneira:
[color=brown]
private void gerarBoleto(CcbVO ccb, HttpServletResponse response) throws GeracaoPDFBoletoException {
byte[] arquivoPdf = null;
List beans = new ArrayList();
beans.add(ccb);
JRDataSource jrds = new JRBeanArrayDataSource(beans.toArray());
//Geração de código de barra
//this.gerarCodigoBarra(ccb.getCodigoBarra());
String nomeArquivo =
"boleto_"
+ Mascara.getValorFormatado(String.valueOf(ccb.getCdSucursal()), "###")
+ "-"
+ Mascara.getValorFormatado(String.valueOf(ccb.getNrProposta()), "##########")
+ "-"
+ Mascara.getValorFormatado(String.valueOf(ccb.getNrItem()), "####")
+ ".pdf";
try {
InputStream stream = getServlet().getServletContext().getResourceAsStream(ApplicationResources.VALUE_PATH_RELATORIO_BOLETO_PDF);
JasperReport relatorio = (JasperReport) JRLoader.loadObject(stream);
JasperPrint impressao = JasperFillManager.fillReport(relatorio, new HashMap(), jrds);
arquivoPdf = JasperExportManager.exportReportToPdf(impressao);
} catch (JRException jre) {
throw new GeracaoPDFBoletoException(jre);
}
response.reset();
response.setContentType("application/x-msdownload");
response.setHeader("Content-Disposition", "attachment; filename=" + nomeArquivo);
response.setContentLength(arquivoPdf.length);
try {
response.getOutputStream().write(arquivoPdf);
response.getOutputStream().flush();
response.getOutputStream().close();
} catch (IOException ioe) {
throw new GeracaoPDFBoletoException(ioe);
}
}
[/color]
O erro que estou recebendo ao chamar a geração do PDF é:
[color=blue]
net.sf.jasperreports.engine.fill.JRExpressionEvalException: Error evaluating expression :
Source text : it.businesslogic.ireport.barcode.BcImage.getBarcodeImage(13,$F{codigoBarra},false,false,null,0,0) [/color]
Alguém poderia me ajudar?
Abração galera.
Ricardo