Servlet Exception usando Jasperreports

0 respostas
B

Colegas, vocês sabem se existe alguma limitação de tamanho para gerar um PDF usando Jasperreports e itext?

Quando meu relatório atinge cerca de 5 megas, recebo uma Servlet Exception.

Já viram algum caso do tipo?

Pra ajudar, segue o código:

package br.com.juridico.report.loader;

import java.io.ByteArrayOutputStream;
import java.io.IOException;
import java.sql.*;
import java.util.Map;
import java.util.HashMap;
import javax.servlet.http.HttpServletRequest;
import net.sf.jasperreports.engine.*;
import br.com.sysworks.model.Model;

public class ReportLoader extends Model {

  //Arquivos japser de relatorios

  public static String PATH = "";
  private ByteArrayOutputStream report = null;
  private String conteudoHTML = null;
  private String fileName = null;

  public ReportLoader(HttpServletRequest request) {
    super(request);
  }

  public void run(String acao, Map parameters) throws Exception {
    try {
      System.out.println("[ReportLoader] - Gerando Relatorio - Acao : [" + acao + "]");
      String path_origem  = PATH + "/" + acao + ".jasper";
      System.out.println("[ReportLoader] - " + path_origem);

      if (parameters != null) {
        System.out.println("[ReportLoader] - parameters, Nao esta nulo ");
      } else {
        System.out.println("[ReportLoader] - parameters, Nulo ");
      }

      if (getConnection() != null) {
        System.out.println("[ReportLoader] - getConnection(), Nao esta nulo ");
      } else {
        System.out.println("[ReportLoader] - getConnection(), Nulo ");
      }
      
      byte reports[] = JasperRunManager.runReportToPdf(path_origem, parameters, getConnection());
      System.out.println("[ReportLoader] - Termino render ");
      ByteArrayOutputStream bt = new ByteArrayOutputStream();
      System.out.println("[ReportLoader] - Criando array de bytes ");
      bt.write(reports);
      System.out.println("[ReportLoader] - Array criado ");
      this.report = bt;

      System.out.println("[ReportLoader] - Relatorio gerado !");
    } catch (JRException e) {
        e.printStackTrace(System.err);
    } catch (Exception e) {
      e.printStackTrace(System.err);
      
      String erro = e.getMessage();
      
      if (erro.indexOf("has no pages") > 0 ){
    	  throw new Exception("O documento não tem páginas.");
      } else {
    	  throw new Exception("Erro de sistema.");
      }
    }
  }
}
package br.com.juridico.servlet.report;

import java.io.BufferedReader;
import java.io.ByteArrayOutputStream;
import java.io.FileReader;
import java.io.IOException;
import java.io.PrintWriter;

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

public class RelatorioServlet extends HttpServlet {

  private static final String CONTENT_TYPE = "text/html";

  public void init() throws ServletException {
  }

  public void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
    Object report = request.getAttribute("report");
    if (report != null) {
    	
      String tipoRelatorio = (String)request.getAttribute("tipoRelatorio");
      
      ByteArrayOutputStream resul = (ByteArrayOutputStream) request.getAttribute("report");
      byte[] content = resul.toByteArray();
      if (content != null && content.length > 0){
    	  response.resetBuffer();
    	  response.setBufferSize(content.length);
	   response.setContentType("application/pdf");
	   response.setContentLength(content.length);
	   response.getOutputStream().write(content, 0, content.length);
	   response.getOutputStream().flush();
	   response.getOutputStream().close();
	   System.out.println("GEROU RELATORIO ...");
      } else {
    	  throw new IOException("O documento não tem páginas.");
      }
    } else {
      String file_name = (String)request.getAttribute("report_file_name");
      System.out.println("file_name:" + file_name);
      response.sendRedirect("/jasper/" + file_name);
    }
  }

  public void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
    doGet(request, response);
  }

  public void destroy() {
  }

}

Obrigado.

Criado 29 de fevereiro de 2008
Respostas 0
Participantes 1