Gerar arquivo texto com JasperReports

[ad#texto]

Uma coisa bem pouco explorada e que geralmente levanta dúvidas nos desenvolvedores Java é como gerar um arquivo texto (TXT) via JasperReport formatado (geralmente ao tentar formar o arquivo o mesmo fica com várias linhas em branco), na verdade o processo é simples e bem similar ao de gerar um arquivo PDF, porém alguns parâmetros são essenciais para que o arquivo texto seja gerado corretamente.

Vamos então simular uma situação com um aplicativo Java gerando um arquivo texto formatado via JasperReport, o que iremos precisar:

  • Arquivo XML que será o repositório de dados;
  • Arquivo .JASPER que é o compilado do iReport (editor visual para utilizar em conjunto com o JasperReport).

Vamos então ao código-fonte:

//Definir o local de execução (corrigir moeda, vírgulas, caracteres, etc)
Locale locale = new Locale("pt", "BR");
parametros.put(JRParameter.REPORT_LOCALE, locale);

try {
 // Definilção do XML e captura dos dados contidos.
 JRXmlDataSource xmlDataSource = new JRXmlDataSource(arqXML, noItera);
 xmlDataSource.setLocale(locale);

 //Gera a área de impressão para o JasperReport
 JasperPrint jasperPrint = JasperFillManager.fillReport(arqJasper, parametros, xmlDataSource);

 //Captura informações sobre as dimensões do documento (iReport)
 Integer pageHeight = jasperPrint.getPageHeight();
 Integer pageWidth = jasperPrint.getPageWidth();

 //Instancia o objeto que irá gerar o arquivo Texto formatado.
 JRTextExporter jrTextExporter = new JRTextExporter();

 //Definições e parâmetros para gerar o arquivo Texto.
 jrTextExporter.setParameter(JRExporterParameter.JASPER_PRINT, jasperPrint);
 jrTextExporter.setParameter(JRTextExporterParameter.CHARACTER_HEIGHT, new Float(10));
 jrTextExporter.setParameter(JRTextExporterParameter.PAGE_HEIGHT, pageHeight);

 /*Aqui você pode inserir um caractere de quebra de página caso algum interpretador do seu arquivo texto nece   ssite*/
 jrTextExporter.setParameter(JRTextExporterParameter.BETWEEN_PAGES_TEXT, "\f");
 jrTextExporter.setParameter(JRExporterParameter.OUTPUT_FILE_NAME, “meuarquivo.txt”);

 /*Aqui está o segredo, fazendo a divisão da largura da página do iReport com o número de colunas do relatóri   o teremos o número correto de pixels para definir a largura dos caracteres*/
 jrTextExporter.setParameter(JRTextExporterParameter.CHARACTER_WIDTH, new Float(pageWidth / new Float (colunas)));

 //Exporta de fato o arquivo TXT
 jrTextExporter.exportReport();
} catch (JRException ex) {
 System.err.print("Erro: " + ex);
} catch (Exception e){
 System.err.print("Erro: " + e);
}

Geralmente vejo o pessoal errando na hora de definir a quantidade de pixels para a largura dos caracteres, fazendo a conta acima será possível gerar o relatório de forma perfeita, independente do tamanho da página e da quantidade de caracteres.

Petter Rafael

Desenvolvedor Web atua com as tecnologias Java e PHP apoiadas pelos bancos de dados Oracle e MySQL. Além dos ambientes de desenvolvimento acima possuiu amplo conhecimento em servidores Apache/Tomcat, Photoshop, Arte & Foto, Flash e mais uma dezena de ferramentas e tecnologias emergentes. Atualmente colabora com o Viablog escrevendo sobre programação e tecnologia.