Erro Ao Gerar Relatório

7 respostas
T

Bom dia.

Eu sou iniciante ao framework do ireport e estou encontrando dificuldades para gerar o relatório apartir de uma aplicação, quando rodo esta aplicação acontece os seguinte erro:

[color=red]Exception in thread “main” java.lang.ClassCastException: java.io.BufferedInputStream cannot be cast to com.lowagie.text.pdf.codec.Base64$InputStream[/color]

Como resolvo este problema?

7 Respostas

andre_bento

Olá amigo…
Poste o código em que vc gera o relatório pra podermos dar uma olhada por favor cara.
Abraços

T

Este é o código que abre o relatório:

[color=blue]package agendatelefonica;

import com.lowagie.text.pdf.codec.Base64.InputStream;

import java.sql.Connection;

import java.util.HashMap;

import java.util.Map;

import net.sf.jasperreports.engine.JRException;

public class AbriRelatorio {

public void abrirRelatorioContatos(){


   InputStream inputStream = (InputStream) getClass().getResourceAsStream("/Contatos.jasper");

    Map parametros = new HashMap();
    
    Connection con = ConnectionFactory.getConnection();


    try{

        ReportUtils.openReport("Contatos", inputStream, parametros, con);

       }catch(JRException exc ){
        exc.printStackTrace();
    }
}

}[/color]

Abraços

R

Eu tenho uma aplicação para a web feita… quer ?

T

Agradeceria.

Pode me ajudar.

Obrigado rsmoraes.

R

no Servlet, você coloca assim:

package control;   
  
import java.io.IOException;   
import java.io.OutputStream;   
  
import javax.servlet.ServletException;   
import javax.servlet.http.HttpServlet;   
import javax.servlet.http.HttpServletRequest;   
import javax.servlet.http.HttpServletResponse;   
  
import net.sf.jasperreports.engine.JRResultSetDataSource;   
import net.sf.jasperreports.engine.JasperCompileManager;   
import net.sf.jasperreports.engine.JasperExportManager;   
import net.sf.jasperreports.engine.JasperFillManager;   
import net.sf.jasperreports.engine.JasperPrint;   
import net.sf.jasperreports.engine.JasperReport;   
import net.sf.jasperreports.engine.design.JasperDesign;   
import net.sf.jasperreports.engine.xml.JRXmlLoader;   
  
import persistence.ProdutoDao;   
  
public class Relatorio extends HttpServlet {   
    private static final long serialVersionUID = 1L;   
  
    protected void doGet(HttpServletRequest request,   
            HttpServletResponse response) throws ServletException, IOException {   
        execute(request, response);   
    }   
  
    protected void doPost(HttpServletRequest request,   
            HttpServletResponse response) throws ServletException, IOException {   
        execute(request, response);   
    }   
  
  
    protected void execute(HttpServletRequest request,   
            HttpServletResponse response) throws ServletException, IOException {   
           
        ProdutoDao d = new ProdutoDao();   
           
        try{   
            d.open();   
               
    //JasperReports -> iReport   
           
    //Passo o ResultSet do JDBC para o Relatorio   
        JRResultSetDataSource ds = new JRResultSetDataSource(d.findAll());   
               
    //Arquivo do relatório   
        JasperDesign jd = JRXmlLoader.load("c:\\aula\\relatorio.jrxml");   
               
    //Compilar o relatório   
        JasperReport jr = JasperCompileManager.compileReport(jd);   
               
    //Mescar os dados do JDBC ao documento do Relatório   
        JasperPrint jp = JasperFillManager.fillReport(jr, null, ds);   
               
            //Download de PDF   
        response.reset();   
        response.setContentType("application/pdf");   
               
        OutputStream out = response.getOutputStream();   
        JasperExportManager.exportReportToPdfStream(jp, out);   
        out.flush();   
        out.close();               
        }   
        catch(Exception e){   
            e.printStackTrace();   
        }   
        finally{   
            d.close();   
        }   
       
    }   
       
  
  
}

No seu DAO, utilizei ProdutoDao:

public ResultSet findAll() throws Exception{   
           
    stmt = con.prepareStatement("select * from produto");   
    rs = stmt.executeQuery();   
           
    return rs; //Retorna o proprio ResultSet com os dados do JDBC   
}

Ai você baixa o !Report… e cria um relatório com ele… com tutoriais vc consegue fácil !!!

E na sua JSP, você coloca uma action do formulário ou um link mesmo, chamando seu servlet…

Assim:

<form method="post" action="Relatorio"> 

<input type="submit" value="Gerar PDF"/> 
</form>

vlw

Qualquer coisa to aew…

T

Obrigado RSMORAES.

R

Disponha amigo, o que precisar é só falar.

:smiley:

Criado 23 de janeiro de 2012
Ultima resposta 25 de jan. de 2012
Respostas 7
Participantes 3