E ai galera, blza, bom pessoal, seguinte, tenho o código abaixo
public void executar(List lista, String caminhoRel) throws IOException{
String caminhoLogo = "/br/com/epneves/imagens/logo_relatorio.png";
try {
InputStream relatorio = getClass().getResourceAsStream(caminhoRel);
ImageIcon gto = new ImageIcon(getClass().getResource(caminhoLogo));
parametros.put("LOGO",gto.getImage());
JRBeanCollectionDataSource colection = new JRBeanCollectionDataSource(lista);
JasperPrint impressao = JasperFillManager.fillReport(relatorio, parametros, colection);
JasperExportManager.exportReportToPdf(impressao);
final JasperViewer jv = new JasperViewer(impressao,false);
jv.setVisible(true);
jv.setModalExclusionType(Dialog.ModalExclusionType.APPLICATION_EXCLUDE);
} catch (JRException ex) {
ex.printStackTrace();
JOptionPane.showMessageDialog(null, "Não foi possivel abrir o relatório");
}
}
Meu problema é o seguinte, não to sabendo como fazer o relatório abrir o arquivo .pdf temporário, para que o usuário escolha entre apenas imprimir, salvar etc. O JasperViewer abre tranquilo, mas quero eliminar o JasperViewer da minha aplicação, quero ficar apenas com os relatórios abrindo em .pdf, consegui chegar ao ponto onde o arquivo gera em um diretório no meu pc, mas não é isso que quero, quero ele abrindo, e o usuário escolhe o que vai fazer com ele.
Alguém tem alguma sugestão?
Obrigado
EDIT: Aplicação Desktop
Se você já salva ele como pdf, use o Desktop para abrir o arquivo.
Então, eu cheguei a fazer isso ai
JasperExportManager.exportReportToPdfFile(impressao,"Arquivo.pdf");
File file = new File("Arquivo.pdf");
Desktop.getDesktop.open(file);
mas não abre, e também fugiria do escopo, pq salvaria o arquivo sem a escolha do usuário, o sistema deve abrir o arquivo pdf temporário, sem salvar, e o usuário vai escolher se quer salvar ou apenas imprimir.
public void executar(List lista, String caminhoRel) throws IOException{
String caminhoLogo = "/br/com/epneves/imagens/logo_relatorio.png";
try {
InputStream relatorio = getClass().getResourceAsStream(caminhoRel);
ImageIcon gto = new ImageIcon(getClass().getResource(caminhoLogo));
parametros.put("LOGO",gto.getImage());
JRBeanCollectionDataSource colection = new JRBeanCollectionDataSource(lista);
JasperPrint impressao = JasperFillManager.fillReport(relatorio, parametros, colection);
//adicione
JasperManager.printReportToPdfFile(impressao, "relatorio.pdf");
//remova
// final JasperViewer jv = new JasperViewer(impressao,false);
// jv.setVisible(true);
// jv.setModalExclusionType(Dialog.ModalExclusionType.APPLICATION_EXCLUDE);
} catch (JRException ex) {
ex.printStackTrace();
JOptionPane.showMessageDialog(null, "Não foi possivel abrir o relatório");
}
}
[quote=gmmascarin][code]
public void executar(List lista, String caminhoRel) throws IOException{
String caminhoLogo = “/br/com/epneves/imagens/logo_relatorio.png”;
try {
InputStream relatorio = getClass().getResourceAsStream(caminhoRel);
ImageIcon gto = new ImageIcon(getClass().getResource(caminhoLogo));
parametros.put(“LOGO”,gto.getImage());
JRBeanCollectionDataSource colection = new JRBeanCollectionDataSource(lista);
JasperPrint impressao = JasperFillManager.fillReport(relatorio, parametros, colection);
//adicione
JasperManager.printReportToPdfFile(impressao, "relatorio.pdf");
//remova
// final JasperViewer jv = new JasperViewer(impressao,false);
// jv.setVisible(true);
// jv.setModalExclusionType(Dialog.ModalExclusionType.APPLICATION_EXCLUDE);
} catch (JRException ex) {
ex.printStackTrace();
JOptionPane.showMessageDialog(null, "Não foi possivel abrir o relatório");
}
}
[/code][/quote]
e ai parceiro, valeu pela resposta, mas acabou tendo o mesmo efeito do trecho de código que postei anterior ao seu post. apenas cria o arquivo, mas não abre.
Bom dia pessoal, bom, passei o dia inteiro pesquisando ontem sobre o assunto e nada do que achei atingia meu objetivo, até agora não consegui nada que fizesse o arquivo PDF abrir logo em seguida de ser criado, e todas as formas que encontrei tem que salvar um arquivo sem a permissão do usuário, enfim, não é o que o meu sistema deve fazer.
To dando um up aqui pra ver se alguém ve e da uma luz, pq ta difícil.
Obrigado,
Vocẽ quer que o usuário visualize o relatório onde? Em um reader padrão mesmo (Adobe Reader) ?
Se for o caso terá que salvar um arquivo temporário em algum lugar e passar esse caminho para o reader.
( O que o Desktop faria)
Você pode, a partir do jasper, exportar o relatório numa stream qualquer (em memória por exemplo), mas com isso teria que fazer um visualizador próprio.
Se for usar o reader padrão você cria um arquivo temporário e indiferente da atitude do usuário você o apaga depois.
Se ele quiser salvar, salvará em outra pasta provavelmente.
Se ele quiser só imprimir, o arquivo será eliminado no final.
[quote=AbelBueno]Vocẽ quer que o usuário visualize o relatório onde? Em um reader padrão mesmo (Adobe Reader) ?
Se for o caso terá que salvar um arquivo temporário em algum lugar e passar esse caminho para o reader.
( O que o Desktop faria)
Você pode, a partir do jasper, exportar o relatório numa stream qualquer (em memória por exemplo), mas com isso teria que fazer um visualizador próprio.
Se for usar o reader padrão você cria um arquivo temporário e indiferente da atitude do usuário você o apaga depois.
Se ele quiser salvar, salvará em outra pasta provavelmente.
Se ele quiser só imprimir, o arquivo será eliminado no final.
[/quote]
Bacana, gostei da idéia, da pra fazer isso. Sim quero abrir em um reader padrão mesmo, sabe como posso fazer isso? A classe Desktop da forma que fiz em alguns posts acima não funcionou, não abriu o arquivo. Existe alguma outra forma? alguma outra classe?
Po, brigadão pela resposta.
Consegui Resolver
JasperExportManager.exportReportToPdfFile(impressao, "C:/arquivo.pdf");
Runtime.getRuntime().exec("cmd /c start C:/arquivo.pdf");
File file = new File("C:/arquivo.pdf");
file.deleteOnExit();
na primeira linha exporto meu arquivo para pdf, na segunda eu abro ele, nas duas últimos eu deleto ao sair da aplicação.
Fico bem do jeito que eu queria. Obrigado a todos
igor henrique
Seu ultimo post resolveu um grande pepino amigo!
Estava com problemas ao imprimir um relatório gerado via aplicação java pois a impressão na impressora Hp deskjet 1000 estava esticando o que seria impresso (saindo desconfigurado). Isso só acontecia quando eu visualizava o relatório num JDialog.
Já quando eu, mesmo no JDialog salva o pdf e imprimia O PDF não gerava problema nenhum…
Resultado: com este seu post eu faço não mais duas coisas, mas 03 coisas de uma vez só (gero o pdf, imprimo e deleto).
vlw!
Sandro
Igor, com apenas uma observação de um colega…
como a classe Desktop é multiplataforma abrir o pdf através dela é melhor do que a runtime!
http://www.guj.com.br/java/228319-abrir-qualquer-arquivo-pelo-java
Com este post, ao invés de abrir com o runtime agora abro com a Desktop!
Sandro