Criando Relatórios com JasperReports

Criando Relatórios com JasperReports

JasperReports é uma biblioteca Java para desenhar e gerar relatórios. O layout do relatório fica em um modelo `.jrxml`, os dados são preenchidos a partir de um banco de dados ou de objetos Java, e o resultado é exportado para PDF, Excel ou HTML. Este artigo mostra a estrutura do modelo e o código que monta o relatório a partir de uma lista de linhas.

Nota de teste: o computador usado para escrever este artigo não tinha a biblioteca JasperReports, então o código não foi executado aqui. Adicione a dependência conforme a documentação do projeto e teste você mesmo.

O que você precisa

Como funciona

Diagrama: o modelo .jrxml é combinado com os dados e gera um PDF
Diagrama: o modelo .jrxml é combinado com os dados e gera um PDF

Passo 1: desenhe o modelo

O arquivo `.jrxml` é um XML que declara os campos de dados, o cabeçalho, as linhas de detalhe e o rodapé. Exemplo de campos:

<field name="name" class="java.lang.String"/>
<field name="score" class="java.lang.Integer"/>

Na faixa `<detail>`, adicione `textField`s que referenciam `$F{name}` e `$F{score}` para mostrar os valores de cada linha.

Passo 2: prepare os dados e gere o relatório

import net.sf.jasperreports.engine.*;
import net.sf.jasperreports.engine.data.JRBeanCollectionDataSource;
import java.util.List;
import java.util.Map;

public class ReportDemo {
    public static class Row {
        private final String name;
        private final int score;
        public Row(String name, int score) { this.name = name; this.score = score; }
        public String getName() { return name; }
        public int getScore() { return score; }
    }

    public static void main(String[] args) throws Exception {
        List<Row> rows = List.of(new Row("Budi", 85), new Row("Siti", 72));
        JasperReport report = JasperCompileManager.compileReport("scores.jrxml");
        JasperPrint print = JasperFillManager.fillReport(report, Map.of(), new JRBeanCollectionDataSource(rows));
        JasperExportManager.exportReportToPdfFile(print, "scores.pdf");
    }
}

Erros comuns

Próximos passos

Adicione grupos ao relatório, por exemplo totais por disciplina, ou passe o nome da escola como parâmetro.

Resumo

O JasperReports separa o layout dos dados. O modelo define a aparência, o código preenche os dados, e o resultado é exportado no formato de que você precisa. Assim, o layout do relatório pode ser alterado sem mexer no código principal.