package br.com.ralatorios;
import br.com.conexao.ConnectionFactory;
import java.io.File;
import java.io.Serializable;
import java.sql.Connection;
import java.util.HashMap;
import net.sf.jasperreports.engine.JRExporter;
import net.sf.jasperreports.engine.JRExporterParameter;
import net.sf.jasperreports.engine.JasperFillManager;
import net.sf.jasperreports.engine.JasperPrint;
import net.sf.jasperreports.engine.JasperReport;
import net.sf.jasperreports.engine.export.JRPdfExporter;
import net.sf.jasperreports.engine.export.JRXlsExporter;
import net.sf.jasperreports.engine.util.JRLoader;
/**
*
* @author Administrator
*/
public class RelatorioService implements Serializable {
private static final long serialVersionUID = 1L;
private static String FOLDER_RELATORIOS = "/br/com/ralatorios";
private String caminhoArquivoRelatorio = null;
private JRExporter exporter = null;
private File arquivoGerado = null;
Connection connection;
public String gerarRelatorio(HashMap parametrosRelatorio,
String nomeRelatorioJasper, String tipoExportar) throws Exception {
String caminhoRelatorio = this.getClass().getResource(FOLDER_RELATORIOS).getPath();
/* caminho completo até o relatório compilado indicado */
String caminhoArquivosJasper = caminhoRelatorio + File.separator+nomeRelatorioJasper+".jasper";
/* Faz o carregamento do relatório */
JasperReport relatorioJasper = (JasperReport) JRLoader.loadObjectFromFile(caminhoArquivosJasper);
/* Carrega o arquivo */
JasperPrint impressoraJasper = JasperFillManager.fillReport(
relatorioJasper, parametrosRelatorio, this.connection = new ConnectionFactory().getConnection());
if (tipoExportar.equalsIgnoreCase("pdf")) {
exporter = new JRPdfExporter();
} else if (tipoExportar.equalsIgnoreCase("xls")) {
exporter = new JRXlsExporter();
}
/* Caminho relatorio exportado */
caminhoArquivoRelatorio = caminhoRelatorio + File.separator
+ nomeRelatorioJasper + "." + tipoExportar;
/* Criar novo arquivos exportado */
arquivoGerado = new File(caminhoArquivoRelatorio);
/* Prepara a impressão */
exporter.setParameter(JRExporterParameter.JASPER_PRINT,
impressoraJasper);
exporter.setParameter(JRExporterParameter.OUTPUT_FILE, arquivoGerado);
/* Excuta a exportação */
exporter.exportReport();
return caminhoArquivoRelatorio;
}
}
No meu Botão de Imprimir:
try{
//Lista com os parametros para o relátorio
HashMap params = new HashMap<>();
//Passândo parâmetros e convertendo o dados pra ser compativel
params.put("data_mapVei", Data_inicial.getText());
//Invocando a geração do relatório
String file = new RelatorioService().gerarRelatorio(params,"RelMapa","pdf");
//Exibindo o relatório na tela para o usuário
Desktop.getDesktop().open(new File(file));
}catch(Exception e){
System.out.println("ERRO: "+e.getMessage());
}
A exceção FileNotFound (arquivo não encontrado) indica que o arquivo não pode ser acessado, no local indicado.
Me pergunto por que você teria um arquivo em program files…
Cara, se você não entendeu a ideia do fórum, é a de que você posta algo e quando alguém tiver tempo, disposição, conhecimento e vontade, responde. Aguarde a sua vez.
Eu sei que a ideia é essa…não precisa me explicar, acredito que duas cabeça pensa mais que uma, por isso postei “alguém para ajudar”. Mas enfim…A Ideia era de esconder a pasta, eu tenho um outro relatório e ele funciona, mas esse em específico não funciona. Vou retirar da pasta program files…
Cara, o problema não é estar na program files, o problema é que o caminho não foi identificado pelo java.
Pode ser por não estar lá, estar faltando algum caractere no path passado ou mesmo permissão de acesso (leitura) dentro desse diretório.
Se quer esconder, por que não coloca dentro do jar, que facilita muito mais?
Provavelmente, era permissão.
Agora, não faz sentido referenciar um arquivo, dentro de um jar, pelo caminho absoluto. O ideal é pegtar caminho relativo, fica muito mais fácil.
Dei um system.ou.print executando pelo NetBeans e ele me dá esse caminho
caminho: /C:/Users/Administrator/Documents/Sistema_Controle/build/classes/br/com/relatorios\RelMapa.pdf
Coloca o código onde você chama o relatório.
Esse segundo, do nb, me parece o caminho onde ele irá salvar o arquivo pronto, não onde ele busca o relatório (pois consta o .pdf no final)
private static final String FOLDER_RELATORIOS = "/br/com/relatorios";
private String caminhoArquivoRelatorio = null;
private JRExporter exporter = null;
private File arquivoGerado = null;
Connection connection;
public String gerarRelatorio(HashMap parametrosRelatorio,
String nomeRelatorioJasper, String tipoExportar) throws Exception {
String caminhoRelatorio = this.getClass().getResource(FOLDER_RELATORIOS).getPath();
/* caminho completo até o relatório compilado indicado */
String caminhoArquivosJasper = caminhoRelatorio + File.separator+nomeRelatorioJasper+".jasper";
/* Faz o carregamento do relatório */
JasperReport relatorioJasper = (JasperReport) JRLoader.loadObjectFromFile(caminhoArquivosJasper);
/* Carrega o arquivo */
JasperPrint impressoraJasper = JasperFillManager.fillReport(
relatorioJasper, parametrosRelatorio, this.connection = new ConnectionFactory().getConnection());
if (tipoExportar.equalsIgnoreCase("pdf")) {
exporter = new JRPdfExporter();
} else if (tipoExportar.equalsIgnoreCase("xls")) {
exporter = new JRXlsExporter();
}
/* Caminho relatorio exportado */
caminhoArquivoRelatorio = caminhoRelatorio + File.separator + nomeRelatorioJasper + "." + tipoExportar;
/* Criar novo arquivos exportado */
arquivoGerado = new File(caminhoArquivoRelatorio);
System.out.println("caminho: "+caminhoArquivoRelatorio);
/* Prepara a impressão */
exporter.setParameter(JRExporterParameter.JASPER_PRINT,impressoraJasper);
exporter.setParameter(JRExporterParameter.OUTPUT_FILE, arquivoGerado);
/* Excuta a exportação */
exporter.exportReport();
return caminhoArquivoRelatorio;
}
E aqui é a ação do meu botão imprimir:
try{
//Lista com os parametros para o relátorio
HashMap params = new HashMap<>();
//Passândo parâmetros e convertendo o dados pra ser compativel - Parâmetros são gerados no relatório.jasper
params.put("data_mapVei", Data_inicial_devolvido.getText());
params.put("data_mapChe", Data_Final_devolvido.getText());
params.put("placa_map", txt_placa_devolvido.getText());
//Invocando a geração do relatório
String file = new RelatorioService().gerarRelatorio(params,"RelMapa","pdf");
//Exibindo o relatório na tela para o usuário
Desktop.getDesktop().open(new File(file));