Gerar pdf

Amigos, em minha aplicação swing utilizo o método abaixo para gerar um pdf. Dentro do eclipse ele funciona. Mas quando gero um .jar do programa ele deixa de funcionar.
Alguém sabe porque?

[code] public void gerarPdf(String report, Map<String, Object> params, String fileName) {

	try{
					
		//o arquivo deve ser o jrxml
		String path= "bin/br/gov/fazenda/visualizador/apresentacao/relatorios/meuRelatorio.jrxml";
		
		
		JREmptyDataSource emptyDataSource = new JREmptyDataSource();
		
		JasperDesign jdesign = JRXmlLoader.load(path);  
		JasperReport jreport = JasperCompileManager.compileReport(jdesign);  
		JasperPrint jprint = JasperFillManager.fillReport(jreport, params, emptyDataSource);

		JasperExportManager.exportReportToPdfFile(jprint, fileName);

	}catch (Exception e) {  
		e.printStackTrace();  
	} 

}[/code]

Acho que o problema está nesta linha:

String path= "bin/br/mil/eb/dgp/daprom/apresentacao/relatorios/meuRelatorio.jrxml";

Porém as soluções que encontrei aqui no fórum são para a WEB e estou usando swing.
Alguém me ajuda?

Talvez o problema seja que o .jars necessários não estão dentro do jar gerado para a sua aplicação.
Tenta gerar o .jar usando o pluging do Eclipse - fatjar, ele adiciona no jar a ser gerado todas as classes do classpath.

Um exemplo, se teu .jrxmlestivesse no diretório META-INF:

this.getClass().getResourceAsStream("/META-INF/meuRelatorio.jrxml");

Verifique dentro do arquivo jar, qual o caminho correto que teu relatório .jrxml ficou e substitui no código acima.

Acho que assim vai funcionar…

Fernando

bom dia,
Com fat-jar também não funciona.

this.getClass().getResourceAsStream("META-INF/meuRelatorio.jrxml");

Este código também nao funcionou, pois aí temos um inputString e não string. Só que pode ser uma pista, visto que o JRXmlLoader aceita um inputString como prâmetro. Aí, ele “parece” que localiza o arquivo, mas dá outro erro “url mal formada”. Só que o arquivo jrxml está perfeito, tanto que funciona com o código que eu passei no primeiro post (funciona dentro do eclipse).
Li em outro post por aí que o java não consegue ler um arquivo dentro de outro jar (isto me parece absurdo, pois os jars são repletos de arquivos).
Alguém mais tem alguma pista< meu prazo tá esgotando, fui até as 4 da manhã e testei inúmeras possibilidades sem sucesso.

Opa,

não tá faltando o / (barra) antes de bin/br/gov/fazenda/visualizador/apresentacao/relatorios/meuRelatorio.jrxml ficando assim: /bin/br/gov/fazenda/visualizador/apresentacao/relatorios/meuRelatorio.jrxml ?

Porque não coloca rastro da pilha do erro que está acontecendo pra que agente consiga entender melhor?

[quote=knik]bom dia,
Com fat-jar também não funciona.

this.getClass().getResourceAsStream("META-INF/meuRelatorio.jrxml");

Este código também nao funcionou, pois aí temos um inputString e não string. Só que pode ser uma pista, visto que o JRXmlLoader aceita um inputString como prâmetro. Aí, ele "parece" que localiza o arquivo, mas dá outro erro "url mal formada". Só que o arquivo jrxml está perfeito, tanto que funciona com o código que eu passei no primeiro post (funciona dentro do eclipse).
Li em outro post por aí que o java não consegue ler um arquivo dentro de outro jar (isto me parece absurdo, pois os jars são repletos de arquivos).
Alguém mais tem alguma pista< meu prazo tá esgotando, fui até as 4 da manhã e testei inúmeras possibilidades sem sucesso.[/quote]

Então…
Abre o teu arquivo .jar com um descompactador (zip, winrar) e verifica o caminho onde está o teu .jrxml…eu acho que tu não vai conseguir pegar o arquivo passando uma String, de dentro do jar…teria que ser o InputStream…Pelo eclipse funciona pq existe o diretório bin, onde ele compila e joga os binários…porém quando é gerado o jar, acredito que esse diretório não vá para o empacotamento…O ideal seria tu criar uma pasta, no mesmo nível do META-INF, tipo "reports", e colocar o teu jrxml lá dentro…aí tu utiliza esse código:

this.getClass().getResourceAsStream("/reports/meuRelatorio.jrxml");

Fernando

Parabéns Fernando!
Funcionou dentro do Eclipse e fora dele com o .jar.
Agora tem outra coisa que ainda não testei (mas sei que não vai dar certo).
O relatório principal agora vai ter um subReport que estará apontado (caminho relativo - exatamente a mesma coisa anterior) em um arquivo .jrxml, que também estará dentro do .jar.
Assim: O arquivo principal tem um parâmetro apontando para o subrelatorio:

"/relatorios/subRel.jasper"

Eu lembro a voê que isto funciona dentro do eclipse, mas fora dele vou testar agora.
Obrigado.

Então… é para funcionar…

mas tente fazer a mesma coisa com o relatório…passa um InputStream…

Esse InputStream tu passa para o relatório pai via parâmetro.

Fernando