Todo sistema Web gera algum tipo de relatrio para seus clientes.
Normalmente estes relatrios so gerados no formato PDF devido sua
facilidade na hora de imprim-los. No mundo Java temos algumas
opes de ferramentas para gerao destes relatrios, mas sem dvida a
mais conhecida e utilizada no mercado o JasperReports e sua
ferramenta grfica para desenhar relatrios, o iReport.
Embora seja comum associarmos o iReport como a tecnologia
responsvel por gerar os relatrios no mundo Java, a verdade que ela
apenas a ferramenta grfica que te ajudar a construir e desenharos
relatrios, ela o que chamamos de report designer. Quem de fato gera
e exporta os relatrios para determinado formato o JasperReports, na
qual conhecido como report engine.
String jasper =
JasperCompileManager.compileReportToFile(jrxml);
System.out.println(jasper); // alunos.jasper
parametros.put("curso_id", 2020);
Connection conexao = // obtem uma conexo jdbc...
JasperPrint print =
JasperFillManager.fillReport("alunos.jasper", parametros,
conexao);
Repare que o arquivo PDF final ser gerado na sada que indicamos,
nesse caso num FileOutputStream com o nome alunos.pdf.
Para facilitar a compreenso, vamos juntar todo o cdigo em um bloco
um pouco mais organizado, como a seguir:
String jrxml = "alunos.jrxml";
// preenche relatorio
JasperPrint print = JasperFillManager.fillReport(jasper,
parametros, conexao);
exporter.exportReport();
Com essa nova API voc tem a possibilidade de fazer ajustes finos no
PDF de maneira mais simples, como ajustar fontes, layout, verso do
formato exportado, criptografia, permisses, idioma e muito mais.
Caso queira o relatrio em outro formato, como Excel, basta mudar o
cdigo responsvel pela exportao do arquivo.
try {
// preenche relatorio
JasperPrint print =
JasperFillManager.fillReport(jasper, parametros,
this.conexao);
exporter.exportReport();
} catch (Exception e) {
throw new RuntimeException("Erro ao gerar
relatrio", e);
}
}
}
Bem melhor, no ?
se levarmos esse cdigo para dentro de uma Servlet teramos algo bem
prximo disso:
@WebServlet("/relatorios/alunos")
public class RelatorioDeAlunosServlet extends HttpServlet {
// prepara parmetros
Map<String, Object> parametros = new HashMap<>();
parametros.put("curso",
request.getParameter("curso_id"));
// gera relatrio
GeradorDeRelatorios gerador = new
GeradorDeRelatorios(conexao);
gerador.geraPdf(jrxml, parametros,
response.getOutpuStream());
Perceba que o cdigo est simples por questes de didtica, porm sua
responsabilidade garantir que a conexo ser fechada num bloco trycatch-finally, assim voc evita problemas de vazamento de conexo na
sua aplicao.
E as libs?
No adianta mostrar s o cdigo, n? Precisamos saber quais as
bibliotecas (JARs) necessrios para rodar nosso cdigo com
JasperReports. Basicamente voc precisar dos seguintes JARs dentro do
seu projeto:
o
o
o
o
o
o
o
o
jasperreports-5.x.x.jar
iText-2.x.x.jar (necessria para gerar o PDF em si)
jfreechart-1.x.x.jar (necessria se voc quiser gerar grficos e
charts)
jcommon-1.x.x.jar (necessria se voc quiser gerar grficos e
charts)
commons-beanutils-1.x.x.jar
commons-collections-3.x.x.jar
commons-digester-2.x.jar
commons-logging-1.x.jar