packagebr.com.ralatorios;importbr.com.conexao.ConnectionFactory;importjava.io.File;importjava.io.Serializable;importjava.sql.Connection;importjava.util.HashMap;importnet.sf.jasperreports.engine.JRExporter;importnet.sf.jasperreports.engine.JRExporterParameter;importnet.sf.jasperreports.engine.JasperFillManager;importnet.sf.jasperreports.engine.JasperPrint;importnet.sf.jasperreports.engine.JasperReport;importnet.sf.jasperreports.engine.export.JRPdfExporter;importnet.sf.jasperreports.engine.export.JRXlsExporter;importnet.sf.jasperreports.engine.util.JRLoader;/** * * @author Administrator */publicclassRelatorioServiceimplementsSerializable{privatestaticfinallongserialVersionUID=1L;privatestaticStringFOLDER_RELATORIOS="/br/com/ralatorios";privateStringcaminhoArquivoRelatorio=null;privateJRExporterexporter=null;privateFilearquivoGerado=null;Connectionconnection;publicStringgerarRelatorio(HashMapparametrosRelatorio,StringnomeRelatorioJasper,StringtipoExportar)throwsException{StringcaminhoRelatorio=this.getClass().getResource(FOLDER_RELATORIOS).getPath();/* caminho completo até o relatório compilado indicado */StringcaminhoArquivosJasper=caminhoRelatorio+File.separator+nomeRelatorioJasper+".jasper";/* Faz o carregamento do relatório */JasperReportrelatorioJasper=(JasperReport)JRLoader.loadObjectFromFile(caminhoArquivosJasper);/* Carrega o arquivo */JasperPrintimpressoraJasper=JasperFillManager.fillReport(relatorioJasper,parametrosRelatorio,this.connection=newConnectionFactory().getConnection());if(tipoExportar.equalsIgnoreCase("pdf")){exporter=newJRPdfExporter();}elseif(tipoExportar.equalsIgnoreCase("xls")){exporter=newJRXlsExporter();}/* Caminho relatorio exportado */caminhoArquivoRelatorio=caminhoRelatorio+File.separator+nomeRelatorioJasper+"."+tipoExportar;/* Criar novo arquivos exportado */arquivoGerado=newFile(caminhoArquivoRelatorio);/* Prepara a impressão */exporter.setParameter(JRExporterParameter.JASPER_PRINT,impressoraJasper);exporter.setParameter(JRExporterParameter.OUTPUT_FILE,arquivoGerado);/* Excuta a exportação */exporter.exportReport();returncaminhoArquivoRelatorio;}}
No meu Botão de Imprimir:
try{//Lista com os parametros para o relátorioHashMapparams=newHashMap<>();//Passândo parâmetros e convertendo o dados pra ser compativelparams.put("data_mapVei",Data_inicial.getText());//Invocando a geração do relatório Stringfile=newRelatorioService().gerarRelatorio(params,"RelMapa","pdf");//Exibindo o relatório na tela para o usuárioDesktop.getDesktop().open(newFile(file));}catch(Exceptione){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.
E
Elivelton_Oliveira
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…
Agradeço a ajuda.
D
Solucao aceita
darlan_machado
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?
E
Elivelton_Oliveira
Ele já está dento de um jar.
É aqui onde faz busca pelo caminho onde o RelMap.jasper está…
Eu estou com o usuário adm da máquina.
StringcaminhoRelatorio=this.getClass().getResource(FOLDER_RELATORIOS).getPath();/* caminho completo até o relatório compilado indicado */StringcaminhoArquivosJasper=caminhoRelatorio+File.separator+nomeRelatorioJasper+".jasper";
E
Elivelton_Oliveira
Deu certo!
Retirei da pasta programas files e o relatório abriu.
Obrigado irmão.
D
darlan_machado1 like
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.
E
Elivelton_Oliveira
Realmente.
Vou fazer essa melhoria indicada.
Vlw mesmo.
E
Elivelton_Oliveira
darlan_machado
meu velho…depois de construído o projeto, no .jar, o relatório não gera, mas no netbeans ele funciona. Poderia me ajudar ? Obrigado!
D
darlan_machado
Executou pelo prompt, para ver se apresenta estouro de exceção ao rodar?
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
D
darlan_machado
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)
E
Elivelton_Oliveira
Essa é minha classe para gerar os meus relatórios
privatestaticfinalStringFOLDER_RELATORIOS="/br/com/relatorios";privateStringcaminhoArquivoRelatorio=null;privateJRExporterexporter=null;privateFilearquivoGerado=null;Connectionconnection;publicStringgerarRelatorio(HashMapparametrosRelatorio,StringnomeRelatorioJasper,StringtipoExportar)throwsException{StringcaminhoRelatorio=this.getClass().getResource(FOLDER_RELATORIOS).getPath();/* caminho completo até o relatório compilado indicado */StringcaminhoArquivosJasper=caminhoRelatorio+File.separator+nomeRelatorioJasper+".jasper";/* Faz o carregamento do relatório */JasperReportrelatorioJasper=(JasperReport)JRLoader.loadObjectFromFile(caminhoArquivosJasper);/* Carrega o arquivo */JasperPrintimpressoraJasper=JasperFillManager.fillReport(relatorioJasper,parametrosRelatorio,this.connection=newConnectionFactory().getConnection());if(tipoExportar.equalsIgnoreCase("pdf")){exporter=newJRPdfExporter();}elseif(tipoExportar.equalsIgnoreCase("xls")){exporter=newJRXlsExporter();}/* Caminho relatorio exportado */caminhoArquivoRelatorio=caminhoRelatorio+File.separator+nomeRelatorioJasper+"."+tipoExportar;/* Criar novo arquivos exportado */arquivoGerado=newFile(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();returncaminhoArquivoRelatorio;}
E aqui é a ação do meu botão imprimir:
try{//Lista com os parametros para o relátorioHashMapparams=newHashMap<>();
//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 Stringfile=newRelatorioService().gerarRelatorio(params,"RelMapa","pdf");//Exibindo o relatório na tela para o usuárioDesktop.getDesktop().open(newFile(file));
Como eu pensei, você está printando o caminho onde o relatório será criado.
Eu não sei se você digitou esta parte, mas…
Existe uma diferença no path definido na classe com o identificado no erro.
E
Elivelton_Oliveira
Fiz essa mudança onde estava escrito errado, porém, continuam da mesma forma. A questão do print era apenas para saber se o caminho estava correto, mas está.
Me tire uma dúvida, se fosse para mudar para abrir em .jasper, usando o a própria impressora JasperViwer, como que seria?? Pode dar um exemplo ?
E
Elivelton_Oliveira
Eu tenho um outro relatório que funciona dessa forma, sem exportar para PDF, e funciona com o .jar
D
darlan_machado
Além do código que você tem, você precisa instanciar um JasperViewer. Dá uma olhada
E
Elivelton_Oliveira
Estava dando uma olhada em alguns post, e vi aqui preciso colocar um caminho relativo e não absoluto.
Esse caminho me parece ser absoluto: /C:/Users/Administrator/Documents/Sistema_Controle/build/classes/br/com/relatorios\RelMapa.pdf
Lembro que você indicou para colocar relativo, será que esse não é o problema ?
E
Elivelton_Oliveira
Tenho pouca proximidade com java, por isso a dificuldade.
try{//Lista com os parametros para o relátorioHashMapparams=newHashMap<>();StringnomeRelatorioJasper=“RelMapa”;//Passândo parâmetros e convertendo o dados pra ser compativel - Parâmetros são gerados no relatório.jasperparams.put(“data_mapVei”,Data_inicial.getText());params.put(“data_mapChe”,Data_Final.getText());params.put(“placa_map”,txt_placa.getText());
//Invocando a geração do relatório Stringfile=newRelatorioService().gerarRelatorio(params,nomeRelatorioJasper);