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.