Olá pessoal!
Gostaria de um exemplo simples, quais classes usar, biblioteca e etc para construir este relatório, já que não encontrei na net, nem no site do vraptor e nem aqui, gostaria que vocês me ajudassem!
Obrigado
Olá pessoal!
Gostaria de um exemplo simples, quais classes usar, biblioteca e etc para construir este relatório, já que não encontrei na net, nem no site do vraptor e nem aqui, gostaria que vocês me ajudassem!
Obrigado
Bom pessoal.
Encontrei este tópico http://www.guj.com.br/posts/list/215728.java e eu vou tentar seguir os exemplos que os colegas colocaram, mas de qualquer forma se alguém quiser dar um apoio, será muito bem vindo!
Até++;
Oi jones!
Vou explicar aqui como fazer o seu relatório.
Baixe a última versão do iReport e JasperReport do site oficial, descompacte os dois na sua pasta /opt (se usar Linux).
Rode o iReport e conecte ao seu banco, é o primeiro passo. Depois de conectar vai surgir um wizard, por onde vc pode selecionar o layout do seu relatório. Quando terminar essa etapa vai surgir o seu relatório em branco, ai vc clica no icone que está logo acima para escolher os fields que serão usados, lá vc escolhe o SQL para fazer as querys, depois que terminar isso, use a paleta para arrastar os componentes pro seu relatório, os text fields e as variáveis.
Outra coisa, vc pode conectar ao banco usando Hibernate tb, e as querys serão feitas com HQL, mas pra isso vc precisa adicionar o jar do Hibernate e o jar do seu conector, no meu caso é postgre (postgresql-8.4-701.jdbc4.jar) na /lib do iReport (/opt/iReport-3.7.4/ireport/libs).
Outro detalhe importante, pro Jasper funcionar vc precisa adicionar o iText-2.1.7.jar na /lib do seu projeto, é com essa versão que o Jasper funciona.
Qualquer dúvida é só falar.
Abraço!
Ok!
Vou seguir o que você recomendou!
Pelo que eu imagino, ele ira gerar o arquivo .jasper, depois disso colocar esse arquivo no classpath do meu projeto com Vraptor?
Obrigado!
Vc pode usar o JasperMaker do Lavieri, veja ai no meu tópico:
http://www.guj.com.br/posts/list/214666.java
Cria uma pasta jasper em WEB-INF e quando criar seu relatório pelo iReport, aponta essa pasta jasper do seu projeto pra ele usar, ai quando vc mandar compilar o relatório ele vai gerar o .jasper lá dentro, depois é só vc criar o seu RelatoriosController e dentro criar os métodos para baixar o relatório, exemplo:
public Download geraRelatorioImovelVenda() {
//aqui vc monta a coleção para ser usada como DataSource no jasper
//e coloca seus parametros (se quiser) em um mapa de parametros...
List<Imovel> imoveis = imovelDao.listaVenda();
return jasperMaker.makePdf(
"imovelVenda.jasper",
imoveis,
"relatorio-venda.pdf",
true
/*opcionalmenteObjetosParametrosPodemSerEnviadosOuNao*/);
O “imoveis” é onde recebo a List de imoveis, e uso mais abaixo como parâmetro pro JasperMaker encontrar os dados.
Estou apontando pro imovelVenda.jasper, que é o relatório compilado pelo iReport, relatorios-venda.pdf é o nome que eu escolhi pro relatório.
Muito obrigado cara!
Vou fazer aqui!
inté…
Guevara,
muito obrigado pelas suas explicações, vai me ajudar muito aqui também!
Att,
Leandro.
Pessoal!
Estou tendo problema em passar parametros para o iReport, como faço???
Meu método está assim:
@Get
@Path("/produtos/relatorio")
public InputStream relatorio(){
List <Produto> produtos = dao.listaTudo();
Map<String, Long> parameters = new HashMap<String, Long>();
parameters.put("IDP", 3L);
JRBeanCollectionDataSource ds = new JRBeanCollectionDataSource(produtos);
try {
File jasperFile = ResourceUtils.getFile("classpath:/Relatorio.jasper");
InputStream jasperStream = new FileInputStream(jasperFile);
byte[] bytes = JasperRunManager.runReportToPdf(jasperStream, parameters, ds);
return new ByteArrayInputStream(bytes);
} catch (Exception e) {
e.printStackTrace();
}
return null;
}
O script do jasper esta assim:
select * from Produto where id = $P{IDP}
Ele esta trazendo a lista inteira!
Não vejo problemas com a passagem de parâmetros.
Mate seu arquivo Relatorio.jasper e compila novamente e veja se foi recriado.
Pior que não mudou nada…
Vou falar o que fiz no iReport 3.7.4
1º Criei uma conexão do tipo Database JDBC Connection
2º Criei um relatório do tipo A4 Black
3º Criei uma parâmetro do tipo Long chamada IDP
4º Desabilitei o check "Use as prompt"
5º Criei este select: select * from Produto where id = $P{IDP}
6º Arrastei os campos que me interessam pro Detail
7º Mudei a linguagem do relatório pra Java
8º Compilei e salvei direto no build/classes do meu projeto.
O xml do meu relatório é esse:
<?xml version="1.0" encoding="UTF-8"?>
<jasperReport xmlns="http://jasperreports.sourceforge.net/jasperreports" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://jasperreports.sourceforge.net/jasperreports http://jasperreports.sourceforge.net/xsd/jasperreport.xsd" name="Relatorio" pageWidth="595" pageHeight="842" columnWidth="555" leftMargin="20" rightMargin="20" topMargin="20" bottomMargin="20">
<parameter name="IDP" class="java.lang.Long" isForPrompting="false"/>
<queryString>
<![CDATA[select * from Produto where id = $P{IDP}]]>
</queryString>
<field name="id" class="java.lang.Long"/>
<field name="descricao" class="java.lang.String"/>
<field name="nome" class="java.lang.String"/>
<field name="preco" class="java.lang.Double"/>
<background>
<band splitType="Stretch"/>
</background>
<title>
<band height="79" splitType="Stretch"/>
</title>
<pageHeader>
<band height="35" splitType="Stretch"/>
</pageHeader>
<columnHeader>
<band height="61" splitType="Stretch"/>
</columnHeader>
<detail>
<band height="23" splitType="Stretch">
<textField>
<reportElement x="29" y="0" width="53" height="20"/>
<textElement/>
<textFieldExpression class="java.lang.Long"><![CDATA[$F{id}]]></textFieldExpression>
</textField>
<textField>
<reportElement x="82" y="0" width="100" height="20"/>
<textElement/>
<textFieldExpression class="java.lang.String"><![CDATA[$F{nome}]]></textFieldExpression>
</textField>
<textField>
<reportElement x="182" y="0" width="100" height="20"/>
<textElement/>
<textFieldExpression class="java.lang.String"><![CDATA[$F{descricao}]]></textFieldExpression>
</textField>
</band>
</detail>
<columnFooter>
<band height="45" splitType="Stretch"/>
</columnFooter>
<pageFooter>
<band height="54" splitType="Stretch"/>
</pageFooter>
<summary>
<band height="42" splitType="Stretch"/>
</summary>
</jasperReport>
Esqueci algum passo importante??
Valeu!
Eu acredito que está havendo uma pequena confusão conceitual.
Se voce está usando JRBeanCollectionDataSource, então você manda a sua coleção de dados já pronta.
List <Produto> produtos = dao.listaTudo();
...
JRBeanCollectionDataSource ds = new JRBeanCollectionDataSource(produtos);
Você está enviando produtos já populado com dao.listaTudo();
Não sei te dizer cara, mas eu me baseei neste link referente ao post do ricardosoares
http://www.guj.com.br/posts/list/215728.java
Acredito que o conceito esteja igual.
Valeu por ter respondido!
O cinei está certo, jones.
O exemplo que eu dei foi feito em cima do que a pessoa do outro post estava tentando. Ou seja, rodar o jasperreport já enviando a ele, os dados previamente obtidos.
O que vc está querendo fazer é outra coisa. Quando vc desenhou o relatório, vc determinou que ele faça consulta ao banco de dados através da query “select * from Produto where id = $P{IDP}” para que ele própio obtenha os dados a serem impressos utilizando o parâmetro IDP.
Desta forma, ao inves de vc informar o datasource, vc deve utilizar o a conexão que será usada para a consulta.
//errado
byte[] bytes = JasperRunManager.runReportToPdf(jasperStream, parameters, ds); //certo
byte[] bytes = JasperRunManager.runReportToPdf(jasperStream, parameters, conn);
API do método