Gerando relatório PDF em uma pagina JSP usando o iReport. [Resolvido]

8 respostas
R

Pessoal, sou novato em JSP e preciso de uma ajuda. Estou precisando gerar um relatório em PDF em uma pagina JSP utilizando o iReport.

Eu consegui fazer o relatório no iReport normalmente, porém estou precisando colocar um link em uma pagina JSP para gerar esse Relatório em PDF.

Estou utilizando o iReport no NetBeans, e estou utilizando o banco MySQL.

Peguei alguns tutoriais e segui, porém nenhum funcionou pq eram bem antigos.

Se alguem tiver algum exemplo atual e bem simples de como chamar o relatório em JSP e quiser compartilhar, eu agradeço muito.

Obrigado mesmo.

8 Respostas

P

Eu chamo o relatório em pdf no browser atraves de uma servlet, pode ser?

A

eu lembro que o quebrandoparadigmas tinha feito um tutorial sobre como gerar relatório com primefaces e ireport, mas parece que tiraram do ar =/
vou criar um tutorial deste e postá-lo pro pessoal dps.
Mas como o Paezani falou, com o JSP é melhor gerar ele via servlet com alguma ferramenta te auxiliando.
A IBM tem um link que explica isso muito bem:

R

A questão é que preciso inserir no relatório alguns campos de uma tabela de um banco de dados MySQL. Você acha que com essa Servlet agente consegue?

Pode ser sim, poste ai, conhecimento sempre é bom. E podemos ajudar outras pessoas que venha pesquisar sobre PDF.

:slight_smile:

R

andre.froes:
eu lembro que o quebrandoparadigmas tinha feito um tutorial sobre como gerar relatório com primefaces e ireport, mas parece que tiraram do ar =/
vou criar um tutorial deste e postá-lo pro pessoal dps.
Mas como o Paezani falou, com o JSP é melhor gerar ele via servlet com alguma ferramenta te auxiliando.
A IBM tem um link que explica isso muito bem:
http://www.ibm.com/developerworks/opensource/library/os-javapdf/

Boa, valeu Andre já ajuda, vou dar uma estudada.

Quando puder poste o tutorial sim, irá ajudar bastante. Encontrei alguns tutoriais, porém muito antigos, e nenhum funcionou.

Se alguem tiver um exemplo bem simples de código de JSP chamando um relatório do iReport irá ajudar muito.

Depois podemos ir estudando e melhorando.

P

Segue a servlet que uso pra chamar um relatório em PDF no browse:

import java.sql.*;
import java.text.DecimalFormat;
import java.io.*;
import java.util.Date;
import javax.servlet.*;
import javax.servlet.http.*;

import java.io.*; 
import javax.servlet.*; 
import javax.servlet.http.*; 

import net.sf.jasperreports.engine.*;
import net.sf.jasperreports.engine.data.JRBeanArrayDataSource;
import net.sf.jasperreports.engine.data.JRBeanCollectionDataSource;
import net.sf.jasperreports.engine.export.JRHtmlExporter;
import net.sf.jasperreports.engine.util.JRLoader;
import net.sf.jasperreports.view.JasperViewer;
import java.util.Map; 
import java.util.HashMap; 

import java.sql.*; 

public class pDadosCliente extends HttpServlet
{ 
	 boolean status ;
	 ResultSet rs ;
	 String codcli;
	 
	 public void doGet (HttpServletRequest req , HttpServletResponse res)
	        throws IOException, ServletException
	 { 

	  try{ 
		 codcli = req.getParameter("codcli"); // parametro recebido de um jsp com o código do cliente que será enviado para o ireport
		 
		  Conectar conexao = new Conectar();	 
		  if(conexao.conecta(true))
		  {
		   
		   ServletContext context = getServletContext();   
		   byte[] bytes = null;   
		   try {   
		         
		         
		      // carrega os arquivos jasper   
		      JasperReport relatorioJasper = (JasperReport)JRLoader.loadObject(   
		              context.getRealPath("/WEB-INF/reports/dadoscliente.jasper"));   
		      //*******  
//		      Na variavel pathJasper ficara o caminho do diretório para
//		       os relatórios compilados (.jasper)
		     String pathJasper = getServletContext().getRealPath(
		                  "/WEB-INF/reports/")
		        + "/";
//		    A variavel path armazena o caminho real para o contexto
//		    isso é util pois o seu web container pode estar instalado em lugares diferentes
		     String path = getServletContext().getRealPath("/");
//		    

                                      Parametros do relatorio
		      //*********
		      
		      // parâmetros, se houverem   
		      Map parametros = new HashMap();   
		      parametros.put("codcli",codcli);//valor do consumidor
		      		      
		      // direciona a saída do relatório para um stream   
		      bytes = JasperRunManager.runReportToPdf(relatorioJasper,parametros,conexao.MinhaConexao);   
		      } 
		      
		      catch (JRException e) {   
		       e.getMessage();  
		      }   
		      // envia o relatório em formato PDF para o browser   
		      res.setContentType("application/pdf");
		      
		      res.setContentLength(bytes.length);   
		      ServletOutputStream ouputStream = res.getOutputStream();   
		      ouputStream.write(bytes, 0, bytes.length);   
		      ouputStream.flush();   
		      ouputStream.close();    
		      
		      conexao.MinhaConexao.close();
		     
		   }	 
		   else
		   {
			ServletOutputStream ouputStream2 = null;
			ouputStream2.print("Não foi possível se conectar com o banco de dados.");  
		   }
    }
    catch(Exception erro)
    {
        PrintStream tela = new PrintStream (res.getOutputStream ()) ;
        tela.println ("<HTML><BODY>" ) ;
        tela.println ( "<script>alert('Não foi possível gerar o relatório.'"+erro.getMessage()+");history.back();</script>" ) ;
        tela.println ( "<BR><P>" ) ;
        tela.println ( "</HTML></BODY>" ) ;
        return ;
    }
    
  } 
}
R

Muito Obrigado mesmo pelo exemplo Paezane. Fiz os testes aqui e não consegui.

Nesse caso você chama essa Servlet de uma pagina correto?! Estou iniciando nesse assunto, tem como você postar um exemplo de uma pagina que chama essa Servlet?

Obrigadão.

P

Veja se ajuda… Postei essa solução no meu blog

http://profpaulovmdutra.blogspot.com/2011/08/gerando-relatorios-pdf-e-rtf-com.html

R

Muito Obrigado Paulo.

Muito Obrigado Pessoal.

Valeu mesmo pela ajuda.

Consegui fazer o relatório, abrindo na pagina JSP. Por enquanto eu fiz o código dentro do JSP mesmo, mas depois irei melhora-lo.

Irei postar aqui para compartilhar com todos vocês que me ajudaram, e caso alguem futuramente precise da ajuda.

<%@page import="net.sf.jasperreports.engine.JasperFillManager"%>
<%@page import="net.sf.jasperreports.engine.util.JRLoader"%>
<%@page import="net.sf.jasperreports.engine.JasperReport"%>
<%@page import="net.sf.jasperreports.engine.JasperRunManager"%>
<%@page import="java.util.Map"%>
<%@page import="java.util.HashMap"%>
<%@page import="java.io.File"%>
<%@page import="net.sf.jasperreports.engine.JasperPrint"%>
<%@page import="net.sf.jasperreports.view.JasperViewer"%>
<%@page import="com.mysql.jdbc.Connection"%>
<%@page import="java.sql.ResultSet"%>
<%@page import="com.mysql.jdbc.Statement"%>
<%@page import="org.apache.jasper.tagplugins.jstl.core.Import"%>
<%@page contentType="text/html" pageEncoding="UTF-8"%>



<!DOCTYPE html>

<%@page import="classes.*" %>

<html>
    <head>
        <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
        <title>JSP Page</title>
    </head>
    <body>
        <h1>Testando.</h1>
        
<% 

gConexao Conect;
Conect = new gConexao();
Conect.getConexao();


String relatorio = null;

relatorio = "/WEB-INF/reports/relatorio.jasper";

File reportFile = new File(application.getRealPath(relatorio));

Map parameters = new HashMap();

parameters.put("descricao", "preco");

byte[] bytes = JasperRunManager.runReportToPdf(reportFile.getPath (), parameters, Conect.getConexao());


response.setContentType("application/pdf");
response.setContentLength(bytes.length);

ServletOutputStream ouputStream = response.getOutputStream();
ouputStream.write(bytes, 0, bytes.length);

ouputStream.flush();
ouputStream.close();

%>              

    </body>
</html>

Espero que possa futuramente ajudar mais alguém.

Muito Obrigado à todos vocês e ao RJBeto:

http://www.mail-archive.com/[email removido]/msg01248.html

Abração.

Criado 1 de setembro de 2011
Ultima resposta 5 de set. de 2011
Respostas 8
Participantes 4