Dúvida IReport + Java

5 respostas
marthian_2

Pessoal tou tentando rodar um relatório mas num tou conseguindo....

Ja tentei os diversos exeplos do google e nada.....

Eu 100% inesperiente no assunto.

Segue abaixo o código:

Interface JRDataSource
import net.sf.jasperreports.engine.JRField;

public interface JRDataSource{
	
	public Object getFieldValue(JRField jrFiels);

	public boolean next();

}

ClienteJRDataSource

import java.util.Iterator;
import java.util.Vector;

import net.sf.jasperreports.engine.JRDataSource;
import net.sf.jasperreports.engine.JRException;
import net.sf.jasperreports.engine.JRField;

public class ClienteJRDataSource implements JRDataSource {



	private Iterator<Cliente> iterator;

	private Cliente cursor;

	public ClienteJRDataSource(Vector<Cliente> cliente) {
		super();
		iterator = cliente.iterator();
	}

	public boolean next() throws JRException {
		boolean retorno = iterator.hasNext();
		if(retorno){
			cursor=iterator.next();
		}
		return retorno;
	}

	public Object getFieldValue(JRField nome) throws JRException {
		Cliente cliente = cursor;
		if (nome.getName().equals("NOME")) {
			return cliente.getNome();
		}
		if (nome.getName().equals("CODIGO")) {
			return cliente.getCodigoControle();
		}
		if (nome.getName().equals("CPF")) {
			return cliente.getCodigo();
		}
		return null;
	}

}
ClienteJRDatSourceFactory
import java.util.Vector;

import net.sf.jasperreports.engine.JRDataSource;

public class ClienteJRDataSourceFactory {

	private static JRDataSource data;

	public static JRDataSource createDatasource() {
		if (data == null) {
			Cliente c=new Cliente();
			c=new Cliente("Maria Chiquinha","[CPF removido]","A001");
			Vector<Cliente> cliente=new Vector<Cliente>();
			cliente.add(c);
			c=new Cliente("João Paulo", "[CPF removido]", "A002");
			cliente.add(c);
			c=new Cliente("José da Silva", "[CPF removido]", "A003");
			cliente.add(c);
			data = new ClienteJRDataSource(cliente);
		}
		return data;
	}
}
Principal
import java.util.HashMap;
import java.util.Map;

import net.sf.jasperreports.engine.JRDataSource;
import net.sf.jasperreports.engine.JRException;
import net.sf.jasperreports.engine.JasperFillManager;
import net.sf.jasperreports.view.JasperViewer;

public class Gerarelatorio {
	public static void gerarRelatorio(JRDataSource source) throws JRException {

		Map map = new HashMap();
		JasperFillManager.fillReportToFile("Teste.jasper", map, source);
		JasperViewer.viewReport("Teste.jrprint", false);

	}

	public static void main(String[] args) {

		try {
			Gerarelatorio.gerarRelatorio(ClienteJRDataSourceFactory
					.createDatasource());
		} catch (JRException e) {
			e.printStackTrace();
		}

	}
}

Testei outros tb.. mas nada......

Quero adicionar uma collection em um relatório.... na verdade é uma tabela.....

5 Respostas

igor_jua

vc tem que colocar o diretorio do seu .jasper

ou seja…se ele estiver dentro do seu source vc tem que fazer
\Teste.jasper

Entendeu?

marthian_2

O .jasper e as classes estão no mesmo diretorio… Na pasta raiz do projeto…

marthian_2

Dá esse erro:

net.sf.jasperreports.engine.JRException: java.io.FileNotFoundException: \Teste.jasper

at net.sf.jasperreports.engine.util.JRLoader.loadObject(JRLoader.java:81)

at net.sf.jasperreports.engine.JasperFillManager.fillReportToFile(JasperFillManager.java:462)

at Gerarelatorio.gerarRelatorio(Gerarelatorio.java:13)

at Gerarelatorio.main(Gerarelatorio.java:21)

Caused by: java.io.FileNotFoundException: \Teste.jasper

 4 more
marthian_2

Copiei todas os .jar do ireport e ccolei na lib do meu projeto… adicionei no claspath e agora dá outro erro:

Exception in thread "main" java.lang.IllegalArgumentException: When using array of Objects as the value of SCHEMA_SOURCE property , no two Schemas should share the same targetNamespace. at org.apache.xerces.impl.xs.XMLSchemaLoader.processJAXPSchemaSource(Unknown Source) at org.apache.xerces.impl.xs.XMLSchemaLoader.loadSchema(Unknown Source) at org.apache.xerces.impl.xs.XMLSchemaValidator.findSchemaGrammar(Unknown Source) at org.apache.xerces.impl.xs.XMLSchemaValidator.handleStartElement(Unknown Source) at org.apache.xerces.impl.xs.XMLSchemaValidator.startElement(Unknown Source) at org.apache.xerces.impl.dtd.XMLDTDValidator.startElement(Unknown Source) at org.apache.xerces.impl.XMLNSDocumentScannerImpl.scanStartElement(Unknown Source) at org.apache.xerces.impl.XMLNSDocumentScannerImpl$NSContentDispatcher.scanRootElementHook(Unknown Source) at org.apache.xerces.impl.XMLDocumentFragmentScannerImpl$FragmentContentDispatcher.dispatch(Unknown Source) at org.apache.xerces.impl.XMLDocumentFragmentScannerImpl.scanDocument(Unknown Source) at org.apache.xerces.parsers.DTDConfiguration.parse(Unknown Source) at org.apache.xerces.parsers.DTDConfiguration.parse(Unknown Source) at org.apache.xerces.parsers.XMLParser.parse(Unknown Source) at org.apache.xerces.parsers.AbstractSAXParser.parse(Unknown Source) at org.apache.commons.digester.Digester.parse(Digester.java:1745) at net.sf.jasperreports.engine.xml.JRXmlLoader.loadXML(JRXmlLoader.java:239) at net.sf.jasperreports.engine.xml.JRXmlLoader.loadXML(JRXmlLoader.java:226) at net.sf.jasperreports.engine.xml.JRXmlLoader.load(JRXmlLoader.java:214) at net.sf.jasperreports.engine.xml.JRXmlLoader.load(JRXmlLoader.java:168) at net.sf.jasperreports.engine.xml.JRXmlLoader.load(JRXmlLoader.java:152) at net.sf.jasperreports.engine.JasperCompileManager.compileReport(JasperCompileManager.java:150) at Gerarelatorio.main(Gerarelatorio.java:31)

B

Olá marthian_2, conseguiu resolver o seu problema?

Estou tentando executar o mesmo exemplo que vc utilizou, mas qdo mando compilar o relatório no iReport, me dá a mensagem de erro que o campo NOME não existe, aconteceu isso com vc tb?

[]s
Bruno

Criado 5 de agosto de 2009
Ultima resposta 30 de out. de 2009
Respostas 5
Participantes 3