Problema ao exportar relatorio JasperReports (JRXlsExporter)

Fala galera,
Seguinte, tenho varios relatorios que são visualizados em um sistema web e que neste sistema o usuario pode escolher em exportar o relatorio tanto para PDF quanto EXCEL. O problema é que na versão EXCEL preciso que os dados sejam exibidos em formato tabular, ou seja, as linhas com os valores(relatorios financeiros) tem que ficar sequenciais para uma facil manipulação pelo usuario, sem que seja exibida a cada quebra de pagina o TITLE, PAGE HEADER, PAGE FOOTER e tal. Resumindo, na exportação para PDF quero apresentar normalmente o relatorio, com todos os titulos e tal, ja na exportação para excel quero o titulo apenas da primeira pagina e apos apenas os valores do relatorio(valores da banda DETAIL). Uma solução seria criar dois modelos diferentes, porem não ficaria legal pois o usuario saberia q existem dois relatorios e pelo fato de ser muito custoso ter q modificar os varios relatorios ja prontos. Alguem sabe como fazer isso? uso para exportação o objeto JRXlsExporter da propria API do JasperReports. ex:

//apenas um exemplo basico de como uso a API

import net.sf.jasperreports.engine.JRException;
import net.sf.jasperreports.engine.JRExpression;
import net.sf.jasperreports.engine.JRParameter;
import net.sf.jasperreports.engine.JasperCompileManager;
import net.sf.jasperreports.engine.JasperExportManager;
import net.sf.jasperreports.engine.JasperFillManager;
import net.sf.jasperreports.engine.JasperPrint;
import net.sf.jasperreports.engine.JasperReport;
import net.sf.jasperreports.engine.export.JRXlsExporter;
import net.sf.jasperreports.engine.export.JRXlsExporterParameter;

JasperReport report = JasperCompileManager.compileReport(“relatorios/saldo__.jrxml”);
JasperPrint print = JasperFillManager.fillReport(report, null,c);

//exportando para pdf
JasperExportManager.exportReportToPdfFile(print, “relatorios/pdf/saldo/saldo.pdf”);

//exportando para excel
JRXlsExporter exporter = new JRXlsExporter();
exporter.setParameter(JRXlsExporterParameter.JASPER_PRINT, print);
exporter.setParameter(JRXlsExporterParameter.OUTPUT_FILE_NAME, “relatorios/pdf/saldo/saldo.xls”);
exporter.exportReport();

Minha esperança é que o JRXlsExporter tenha algum metodo onde eu posso ‘setar’ algumas configurações do modelo do relatorio, como por exemplo dizer q é para gerar a banda TITLE apenas na primeira pagina e não nas demais. Se eu consegui manipular a exibição das bandas na exportação para excel meu problema esta resolvido. Obrigado.

O arquivo “saldo__.jrxml” é um XML, antes de compilar ele você pode editar ele…

Obrigado camarada, mais na verdade o relatorio ele vem do banco de dados(array de byte) do .jasper. Ou seja, ao ‘subir’ o relatorio no portal web ele ja vai compilado(subo apenas o .jasper dop relatorio) e apartir dai ele é salvo no banco de dados. Essa ja é a estrutura do sistema web aqui, ele não compila o relatorio pra economizar tempo e tal. Esse codigo foi um exemplo similar ao realmente usado.

Vlw

AAhh bom, eu também prefiro usar o compilado já, mas assim não sei se tem como fazer mano =/
Acho que a solução vai ser ou criar 2 relatórios, ou usar o “Print When Expression” dos teu componentes do relatório…

Eu estou usando o “Print When Expression” sim. e estou passando valores ‘dinamicos’ como propriedades para usar na expressao do “Print When Expression”.
ex:

JasperReport report = JasperCompileManager.compileReport(“relatorios/teste66.jrxml”);
report.setProperty(“repetir”, “true”); //neste ponto cria uma propriedade que sera alterada de acordo com a opcao de exportacao do usuario
JasperPrint print = JasperFillManager.fillReport(report, null,c); // ‘c’ é a conexao com o banco

Neste exemplo eu criei a propriedade com o nome de “repetir” e dentro do meu relatorio eu uso a mesma na banda que eu quero ocultar ou nao.

exemplo dentro da banda do relatorio:

$V{PAGE_NUMBER} == 1 ? true : new Boolean($P{JASPER_REPORT}.getProperty(“repetir”))

ou seja, na primeira pagina a banda sempre ira ser apresentada, ja nas demais ele imprimi ou nao, dependo da selecao do usuario. No meu caso, qnd for para exportar para pdf eu coloco a propriedade como ‘true’ e quando for para EXCEL eu coloco como ‘false’ e os dados da ‘detail’ sao exibidos perfeitamente em sequencia(sem quebras, sem cabecalhos entre os valores). O problema desta solucao é que na exportacao para excel tenho q gerar o “JasperPrint” novamente, causando um processamento maior.
O ‘JasperPrint’ tambem tem um metodo ‘setProperty’ e estou tentando usar ele para diminuir o processamento, o problema eh q nao consigo usar o valor setado nele dentro do meu relatorio.

vlw