O modo como acabei pensando em fazer apos ler varias matérias sobre isto, é criar um sub-relatório e este, ser construido pelo JasperDesign como o Furutani demonstra na pagina dele: http://www.furutani.com.br/2010/06/relatorio-dinamico-com-jasperdesign/
Eu entendi perfeitamente como eu montaria o Jasper. Eu faria 2 fors para ler minha matriz e iria criando campo por campo da matriz, razoavelmente simples, porém nao tenho ideia de como eu implementaria isto no meu relatório ‘main’. Segue parte do codigo que uso para gerar o Jasper:
List<DadosRelatorioAtestadoMatricula> listaRegistros = new ArrayList<DadosRelatorioAtestadoMatricula>();
listaRegistros.add(dadosR);
// passa a lista para a classe JRBeanCollectionDataSource que será a lida pelo Jasper
JRBeanCollectionDataSource relatorioDataSource = new JRBeanCollectionDataSource(listaRegistros);
// abrindo o arquivo Jasper
String arqJasper = "AtestadoMatriculaGrad.jasper";
//if(graduacao) { arqJasper = "AtestadoMatriculaGraduacao.jasper"; }
String caminho = this.getClass().getResource("").getPath().toString() + arqJasper;
JasperPrint rel = JasperFillManager.fillReport(caminho, parameters, relatorioDataSource);
ByteArrayOutputStream byteReport = new ByteArrayOutputStream();
JRPdfExporter exporter = new JRPdfExporter();
exporter.setParameter(JRExporterParameter.JASPER_PRINT, rel);
exporter.setParameter(JRExporterParameter.OUTPUT_STREAM, byteReport);
exporter.exportReport();
byte[] bytes = byteReport.toByteArray();
this.getResponse().setContentType("application/pdf");
this.getResponse().setContentLength(bytes.length);
ServletOutputStream outputStream = this.getResponse().getOutputStream();
outputStream.write(bytes, 0, bytes.length);
Tenho de assumir que como um bom estagiario, nao entendo totalmente o que está sendo feito neste final, logo nao tenho ideias de como gerar um sub-jasper dentro deste jasper. Nao sei o melhor modo de fazer isto, e preciso descobrir. Se nao souberem a resposta , qualquer pequenaa luz é muito apreciada.
[]´s Gabriel