Pessoal Boa noite, estou abrindo aqui um tópico provavelmente já deve ter mais sobre o assunto, desde já desculpe-me pela ambiguidade do assunto!!
É o seguinte estou precisando utilizar o Jasper em um projeto para faculdade, nunca tinha mexido com a ferramenta e ai dei uma pesquisada e percebi um pessoal usando o IReport com as SQL, ou seja estão descentralizando do DAO, não gostando disto venho lhes pedir uma alternativa a isto, ou seja para mim a melhor solução seria poder passar para o Jasper apenas uma lista de objetos e ele apenas gerar o PDF desta lista, eu construo o Relatório com Referencia a lista que ele vai receber, mas apenas isto!!!
A todos os Possíveis colaboradores muito obrigado!!!
[code]// Use o seu DAO para efetuar a pesquisa e criar a lista de Beans
List beanCollection = seuDAO.select(…);
// Datasource para o relatório criado a partir de uma lista de Beans
JRBeanCollectionDataSource ds = new JRBeanCollectionDataSource(beanCollection);
// O relatório será preenchido usando o DataSource criado anteriormente. Você poderá fazer este passo usando outras
// alternativas disponibilizadas pelo JasperReports. Este é só um exemplo. O importante, na sua situação, é passar o
// DataSource criado a partir da lista de Beans
jasperPrint = JasperFillManager.fillReport(jasperReport, params, ds);[/code]
Obs.: No relatório você deve usar os atributos do seu Bean nos elementos Field. Ex:
[code]class Cliente {
String nome;
Endereco endereco;
get ...
set ...
}
class Endereco {
String nomeRua;
int numero;
get…
set…
}
[/code]
No relatório você deve referenciar a os atributos dos beans nas expressões do elementos Field:
“nome”
“endereco.numero”
“endereco.nomeRua”
fbcarvalho, muito obrigado!!!
Pesquisando um pouco achei http://www.furutani.com.br/2009/02/usando-o-jrbeancollectiondatasource/
Sei que e’ coisa de novato kkk, mas estou com um nullPoiter aqui e nao to achando o porque.
Basicamente estou trazendo uma lista que nao esta nula e tentando fazer os procedimentos, chega em impressao = JasperFillManager.fillReport(relJasper, parametros, ds); ai para.
public void geraRelatorio() throws Exception {
AlunoDelegate alunoDelegate = new AlunoDelegate();
List<AlunoVO> listaAlunos = alunoDelegate.filtrarTodos(new AlunoVO());
HashMap parametros = new HashMap();
String caminhoRelJasper = "c://Alunos.jasper";
// Stream com o .jasper
InputStream relJasper = getClass()
.getResourceAsStream(caminhoRelJasper);
// Datasource para o relatório criado a partir de uma lista de Beans
JRBeanCollectionDataSource ds = new JRBeanCollectionDataSource(
listaAlunos);
JasperPrint impressao = null;
try {
impressao = JasperFillManager.fillReport(relJasper, parametros, ds);
JasperViewer viewer = new JasperViewer(impressao, true);
viewer.setVisible(true);
} catch (JRException e) {
System.out.println(e.getMessage());
}
}
Outra Duvida, no IReport tenho que mexer e mais alguma coisa alem de Language Java ???
Poste o stacktrace para que eu possa visualizar melhor o erro.
Esta falando do meu InputStream mas eu tenho em c: o Alunos.jasper.
Exception in thread “main” java.lang.NullPointerException
at java.io.ObjectInputStream$PeekInputStream.read(ObjectInputStream.java:2264)
at java.io.ObjectInputStream$PeekInputStream.readFully(ObjectInputStream.java:2277)
at java.io.ObjectInputStream$BlockDataInputStream.readShort(ObjectInputStream.java:2748)
at java.io.ObjectInputStream.readStreamHeader(ObjectInputStream.java:780)
at java.io.ObjectInputStream.(ObjectInputStream.java:280)
at net.sf.jasperreports.engine.util.ContextClassLoaderObjectInputStream.(ContextClassLoaderObjectInputStream.java:53)
at net.sf.jasperreports.engine.util.JRLoader.loadObject(JRLoader.java:200)
at net.sf.jasperreports.engine.JasperFillManager.fillReport(JasperFillManager.java:603)
at br.projetofatec.Reports.TesteGUJ.geraRelatorio(TesteGUJ.java:38)
at br.projetofatec.Reports.TesteGUJ.main(TesteGUJ.java:48)
Use :
ao invés de:
String caminhoRelJasper = "/Alunos.jasper";
// Stream com o .jasper
InputStream relJasper = getClass()
.getResourceAsStream(caminhoRelJasper);
Nada tentei c:\alunos.jaspr \alunos.jasper kkk nada
relJasper continua vindo nulo!!!
Tá meio esquisito como você tá chamando o arquivo compilado.
Olha só eu tenho os seguintes pacotes:
emissor
emissor.report
emissor.report.src // aqui ficam os meus relatorios compilados, os arquivos .jasper
No pacote emissor eu tenho uma classe Main.class:
[code]package emissor;
/**
*
-
@author Francisco
*/
public class Main {
…[/code]
Para chamar os .jasper de qualquer lugar no meu sistema eu apenas faço isso:
Não tem erro, isso funciona certinho.
String caminhoRelJasper = "br/projetofatec/reports/alunos.jasper";
Coloquei assim agora na mesma pasta. Mesmo assim nao funcionou!!! k zica hen!!
Olá
Muito estranho não funcionar usando o caminho absoluto. Verificou se não está digitando algo errado, como por exemplo letras minúsculas no lugar de maiúsculas?
Sim sim garantido estou digitando certo. Repara que na primeira vez que era no c://Alunos.jasper agora e’ alunos.jasper para nao ter problemas eu recriei o jasper com outro nome!!!
mas mesmo assim nao vai…
O que você precisa é colocar mais código aqui, visualizando o código a gente pode ver algo que você não vê (isso acontece com todo mundo), mande mais código, se puder mande o jxml também.
Javer muito obrigado pela ajuda então ai vai!!
Meu AlunoVo:
public class AlunoVO {
private Long id;
private String nome;
private String cpf;
private String telefone;
private String status;
private EnderecoVO endereco;
// GET SET ...
}
ai tem o meu teste jasper que somente muda o endereco do jasper em relacao ao codigo acima.
package br.projetofatec.reports;
import java.io.InputStream;
import java.util.HashMap;
import java.util.List;
import net.sf.jasperreports.engine.JRException;
import net.sf.jasperreports.engine.JasperFillManager;
import net.sf.jasperreports.engine.JasperPrint;
import net.sf.jasperreports.engine.data.JRBeanCollectionDataSource;
import net.sf.jasperreports.view.JasperViewer;
import br.projetofatec.Delegate.AlunoDelegate;
import br.projetofatec.VO.AlunoVO;
public class TesteGUJ {
@SuppressWarnings("unchecked")
public void geraRelatorio() throws Exception {
AlunoDelegate alunoDelegate = new AlunoDelegate();
List<AlunoVO> listaAlunos = alunoDelegate.filtrarTodos(new AlunoVO());
HashMap parametros = new HashMap();
String caminhoRelJasper = "br/projetofatec/reports/alunos.jasper";
// Stream com o .jasper
InputStream relJasper = getClass()
.getResourceAsStream(caminhoRelJasper);
// Datasource para o relatório criado a partir de uma lista de Beans
JRBeanCollectionDataSource ds = new JRBeanCollectionDataSource(
listaAlunos);
JasperPrint impressao = null;
try {
impressao = JasperFillManager.fillReport(relJasper, parametros, ds);
JasperViewer viewer = new JasperViewer(impressao, true);
viewer.setVisible(true);
} catch (JRException e) {
e.printStackTrace();
}
}
public static void main(String[] args) throws Exception {
TesteGUJ guj = new TesteGUJ();
guj.geraRelatorio();
}
}
e por ultimo o alunos.jrxml
<?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="alunos" pageWidth="595" pageHeight="842" columnWidth="555" leftMargin="20" rightMargin="20" topMargin="20" bottomMargin="20">
<property name="ireport.zoom" value="1.0"/>
<property name="ireport.x" value="0"/>
<property name="ireport.y" value="0"/>
<field name="nome" class="java.lang.String"/>
<field name="endereco.cep" class="java.lang.String"/>
<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="125" splitType="Stretch">
<textField>
<reportElement x="17" y="0" width="100" height="20"/>
<textElement/>
<textFieldExpression class="java.lang.String"><![CDATA[$F{nome}]]></textFieldExpression>
</textField>
<textField>
<reportElement x="154" y="0" width="100" height="20"/>
<textElement/>
<textFieldExpression class="java.lang.String"><![CDATA[$F{endereco.cep}]]></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>
Bom, dentro do seu problema eu fiz um pequeno projeto (usando JasperReport e iReport 3.7.6) no qual a execução do relatório está funcionando 100%, compare com o seu aí e veja qual é o problema.
Pelo que vi seu problema não era no InputStream, porém era no DataSource, o arquivo zipado do projeto está anexado a essa mensagem.
Boa sorte.
Pessoal depois de muito tempo precisei novamente, na época novato e ainda sou porem consegui resolver!!
Em outro contexto mais ai vai!!
package util.testesdiversos;
import java.io.InputStream;
import java.util.HashMap;
import java.util.List;
import net.sf.jasperreports.engine.JRException;
import net.sf.jasperreports.engine.JasperFillManager;
import net.sf.jasperreports.engine.JasperPrint;
import net.sf.jasperreports.engine.data.JRBeanCollectionDataSource;
import net.sf.jasperreports.view.JasperViewer;
import to.ClienteTO;
import dao.ClienteDAO;
public class TesteEasyReport2 {
@SuppressWarnings("unchecked")
public static void main(String[] args) {
List<ClienteTO> beanCollection = null;
try {
ClienteDAO clienteDAO = new ClienteDAO();
beanCollection = clienteDAO.listarTodos(new ClienteTO());
HashMap parametros = new HashMap();
InputStream inputStream = TesteEasyReport2.class
.getResourceAsStream("/util/report/Teste1.jasper");
JRBeanCollectionDataSource ds = new JRBeanCollectionDataSource(
beanCollection);
JasperPrint impressao = null;
try {
impressao = JasperFillManager.fillReport(inputStream,
parametros, ds);
JasperViewer viewer = new JasperViewer(impressao, true);
viewer.setLocationRelativeTo(null);
viewer.setVisible(true);
} catch (JRException e) {
}
} catch (Exception e) {
}
}
}
Resolvi o que tinha neste post mesmo!! só vai a dica, tive problemas com repositório com versões diversas da mesmas lib !! estranho neh hehe