Gerar PDF com IReport[RESOLVIDO]

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