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
- JDK 17 ou mais recente
- A biblioteca JasperReports via Maven, por exemplo `net.sf.jasperreports:jasperreports`
- Um designer como o Jaspersoft Studio, para criar o modelo arrastando e soltando
Como funciona
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");
}
}
- `compileReport` transforma o `.jrxml` em um formato executável.
- `fillReport` combina o modelo com os dados.
- `exportReportToPdfFile` grava o PDF.
Erros comuns
- **Nome do campo diferente do getter:** os nomes precisam ser exatamente iguais.
- **Fontes com acentos ou tailandês não aparecem:** escolha no modelo uma fonte que suporte esses caracteres, e confirme que o sistema também a possui.
- **Codificação não definida:** garanta que o arquivo `.jrxml` e as strings do código usem UTF-8.
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.