Olá pessoal estou começando a desenvolver relatórios no iReports e encontrei um problema não sei, creio q é meio babaca,…
Seguinte possuo um relatório q dentro dele tem outros dois sub-relatórios, qdo eu peço pra rodar o relatorio ele me cria a relação de dados no primeiro sub-relatório dinamicamente com n quantidade de linhas e qdo chama o segundo ele carrega por cima do primeiro, será q tenho q inserir alguma quebra pra informar o final do primeiro sub-relatório, se sim como faço isso, pois o tamanho do primeiro é dinamico
Ola,
como você dispôs os subrelatórios no relatório principal ? Um sobre o outro ?
Vc precisa colocar eles um debaixo do outro, e neste caso, eles não se sobrepõe.
Mas se você quiser usar como se fossem quebras (por exemplo Tipo X, e ai abaixo lisar subTipos), vc tem que criar um Group (agrupador, nova banda) no seu subrelatório.
BLza cara funcionou, agora o seguinte para o Relatório principal funcionar preciso passar dois parametros por exemplo um Nome(String) e uma idade(inteiro) vou chama-lo de uma servlet como monto a servlet passando os parametros, tem algum exemplo, e cara mto obrigado pela ajuda valeuzão
Helooo !
RagGirl…
Mas vamos lá !
Primeiro, crie uma classe, tipo Util para localizar o relatório:
package br.com.teste.util;
import java.io.InputStream;
import java.net.URL;
import net.sf.jasperreports.engine.JasperReport;
import net.sf.jasperreports.engine.util.JRLoader;
public class ReportUtils {
private static String imageBasePath;
public static JasperReport getReport(String reportName) throws Exception {
String reportPath = "/br/com/test/reports/"+reportName+".jasper";
InputStream stream = ReportUtils.class.getResourceAsStream(reportPath);
if(stream==null){
throw new Exception("Relatório não encontrado:"+reportPath);
}
JasperReport report = (JasperReport) JRLoader.loadObject(stream);
return report;
}
}
Depois, o Servlet:
package br.com.teste.servlet.report;
import java.io.ByteArrayOutputStream;
import java.io.IOException;
import java.io.OutputStream;
import java.sql.Connection;
import java.sql.SQLException;
import java.util.Enumeration;
import java.util.HashMap;
import java.util.Locale;
import java.util.Map;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
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 br.com.teste.sql.PoolConnection;
public class ReportServlet extends HttpServlet {
/* (non-Javadoc)
* @see javax.servlet.http.HttpServlet#service(javax.servlet.http.HttpServletRequest, javax.servlet.http.HttpServletResponse)
*
*/
protected void service(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
Connection conn = null;
try {
// nome do relatorio
String reportName = request.getParameter("reportName");
if (reportName == null || reportName.equals("")) {
throw new Exception("Nome do relatório deve ser informado.");
}
// copia parametros da requisição
Enumeration en = request.getParameterNames();
Map parameters = new HashMap();
while(en.hasMoreElements()){
String key = (String) en.nextElement();
parameters.put(key, request.getParameter(key));
}
parameters.put("REPORT_LOCALE", new Locale("pt", "br"));
// conexão do datasource
PoolConnection pool = new PoolConnection();
conn = pool.getJdbcURL().getConnection();
// carrega relatório
JasperReport relatorio = ReportUtils.getReport(reportName);
JasperPrint jasperPrint = JasperFillManager.fillReport(relatorio, parameters, conn);
ByteArrayOutputStream arrayOutputStream = new ByteArrayOutputStream();
// exporta para pdf
JasperExportManager.exportReportToPdfStream(jasperPrint, arrayOutputStream);
// define os cabecalhos do header
response.setHeader("Pragma","");
response.setHeader("Cache-Control","");
response.setHeader("Expires","");
response.setContentType("application/pdf");
// problemas com o IE
//response.setContentType("application/octect-stream");
//response.setHeader( "Content-Disposition", " attachment; filename=" + reportName.toUpperCase() + ".pdf");
//response.setHeader("Content-Disposition", "inline; filename=" + reportName.toUpperCase() + ".pdf");
response.setContentLength(arrayOutputStream.size());
// escreve o relatorio no response
OutputStream out = response.getOutputStream();
arrayOutputStream.writeTo(out);
out.flush();
out.close();
} catch (Exception e) {
e.printStackTrace();
request.setAttribute("ERRO_REPORT", e.getMessage());
this.getServletContext().getRequestDispatcher("/visualizacaoRelatorio.jsp").forward(request, response);
} finally {
if (conn != null) {
try {
conn.close();
} catch (SQLException e) {
}
}
}
}
}
E os parametros passa na tela:
<form method="post" name="relatorio" target="visualizacaoRelatorio" action="<%= request.getContextPath()%>/reportService">
<input type="hidden" name="reportName" value="">
<input type="hidden" name="NOME" value="">
<input type="hidden" name="IDADE" value="">
</form>
Blz !
Perdoe-me RagGirl…
Seguinte sou iniciante, estou com um pouco de duvidas, ou melhor cheio de duvidas…hehe
onde encontro PoolConnection pois nao tenho o pacote br… de onde importo ela… obrigado
Oi,
ok, sem problemas
Ops, mandei um exemplo e acabei não vendo, mas essa é uma classe que usei aqui para fazer a conexão.
Mas crie esse método:
protected Connection getConnection()
throws Exception {
// Buscar contexto JNDI
Context ic = new InitialContext();
// Solicitar o objeto Data Source
DataSource ds = (DataSource)ic.lookup("jdbc/[b]aquiseuDS[/b]");
// Obter uma conexao
Connection conn = ds.getConnection();
return conn;
}
e la no Pool, substitua essa linha:
// conexão do datasource
PoolConnection pool = new PoolConnection();
conn = pool.getJdbcURL().getConnection();
por essa:
conn = this.getConnection();
Agora deve funcionar, qlq problema entre em contato.
RagGirl consegui resolver mas ta me dando um erro ao gerar o Relatório
[code]exception
javax.servlet.ServletException: Invoker service() exception
org.apache.catalina.servlets.InvokerServlet.serveRequest(InvokerServlet.java:477)
org.apache.catalina.servlets.InvokerServlet.doPost(InvokerServlet.java:169)
javax.servlet.http.HttpServlet.service(HttpServlet.java:709)
javax.servlet.http.HttpServlet.service(HttpServlet.java:802)
root cause
java.lang.NoClassDefFoundError: org/apache/commons/javaflow/bytecode/Continuable
java.lang.ClassLoader.defineClass0(Native Method)
java.lang.ClassLoader.defineClass(ClassLoader.java:539)
java.security.SecureClassLoader.defineClass(SecureClassLoader.java:123)
org.apache.catalina.loader.WebappClassLoader.findClassInternal(WebappClassLoader.java:1634)
org.apache.catalina.loader.WebappClassLoader.findClass(WebappClassLoader.java:860)
org.apache.catalina.loader.WebappClassLoader.loadClass(WebappClassLoader.java:1307)
org.apache.catalina.loader.WebappClassLoader.loadClass(WebappClassLoader.java:1189)
java.lang.ClassLoader.loadClassInternal(ClassLoader.java:302)
java.lang.ClassLoader.defineClass0(Native Method)
java.lang.ClassLoader.defineClass(ClassLoader.java:539)
java.security.SecureClassLoader.defineClass(SecureClassLoader.java:123)
org.apache.catalina.loader.WebappClassLoader.findClassInternal(WebappClassLoader.java:1634)
org.apache.catalina.loader.WebappClassLoader.findClass(WebappClassLoader.java:860)
org.apache.catalina.loader.WebappClassLoader.loadClass(WebappClassLoader.java:1307)
org.apache.catalina.loader.WebappClassLoader.loadClass(WebappClassLoader.java:1189)
java.lang.ClassLoader.loadClassInternal(ClassLoader.java:302)
net.sf.jasperreports.engine.JasperFillManager.fillReport(JasperFillManager.java:402)
net.sf.jasperreports.engine.JasperFillManager.fillReport(JasperFillManager.java:234)
SisEst.controle.RelatorioColetaDados.doPost(RelatorioColetaDados.java:67)
javax.servlet.http.HttpServlet.service(HttpServlet.java:709)
javax.servlet.http.HttpServlet.service(HttpServlet.java:802)
org.apache.catalina.servlets.InvokerServlet.serveRequest(InvokerServlet.java:419)
org.apache.catalina.servlets.InvokerServlet.doPost(InvokerServlet.java:169)
javax.servlet.http.HttpServlet.service(HttpServlet.java:709)
javax.servlet.http.HttpServlet.service(HttpServlet.java:802)[/code]
não sei mais o q fzr, pois estou a uma semana com esse problema e o pior de tudo, é que meu chefe quer que eu mostre tudo até no sabado (4 relatórios) pra ele e não consegui sair do lugar, será q vc pode me dar mais essa ajuda, se puder me add no msn: wsinfo@msn.com, juro q so vou encomodar qdo realmente necessário…rs, obrigado pela atenção heim
bom vou tentar ser um pouco mais claro, acho q vai facilitar para me ajudar, construi um relatorio no iReports no qual preciso de 2 parametros um inteiro e outro string, os dois são usados lógicamente no SQL dentro do relatório, compilei e gerei o meu Relatorio.jasper, pois bem agora como faço para exibir esse relatório atraves de uma servlet ou jsp mesmo, so passando o parametro Nome=“wagner” e idade=20, gostaria de saber como posso visualizalo, obrigado
Oi,
não temos acesso ao msn… :shock:
Vou tentar montar um exemplo mais simples e te enviar.
Oi Wagner,
achei por aqui ainda mais alguns .pdf que eu tinha da época que comecei a ver e estudar iReport.
E também esses links:
Jasper num servlet:
http://www.guj.com.br/forum/viewtopic.php?t=1664
Subrelatório no Jasper:
http://www.guj.com.br/forum/viewtopic.php?t=2254
Query no Jasper:
http://www.guj.com.br/forum/viewtopic.php?t=3037
Jasper/Ireport parametros para gerar Relatorio
http://www.guj.com.br/forum/viewtopic.php?t=12041
Mais um sobre parâmetros
http://www.guj.com.br/forum/viewtopic.php?t=10426
SQL dinamico no Ireport
http://www.guj.com.br/forum/viewtopic.php?t=9513
JFreeReport Algumas dicas para iniciantes
http://www.guj.com.br/forum/viewtopic.php?t=8584
Problema com query SQL
http://www.guj.com.br/forum/viewtopic.php?t=12012&highlight=jasper+ireport
IReport pegando dados de Array
http://www.guj.com.br/forum/viewtopic.php?t=11416&highlight=jasper+ireport
Exemplos
http://www.guj.com.br/forum/viewtopic.php?p=46586#46586
Jasper + Ireport - Consultas SQL
http://www.guj.com.br/forum/viewtopic.php?t=12012
Como chamar um relatorio do Ireport
http://www.guj.com.br/forum/viewtopic.php?t=3857
Parametros no IReport
http://www.guj.com.br/forum/viewtopic.php?t=10426
Como uso JRBeanDataSource?
http://www.guj.com.br/forum/viewtopic.php?t=11655
Compilar arquivo xml do iReport em um Servlet
http://www.guj.com.br/forum/viewtopic.php?t=9769
Oq preciso para usar o Jasper-Report
http://www.guj.com.br/forum/viewtopic.php?t=3927
exemplo basicão pra gerar relatórios usando o jasperreports
http://www.guj.com.br/forum/viewtopic.php?t=3657
Como crio relatório??
http://www.guj.com.br/forum/viewtopic.php?t=3168
Valeu.