Gerar relatórios(XLS ou PDF) com Colletion - Ireport

Bem…depois de uma série de pesquisas desencontradas e que me deixaram desnorteado, decidi postar…

Como o titulo sugere quero gerar relatorio a partir de uam lista de dados…

Eu criei o meu modelo de relatório com o Ireport 1.3.2 e gerei os arquivos .jasper e jrxml.

Tenho as seguintes dúvidas:

1-O código abaixo funcionaria na WEB (JSP(beans) acessando.java)??

OBS: Esse caminho tem como base que diretório???(…/webapps/WebContent/relatorios/rel_Teste.jasper")

public void gerarRelatorio(List<Int_RelatorioContratoTCU> _listaReltorio) {
 		JasperPrint impressao;
 		JasperViewer visualizacao;
 		OutputStream fos = null;
 
 		try {
 			JRBeanArrayDataSource jr = new JRBeanArrayDataSource(_listaReltorio
 					.toArray());
 		
 			Map parameters = new HashMap();
 			
 			
 			impressao = JasperFillManager.fillReport("../webapps/WebContent/relatorios/rel_Teste.jasper", parameters,	jr);
 			
 			visualizacao=new JasperViewer(impressao,true);
 
 			visualizacao.setVisible(true);
 			
 		} catch (Exception e) {
 			e.printStackTrace();
 		} 
 	}
 

2-O tipo de arquivo que eu kero exportar eu difino aonde???

Alguem tem algum exemplo(PARA A WEB E COM COLEÇÕES) que tenha começo, meio e fim!!!

Obrigado…!!!

Opa… sobre o caminho do arquivo, geralmente eu gosto de deixar o .jasper dentro da propria app mesmo, ai vc recupera via getResource…
Ai ele está usando um arquivo .jasper dentro do diretório web, da sua app.
Segue abaixo um código que ta gerando um .pdf, o qual esse aparece na pagina…

[code]public void generatePDF(
String jasperLocation,
Map<String,Object> parameters, ResultSet rs,
FacesContext faces) {

	try &#123;
		HttpServletResponse response =
			&#40;HttpServletResponse&#41;faces.getExternalContext&#40;&#41;.getResponse&#40;&#41;;
		
  		JRResultSetDataSource jrRS = new JRResultSetDataSource&#40;rs&#41;;  	  		
  		JasperReport jr = &#40;JasperReport&#41;JRLoader.loadObject&#40;
  				getClass&#40;&#41;.getResource&#40;jasperLocation&#41;&#41;;
  		
  		response.setContentType&#40;&quot;application/pdf&quot;&#41;;
			        
        JasperPrint print = JasperFillManager.fillReport&#40;
        		jr , parameters, jrRS&#41;;		
        JasperExportManager.exportReportToPdfStream&#40;
        		print, response.getOutputStream&#40;&#41;&#41;;
        
        faces.responseComplete&#40;&#41;;
  		
	&#125;catch&#40;Exception ex&#41; &#123;
		ex.printStackTrace&#40;&#41;;
	&#125;
	
&#125;[/code]

Nesse caso eu useri um ResultSet, mas é so olhar na api do Jasper pra ver qual método que usa a sua collection.

Bom dia…

R.: Funcionaria…mas para abrir o viewer do jasper vc teria q. ter uma applet…ou esqueceria o vier e faria a saída para o browser
R.: esse é um caminho relativo…está apontando para essa pasta de acordo com a pasta onde vc esta…o (…) quer dizer q. está em uma pasta do mesmo nível da sua…

exemplo
/* Preenche o relatório com os dados. Gera o arquivo BibliotecaPessoal.jrprint    */
 		JasperFillManager.fillReportToFile&#40; &quot;c&#58;/classic.jrprint&quot;, parametros, jrRS &#41;;
   
 		/* Exporta para o formato PDF */
 		JasperExportManager.exportReportToPdfFile&#40; &quot;c&#58;/MEUPDF.PDF&quot; &#41;;

link de exemplo mostrando collection:
http://www.furutani.eti.br:8080/MostrarArtigo.action?codigo=10

outro exemplo:
http://br.geocities.com/robertofurutani/java/Tutorial_JasperReports/

dúvidas?
posta aí!

t+

Ultima dúvida Diana

No código que vc colocou em http://br.geocities.com/robertofurutani/java/Tutorial_JasperReports/

tem um método:

 public Gerarelatório&#40;&#41; throws Exception &#123;
   // Lista dos alunos
   ArrayList listaAlunos = GerarDadosFicticios.getListaAlunos&#40;&#41;;

 // Cria o data source para o relatório
   relatórioAlunosDataSource ds = new relatórioAlunosDataSource&#40;
   listaAlunos&#41;;

 // parâmetros do relatório
   Map parâmetros = new HashMap&#40;&#41;;
   parâmetros.put&#40;&quot;pathSubRel&quot;,rel2&#41;;
   
   JasperPrint impressao = JasperFillManager.fillReport&#40;getClass&#40;&#41;
   .getResourceAsStream&#40;rel1&#41;, parâmetros, ds&#41;;

 //exibe o relatório
   JasperViewer viewer = new JasperViewer&#40;impressao, true&#41;;
   viewer.show&#40;&#41;;
   &#125;

Esse viewer.show(); é utilizado para aplicações desktop não é? Para exibir no browser(Como o 1º exemplo deste topico) ou salvar no cliente, tenho que usar Servlet(browser) ou IO(cliente)…não ?

se vc usar um servlet a maior parte do código vai ficar igual…
o que vai mudar é na hora de exibir o relatório…

exemplo:

....
//carregando o arquivo.jasper...onde pathJasper é o caminho do arquivo dentro da appweb
JasperPrint impressao = JasperFillManager.fillReport&#40;pathJasper+ &quot;RelLancamento.jasper&quot;, parametros,ColaboradorDAO.getInstance&#40;&#41;.getConnection&#40;&#41;&#41;;
//exportando para PDF...o arquivo RelLancamento nao existe
JasperManager.printReportToPdfFile&#40;impressao, path+ &quot;/RelLancamento.pdf&quot;&#41;;
//redirecionando para o arquivo criado....
response.sendRedirect&#40;&quot;RelLancamento.pdf&quot;&#41;;

t+