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?
Olá amigo…
Poste o código em que vc gera o relatório pra podermos dar uma olhada por favor cara.
Abraços
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
Eu tenho uma aplicação para a web feita… quer ?
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…
Disponha amigo, o que precisar é só falar.
