Olá!
Estou usando o iReport 4.0.2 para gerar relatórios e exportar o documento gerado em arquivos DOCX (diretamente sem o visualisador do relatório).
Neste relátorio, existem 3 consultas sql.
Uma no relatório principal, que faz um count de dois valores. que se encontra no column header
E duas em dois subrelatorios que estão em arquivos separados e que usam a configuração do primeiro como caminho. que contém apenas a banda details.
//chamada do relatório principal de um dos subrelatorios
$P{SUBREPORT_DIR} + "ReportV3-Sub1.jasper"
as consultas funcionam muito bem (passando os dados de uma conexão mysql pelo proprio iReport) usando “Database JDBC Connection”
e como em outro relatorio (em que eu tive que usar o “JRBeanCollectionDataSource”) faço a chamada do relatorio assim:
private void printReportV3(String nome){
ReportV3 report = new ReportV3();//classe que contém dados das definições do que será passado por parametro - getAno retorna "ano" como exemplo.
Map<String,String> param = new HashMap<String,String>();
param.put(report.getAno(), Utilitarios.getAno());
param.put(report.getDia(), Utilitarios.getDia());
param.put(report.getMes(), Utilitarios.getAno());
param.put(report.getMes(), Utilitarios.getMesNome());
param.put(report.getNome1(), nome);
param.put(report.getNome2(), LogIn.getSessao().getFuncionario().getNome());
JasperPrint reportToPrint = null;
try {
reportToPrint = JasperFillManager.fillReport(new FileInputStream("reportsmodel/"+ReportV3._NOME_ARQUIVO_MODELO), param);
//nome arquivo modelo = "ReportV3.jasper"
} catch (FileNotFoundException e) {
e.printStackTrace();
} catch (JRException e) {
e.printStackTrace();
}
JRDocxExporter exporter = new JRDocxExporter();
String nomeUsuario = ControleTelaLogIn.getSessao().getLogin();
File mk = new File("usuarios\\"+nome+"\\relatorios\\ReportV3\\");
mk.mkdirs();
String data = Utilitarios.getDia()+"_"+Utilitarios.getMes()+"_"+Utilitarios.getAno()+"-"+Utilitarios.getHora()+"_"+Utilitarios.getMinuto()+"_"+Utilitarios.getSegundo();
exporter.setParameter(JRDocxExporterParameter.OUTPUT_FILE, new File(mk.getPath()+"\\ReportV3-"+data+"-"+nome+".docx"));
exporter.setParameter(JRExporterParameter.JASPER_PRINT, reportToPrint);
try {
exporter.exportReport();
} catch (JRException e) {
e.printStackTrace();
}
try {
Desktop.getDesktop().open(new File(mk.getPath()+"\\ReportV3-"+data+"-"+nome+".docx"));
} catch (IOException e) {
e.printStackTrace();
}
então quando clico no botão de ação da tela que chama este método ele me devolve um arquivo docx em branco.
olhei dentro do relatório, mas as consultas funcionam lá - inclusive a exportação em docx - e nem mesmo os labels estaticos do relatório são impressos.
só estou achando estranho pois é quase o mesmo jeito de abrir um relatório usando um CollectionDataSource que eu já havia usado para abrir outro relatório.
mas neste caso apareceu esse problema.
o que pode estar acontecendo?