JasperReport executando no preview

5 respostas
andredeividi

Ola

Eu tenho essa classe que roda meu relatorio
so que ele abre em pdf eu gostaria executar no preview
como roda no Ireport.
Te como ?

package br.com.globalcode.servlet;

import java.io.IOException;
import java.sql.Connection;
import java.sql.DriverManager;
import java.util.HashMap;
import java.util.Map;

import javax.servlet.ServletContext;
import javax.servlet.ServletException;
import javax.servlet.ServletOutputStream;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

import net.sf.jasperreports.engine.JRException;
import net.sf.jasperreports.engine.JasperReport;
import net.sf.jasperreports.engine.JasperRunManager;
import net.sf.jasperreports.engine.util.JRLoader;

public class GeraRelatorioPedidos extends HttpServlet {
    
    public void doGet(HttpServletRequest request, HttpServletResponse response)
    throws IOException, ServletException  {
        
        // obtém a conexão com o banco de dados
        Connection conn = null;
        try {
            Class.forName("com.mysql.jdbc.Driver");
            conn = DriverManager.getConnection(
                    "jdbc:mysql://localhost:3306/basedados", // coloque o IP se não for usado localhost
                    "root",        // mude para o nome do usuário do seu bd
                    "123456");   // mude para a senha deste usuário
        } catch (Exception e) {
            System.out.println("Erro ao obter conexao via DriverManager: "                    
                    + e.getMessage());
        }
        
        // gera o relatório
        ServletContext context = getServletContext();
        byte[] bytes = null;
        try {
            // carrega os arquivos jasper
            JasperReport relatorioJasper = (JasperReport)JRLoader.loadObject(
                    context.getRealPath("/WEB-INF/reports/RelatorioPedidos.jasper"));
            JasperReport subrelatorioJasper = (JasperReport)JRLoader.loadObject(
                    context.getRealPath("/WEB-INF/reports/RelatorioItens.jasper"));
            // parâmetros, se houverem
            Map parametros = new HashMap();
            parametros.put("pageRoot", context.getRealPath("/"));
            parametros.put("subReport", subrelatorioJasper);
            // direciona a saída do relatório para um stream
           [b] bytes = JasperRunManager.runReportToPdf(relatorioJasper,parametros,conn);[/b]
        } catch (JRException e) {
            e.printStackTrace();
        }
        if (bytes != null && bytes.length &gt 0) {
            // envia o relatório em formato PDF para o browser
        [b]    response.setContentType("application/pdf");[/b]
            response.setContentLength(bytes.length);
            ServletOutputStream ouputStream = response.getOutputStream();
            ouputStream.write(bytes, 0, bytes.length);
            ouputStream.flush();
            ouputStream.close();
        }
        
    }
    
}

5 Respostas

ASOBrasil

andredeividi,

Saida com JasperViewer (ver 1º exemplo):
http://www.javafree.org/javabb/viewtopic.jbb?t=855140

Saida em HTML:
http://www.jwebhosting.net/servlets/jr123/jsp/source.jsp?filename=/viewjava/FillServlet.java

Saida em XLS:

ASOBrasil

andredeividi

Muito Obrigado pela dica.

Porem eu ainda continuo com o problema
num executa nada segue o meu codigo

package br.com.globalcode.servlet;

import java.io.IOException;
import java.sql.Connection;
import java.sql.DriverManager;
import java.util.HashMap;
import java.util.Map;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.swing.JOptionPane;
import net.sf.jasperreports.engine.JRDataSource;
import net.sf.jasperreports.engine.JasperFillManager;
import net.sf.jasperreports.engine.JasperPrint;
import net.sf.jasperreports.engine.data.JRBeanArrayDataSource;
import net.sf.jasperreports.view.JasperViewer;



public class GeraRelatorioPedidos extends HttpServlet {
    
    public void doGet(HttpServletRequest request, HttpServletResponse response)
    throws IOException, ServletException  {
        
        // obtém a conexão com o banco de dados
        Connection conn = null;
        try {
            Class.forName("com.mysql.jdbc.Driver");
            conn = DriverManager.getConnection(
                    "jdbc:mysql://localhost:3306/ecommerce", // coloque o IP se não for usado localhost
                    "root",        // mude para o nome do usuário do seu bd
                    "root");   // mude para a senha deste usuário
        } catch (Exception e) {
            System.out.println("Erro ao obter conexao via DriverManager: "
                    + e.getMessage());
        }
        
        // Na variavel pathJasper ficara o caminho do diretório para os relatórios compilados (.jasper)
        String pathJasper = getServletContext().getRealPath("/WEB-INF/reports")+ "/";
        
        // Parametros do relatorio
        Map parametros = new HashMap();
        parametros.put("1", pathJasper + "Cadastro.jasper");
        try {
            
           
            
            // Aqui ele cria o relatório e exibe no JasperViewer
            JasperPrint impressao = JasperFillManager.fillReport(pathJasper + "Cadastro.jasper", parametros,conn);
            JasperViewer jrviewer = new JasperViewer(impressao,false);
            jrviewer.viewReport(impressao);
            
            
        } catch (Exception e) {
          JOptionPane.showMessageDialog(null,"Erro");
        }
        
    }
    
}

Tenho que mexer no config do TomCat ?

desde ja agradeço muito

ASOBrasil

andredeividi,

Já tentou executar esse cara sem ser em servlet para ver se funciona normalmente?

ASOBrasil

andredeividi

Quero te agradecer profundamente a sua ajuda.

Meu conhecimento em servlet e muito restrito estou aprendo agora
e sozinho.

O codigo acima roda lega ele abre em pdf
e não testei esse codigo sem ser servlets vou testar e depois dou o parecer

desde ja agradeço

andredeividi

Montei esse codigo em aplicação desktop
e rodou de primeira.

No servlet não da Excption so abre uma pagina em branco

desde ja agradeço

Criado 18 de dezembro de 2006
Ultima resposta 20 de dez. de 2006
Respostas 5
Participantes 2