Fórum Relatórios JasperReports #511070
18/02/2015
0
Criei uma classe para gerar relatórios com o JasperReport. Só que no exemplo que usei como base tem algumas classes que estão em desuso. Uma eu consegui alterar, mas a JRExporterParameter não. Vocês saberiam alterar para a forma que está sendo utilizada agora? Segue abaixo o código da classe:
public class RelatorioUtil {
public static final int RELATORIO_PDF = 1;
public static final int RELATORIO_EXCEL = 2;
public static final int RELATORIO_HTML = 3;
public static final int RELATORIO_PLANILHA_OPEN_OFFICE = 4;
public StreamedContent geraRelatorio(HashMap parametrosRelatorio, String nomeRelatorioJasper, String nomeRelatorioSaida, int tipoRelatorio) throws UtilException {
StreamedContent arquivoRetorno = null;
try {
FacesContext context = FacesContext.getCurrentInstance();
Connection conexao = this.getConexao();
String caminhoRelatorio = context.getExternalContext().getRealPath("relatorios");
String caminhoArquivoJasper = caminhoRelatorio + File.separator + nomeRelatorioJasper + ".jasper";
String caminhoArquivoRelatorio = null;
JasperReport relatorioJasper;
relatorioJasper = (JasperReport) JRLoader.loadObject(getClass().getClassLoader().getResourceAsStream(caminhoArquivoJasper));
JasperPrint impressoraJasper = JasperFillManager.fillReport(relatorioJasper, parametrosRelatorio, conexao);
Exporter tipoArquivoExportado = null;
String extensaoArquivoExportado = "";
File arquivoGerado = null;
switch (tipoRelatorio) {
case RelatorioUtil.RELATORIO_PDF :
tipoArquivoExportado = new JRPdfExporter();
extensaoArquivoExportado = "pdf";
break;
case RelatorioUtil.RELATORIO_HTML :
tipoArquivoExportado = new HtmlExporter();
extensaoArquivoExportado = "html";
break;
case RelatorioUtil.RELATORIO_EXCEL :
tipoArquivoExportado = new JRXlsExporter();
extensaoArquivoExportado = "xls";
break;
case RelatorioUtil.RELATORIO_PLANILHA_OPEN_OFFICE :
tipoArquivoExportado = new JROdtExporter();
extensaoArquivoExportado = "ods";
break;
default :
tipoArquivoExportado = new JRPdfExporter();
extensaoArquivoExportado = "pdf";
break;
}
caminhoArquivoRelatorio = caminhoRelatorio + File.separator + nomeRelatorioSaida + "." + extensaoArquivoExportado;
arquivoGerado = new java.io.File(caminhoArquivoRelatorio);
tipoArquivoExportado.setParameter(JRExporterParameter.JASPER_PRINT, impressoraJasper);
tipoArquivoExportado.setParameter(JRExporterParameter.OUTPUT_FILE_NAME, arquivoGerado);
tipoArquivoExportado.exportReport();
arquivoGerado.deleteOnExit();
InputStream conteudoRelatorio = new FileInputStream(arquivoGerado);
arquivoRetorno = new DefaultStreamedContent(conteudoRelatorio, "application/" + extensaoArquivoExportado, nomeRelatorioSaida + "." + extensaoArquivoExportado);
} catch (JRException e) {
throw new UtilException("Não foi possível gerar o relatório.", e);
} catch (FileNotFoundException e) {
throw new UtilException("Arquivo do relatório não encontrado.", e);
}
return arquivoRetorno;
}
private Connection getConexao() throws UtilException {
java.sql.Connection conexao = null;
try {
Context initContext = new InitialContext();
Context envContext = (Context) initContext.lookup("java:/comp/env/");
javax.sql.DataSource ds = (javax.sql.DataSource) envContext.lookup("jdbc/segurosdb");
conexao = (java.sql.Connection) ds.getConnection();
} catch (NamingException e) {
throw new UtilException("Não foi possível encontrar o nome da conexão do banco.", e);
} catch (SQLException e) {
throw new UtilException("Ocorreu um erro de SQL,", e);
}
return conexao;
}
}
Obrigada.
Sgrandini
Curtir tópico
+ 0Posts
18/02/2015
Ronaldo Lanhellas
Gostei + 0
20/02/2015
Sgrandini
O Netbeans informa que a classe JRExporterParameter está obsoleta. Não sei se isso causará algum problema à aplicação. setParameter, JRExporterParameter.JASPER_PRINT e JRExporterParameter.OUTPUT_FILE_NAME aparecem riscados nas duas linhas abaixo:
tipoArquivoExportado.setParameter(JRExporterParameter.JASPER_PRINT, impressoraJasper); tipoArquivoExportado.setParameter(JRExporterParameter.OUTPUT_FILE_NAME, arquivoGerado);
Não sei como substituir para o que está sendo usado agora.
Gostei + 0
21/02/2015
Ronaldo Lanhellas
1 - Ignorar o deprecated e continuar usando.
2 - Fazer um downgrade da versão do seu jasper.
3 - User o JasperReportsContext, que é a nova forma de fazer o que você citou, veja:
LocalJasperReportsContext ctx = new LocalJasperReportsContext(DefaultJasperReportsContext.getInstance()); ctx.setClassLoader(getClass().getClassLoader()); ctx.setFileResolver(resolver); JasperReport jasperReport = (JasperReport) JRLoader.loadObject(jasperfile); JasperFillManager fillmgr = JasperFillManager.getInstance(ctx); JasperExportManager exmgr = JasperExportManager.getInstance(ctx);
Gostei + 0
21/02/2015
Ronaldo Lanhellas
1 - Ignorar o deprecated e continuar usando.
2 - Fazer um downgrade da versão do seu jasper.
3 - User o JasperReportsContext, que é a nova forma de fazer o que você citou, veja:
LocalJasperReportsContext ctx = new LocalJasperReportsContext(DefaultJasperReportsContext.getInstance()); ctx.setClassLoader(getClass().getClassLoader()); ctx.setFileResolver(resolver); JasperReport jasperReport = (JasperReport) JRLoader.loadObject(jasperfile); JasperFillManager fillmgr = JasperFillManager.getInstance(ctx); JasperExportManager exmgr = JasperExportManager.getInstance(ctx);
Gostei + 0
21/02/2015
Ronaldo Lanhellas
1 - Ignorar o deprecated e continuar usando.
2 - Fazer um downgrade da versão do seu jasper.
3 - User o JasperReportsContext, que é a nova forma de fazer o que você citou, veja:
LocalJasperReportsContext ctx = new LocalJasperReportsContext(DefaultJasperReportsContext.getInstance()); ctx.setClassLoader(getClass().getClassLoader()); ctx.setFileResolver(resolver); JasperReport jasperReport = (JasperReport) JRLoader.loadObject(jasperfile); JasperFillManager fillmgr = JasperFillManager.getInstance(ctx); JasperExportManager exmgr = JasperExportManager.getInstance(ctx);
Gostei + 0
Clique aqui para fazer login e interagir na Comunidade :)