Caros boa noite.
Existe algum tutorial, artigo ou exemplo para uso do ireport?
estou meio perdido, pois não se devo criar uma relatorio.logic,
que argumentos passar, onde colocar o relatório e como chama-lo.
Muito obrigado
Amigos,gostaria de saber se funciona vraptor2 com ireport, ou se existe alguma outra forma de gerar relatório.
Muito obrigado
[quote=roger2007]
Amigos,gostaria de saber se funciona vraptor2 com ireport, ou se existe alguma outra forma de gerar relatório.
Muito obrigado[/quote]
Vi alguns exemplos na net e pergunto :
É preciso fazer uma nova conexão ao BD e usar SQL.
Podemos utilizar a conexão gerada pelo ireport?
é preciso fazer alguma alteração no view properties ou no webxml ?
Esse assunto é muito importante a maioria dos sistemas precisa gerar relatórios.
Agradeço a todos e peço ajuda a todos?
Muito obrigado
Na documentação do VRaptor 2, voce encontra este material de apoio: http://vraptor.caelum.com.br/vraptor2/pt/file-download.html
Útil para quem sabe gerar o arquivo para Dowunload.
Cinei boa tarde.
O relatório será aberto quando for requerido ou ele vai para alguma pasta?
clientOutput.setContentType(“application/pdf”);
Aqui seria o .jxml gerado pelo ireport?
Muito obrigado, pelo direcionamento, pois até agora estava completamente no escuro.
[quote=luiscolling]Roger,
Da uma olhada nesse link.
http://www.guj.com.br/posts/list/122447.java#662399[/quote]
Caro luiscolling boa tarde.
Conexao con = new Conexao();
É pra criar uma conexão direta com o banco de dados? e não usar o que é gerado no ireport?
Muito obrigado
Boa tarde Roger,
A conexão do iReport que tu esta falando pelo que entendi é a conexão que é configurada para ser usada durante o desenvolvimento do layout.
[quote=luiscolling]Boa tarde Roger,
A conexão do iReport que tu esta falando pelo que entendi é a conexão que é configurada para ser usada durante o desenvolvimento do layout.[/quote]
essa mesma, não devo usá-la?
Essa conexão do iReport não é usada para quando você colocar o relatório no teu projeto.
Como você esta fazendo a conexão com o banco? utiliza a mesma classe que faz a conexão pra ti.
Tô sem exemplos aqui pra ti passar mas é mais simples do que parece.
[quote=luiscolling]Essa conexão do iReport não é usada para quando você colocar o relatório no teu projeto.
Como você esta fazendo a conexão com o banco? utiliza a mesma classe que faz a conexão pra ti.
Tô sem exemplos aqui pra ti passar mas é mais simples do que parece.[/quote]
Eu uso o hibernate, por isso assustei ter que fazer uma nova conexão com o bd,
mas isso não é problema, pois assim que a coisa aprender dessa forma tentarei
fazer pelo hibernate.
Onde coloco o arquivo .jrxml ? dentro de uma pasta específica, relatorio, ou fica dentro de web?
Muito obrigado pela atenção e dicas, pois estava perdido.
Recomendo colocar dentro de um pacote dentro do src, na verdade só é necessário do .jasper o .jrxml server mais como fonte caso seja necessário fazer manutenção no relatório, embora seja possivel editar o .jasper.
Recomendo deixar os 2 arquivos juntos na pasta src
ou coloque dentro de WEB-INF, não deixe dentro do WebContent somente.
Que bom que pude ajudar.
abraço.
Caro Luis estou tendo um java.lang.NullPointerException nessa linha:
//Localiza o contexto da pasta onde esta localizado o .jasper
String pathJasper = context.getRealPath("/ireport/") + "/";
Eu coloquei o arquivo .jasper em web/WEB-INF/ireport é preciso configurar algo em algum lugar ou informar o contexto sem colar pastas.
muito obrigado, vou continuar tentando, qq coisa posto aqui.
Você esta recebendo o context null, certo?
Acho que deveria ter um filter ou interceptor para receber ServletContext context
Uma alternativa seria
String pathJasper = session.getServletContext().getRealPath("/ireport/") + "/";
[quote=luiscolling]Você esta recebendo o context null, certo?
Acho que deveria ter um filter ou interceptor para receber ServletContext context
Uma alternativa seria
String pathJasper = session.getServletContext().getRealPath("/ireport/") + "/";
[/quote]
Caro Amigo somente consigo null. O comando acima não consegui implementar, pois session somente dá erro.
dentro de WEB-INF criei uma pasta ireport e lá coloquei o arquivo .jasper.
como deveria escrever o comando acima, pois já tentei vários:
//String pathJasper = context.getRealPath("WEB-INF/ireport");
//String pathJasper = context.getRealPath("/ireport/") + "/";
//String pathJasper = this.getServletContext().getRealPath("ireport/rel_cat.jasper");
String pathJasper = context.getRealPath("/ireport/") + "/";
//String pathJasper = context.getRealPath("/cantinavirtual/ireport") + "/rel_cat.jasper ";
No servlet para chamar geraRelatorio precisa de algum parâmetro específico?
Muito obrigado
o que retorna assim
No exemplo do outro tópico ele esta usando vraptor, e deve ter um filtro ou interceptor que passa os valores do método
final ServletContext context, HttpServletRequest request, HttpServletResponse response
Sendo assim não são null pra ele.
Coloca o código completo da sua classe, e o que você esta usando de framework?
Uso Vraptor 2
Logica
import java.sql.Connection;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import javax.servlet.ServletOutputStream;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.ServletContext;
import net.sf.jasperreports.engine.JasperExportManager;
import net.sf.jasperreports.engine.JasperFillManager;
import net.sf.jasperreports.engine.JasperPrint;
import net.sf.jasperreports.engine.data.JRBeanCollectionDataSource;
import org.vraptor.annotations.Component;
import org.vraptor.annotations.InterceptedBy;
import org.vraptor.annotations.Viewless;
import br.com.cantinavirtual.dao.DaoFactory;
import br.com.cantinavirtual.modelo.Categoria_sm;
@Component()
@InterceptedBy({AutorizadorInterceptor.class,DaoInterceptor.class})
public class Relatorio3_smLogic {
public Relatorio3_smLogic(DaoFactory daoFactory) {
this.daoFactory = daoFactory;
}
private final DaoFactory daoFactory;
@Viewless
public void geraRelatorio(final ServletContext context, HttpServletRequest request, HttpServletResponse response) throws Exception{
Connection conn = (Connection) ConnectionDB.getConnection();
/*
* Codigo para consultar a lista
*/
List<Categoria_sm> list = this.daoFactory.getCategoria_smDao().listatodascategoria();
/*
* Final da consulta, retorna array para converter em pdf
*/
//Localiza o contexto da pasta onde esta localizado o .jasper
String pathJasper = context.getRealPath("/ireport/") + "/";
//Faz o mapeamento do context para levar o .jasper a conversao em bytes
Map parametros = new HashMap();
//parametros.put("SUBREPORT_DIR", pathJasper);
//parametros.put("SUBREPORT_DIR", "WEB-INF/ireport");
try {
//Recebe a lista do array populado
JRBeanCollectionDataSource ds = new JRBeanCollectionDataSource(list);
//pega o ds + a conexao para ir ate o ireport para listar o array dentro do relatorio
//JasperPrint impressao = JasperFillManager.fillReport(pathJasper + "rel_cat.jasper",parametros, ds);
JasperPrint impressao = JasperFillManager.fillReport(pathJasper,parametros, ds);
//converte o relatorio em bytes gerando o pdf
byte[] bytes = JasperExportManager.exportReportToPdf(impressao);
byte[] arquivo = bytes;
//Tratamento para exportacao do pdf para a url do browser e o tratamento de erros.
String nomeDoArquivo = "rel_cat.pdf";
response.setContentType("application/x-msdownload");
response.setHeader("Content-Disposition", "attachment; filename=".concat(nomeDoArquivo));
response.setContentLength(arquivo.length);
ServletOutputStream sos = response.getOutputStream();
sos.write(arquivo, 0, arquivo.length);
sos.flush();
sos.close();
} catch (Exception e) {
if(e.getClass().getSimpleName().equals("AbortException")){
System.out.println("Documento cancelado");
} else{
System.out.println("Outros");
}
}
}
Conexão com bd
public class ConnectionDB {
public static Connection getConnection() throws SQLException {
try {
Class.forName("org.postgresql.Driver");
return DriverManager.getConnection("url","user","senha");
} catch (ClassNotFoundException e) {
throw new SQLException(e.getMessage());
}
}
}
JSP
<%@ page language="java" contentType="text/html; charset=ISO-8859-1"
pageEncoding="ISO-8859-1"%>
<%@ taglib uri="http://displaytag.sf.net" prefix="display" %>
<%@ include file="../principal_sm/cabcantvirtual.jsp" %>
<script type="text/javascript">
$(document).ready(function(){
function ClosedMask() {
$('#mascara').hide();
$('.BoxFixed').hide();
$('body').css({ overflow: 'scroll' });
}
<h1>Categorias</h1>
<h2>Listagem de todos as categorias de suas cantinas.</h2>
<h3>Teste</h3>
<div style="clear:both;"></div>
<div id="ferramentas">
<div class="right"><a class="pesquisar">Pequisar</a></div>
<div class="left"><a href="categoria_sm.manutformadd.logic">Adicionar Categoria</a> | <a onclick="return confirm('Serviço ainda indisponível, por favor, Aperte Cancelar !')" href="relatorio3_sm.geraRelatorio.logic" target="_blank">Imprimir Lista</a></div>
</div>
<display:table id="categoria_sm" class="listagem" name="${categorias}" requestURI="categoria_sm.manutlistaporescola.logic" export="true"pagesize="25">
<display:column style="width: 20px;text-align:center;"><a href="categoria_sm.manuteditar.logic?categoria_sm.id_categoria=${categoria_sm.id_categoria}"><img src="img_manut/page_edit.png"></display:column>
<display:column style="width: 20px;color: rgb(255, 255, 255); background-color: rgb(153, 153, 153);border:0px;text-align:center;" property="codcat" sortable="true" title="código"/>
<display:column property="descricao" sortable="true" title="categoria"/>
<display:column property="aux2_sm.descricao" sortable="true" title="disponível"/>
</display:table>
</div>
</div>
</div>
<%@ include file="../principal_sm/rodcantvirtual.jsp" %>
</body>
o relatório está em web/WEB-INF/ireport/rel_cat.jasper
Sei que já estou enchendo o saco com isso, mas até agora não funcionou.
Muito obrigado
Continuando a batalha… heheheeh
Coloca no construtor assim:
public Relatorio3_smLogic(DaoFactory daoFactory, ServletContext context) {
this.daoFactory = daoFactory;
this.context = context;
}
private final DaoFactory daoFactory;
private final ServletContext context;
Verifica se o context não vem null dessa forma, mas pegue o this.context
acho que você pode retirar aquele context do método geraRelatorio.
Uma hora temos que conseguir fazer funcionar eehehehhee
Caro Amigo luis, o problema do null acabou com a alteração que vc sugeriu.
Mas o relatório sai em branco, coloquei uns system.out.println, para ver até
onde ia, já que estava dentro de try/cath, se vc poder dar mas alguma sugestão
agradeço. veja novamente código da lógica:
@Component()
@InterceptedBy({AutorizadorInterceptor.class,DaoInterceptor.class})
public class Relatorio3_smLogic {
public Relatorio3_smLogic(DaoFactory daoFactory,ServletContext context) {
this.daoFactory = daoFactory;
this.context = context;
}
private final DaoFactory daoFactory;
private final ServletContext context;
@Viewless
public void geraRelatorio(final ServletContext context, HttpServletRequest request, HttpServletResponse response) throws Exception{
Connection conn = (Connection) ConnectionDB.getConnection();
/*
* Codigo para consultar a lista
*/
//List<Categoria_sm> list = this.daoFactory.getCategoria_smDao().listatodascategoria();
List<Categoria_sm> list = null;
/*
* Final da consulta, retorna array para converter em pdf
*/
//Localiza o contexto da pasta onde esta localizado o .jasper
String pathJasper = this.context.getRealPath("/ireport/") + "/";
//Faz o mapeamento do context para levar o .jasper a conversao em bytes
Map parametros = new HashMap();
parametros.put("SUBREPORT_DIR", pathJasper);
try {
//Recebe a lista do array populado
System.out.println("AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA1");
JRBeanCollectionDataSource ds = new JRBeanCollectionDataSource(list);
System.out.println("AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA2");
System.out.println("AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA3 "+pathJasper);
//pega o ds + a conexao para ir ate o ireport para listar o array dentro do relatorio
JasperPrint impressao = JasperFillManager.fillReport(pathJasper+"/rel_cat.jasper",parametros, ds);
System.out.println("AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA4");
//converte o relatorio em bytes gerando o pdf
byte[] bytes = JasperExportManager.exportReportToPdf(impressao);
byte[] arquivo = bytes;
System.out.println("AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA5");
//Tratamento para exportacao do pdf para a url do browser e o tratamento de erros.
String nomeDoArquivo = "rel_cat.pdf";
System.out.println("AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA6");
response.setContentType("application/x-msdownload");
System.out.println("AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA7");
response.setHeader("Content-Disposition", "attachment; filename=".concat(nomeDoArquivo));
System.out.println("AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA8");
response.setContentLength(arquivo.length);
System.out.println("AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA9");
ServletOutputStream sos = response.getOutputStream();
System.out.println("AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA10");
sos.write(arquivo, 0, arquivo.length);
System.out.println("AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA11");
sos.flush();
System.out.println("AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA12");
sos.close();
} catch (Exception e) {
if(e.getClass().getSimpleName().equals("AbortException")){
System.out.println("Documento cancelado");
} else{
System.out.println("Outros");
}
}
}
}
resultado impresso:
22:07:14,468 DEBUG SessionImpl:220 - opened session at timestamp: 12557416344
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA1
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA2
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA3 C:\eclipse\workspace\cantinavirtual\web\ireport/
Outros
22:07:14,953 DEBUG SessionImpl:273 - closing session
22:07:14,953 DEBUG ConnectionManager:375 - connection already null in cleanup : no action
pelo que ví a linha JasperPrint impressao = JasperFillManager.fillReport(pathJasper+"/rel_cat.jasper",parametros, ds); não roda
Muito obrigado
Caro amigo luis, consegui passar daquelu ponto.
Eu havia colocado o .jasper dentro do web/WEB-INF/ireport e
ele somente achava o caminho web/ireport, alterei o local e passou
para a próxima parada:
java.lang.NoClassDefFoundError: com/lowagie/text/pdf/FontMapper
net.sf.jasperreports.engine.JasperExportManager.exportReportToPdf(JasperExportManager.java:183)
br.com.cantinavirtual.logic.Relatorio3_smLogic.geraRelatorio(Relatorio3_smLogic.java:70)
Está parecendo falta de biblioteca vou continuar na batalha, muito obrigado