Fórum Tutorial de IREPORT #566409

09/04/2009

0

[b]Tutorial iReport 0.2.2[/b] Por [url=http://www.javafree.com.br/forum/profile.php?mode=viewprofile&u=2936]Bruno R. Lima[/url] ( aebrlima@hotmail.com ) Criando relatórios JasperReports utilizando iReport e uma conexão JDBC. + O QUE É IREPORT ? + CRIANDO UM RELATORIO SIMPLES ++ Iniciando o iReport ++ Criando um Relatório ++ Criando a origem dos dados ++ Selecionado a visualização no Ireport ++ Criando o SELECT dos dados ++ Construindo o relatório [i][b]O QUE É O IREPORT ?[/b][/i] O iReport é uma ferramenta que visa facilitar a construção de relatórios utilizando a biblioteca JasperReports ( http://jasperreports.sourceforge.net ) através de uma interface gráfica desenvolvida em Swing. Ele dispõe de importantes ferramentas para desenvolver relatórios complexos e demorados. Mesmo sem nenhum conhecimento das bibliotecas do JasperReports, você consegue criar relatórios muito interessantes através desta ferramenta e aprender a entender as tags XML utilizadas no JasperReports. [i][b]CRIANDO UM RELATORIO SIMPLES[/b][/i] Iniciando o iReport Se você tiver o Ant instalado em sua maquina, altere o arquivo iReport.bat e iReport.sh para setar o diretório de instalação. Se você não tem o Ant instalado, vá ao subdiretório noAnt e execute o arquivo startup.bat para iniciá-lo. Criando um Relatório No menu File, clique em New Document; Irá aparecer a janela para configurar o seu relatório, entre essas configurações estão o nome do relatório, tamanho da folha utilizada, margens, colunas do relatório entre outras opções. Para configurar um relatório já criado, alterar o tamanho da folha, margens, etc. vá ao menu View > Report Properties. [i][b]Criando a origem dos dados[/b][/i] [b]1[/b]. Agora vamos criar uma conexão JDBC para enxergar o banco de dados. [b]2[/b]. Va ao menu DataSources > Connections / DataSources. [b]3[/b]. Irá aparecer uma janela contendo as suas conexões de fonte de dados. Agora iremos criar uma conexão JDBC. [b]4[/b]. Clique no botão New; Selecione em "Type Of Connection / DataSource" a opção "DataBase JDBC Connection". [b]5[/b]. Defina um nome para a conexão: este nome é apenas para identificá-lo no iReport. Ex: "MinhaConexao" [b]6[/b]. Agora você deve selecionar o driver JDBC a ser utilizado. Neste caso vamos utilizar o driver da Oracle, "oracle.jdbc.driver.OracleDriver". Preencha também a URL de conexão com o banco: "jdbc:oracle:thin:@<maquina>:<porta>:<instancia>". Você deve substituir as opções: - <maquina> - Endereço da maquina onde o banco de encontra. Ex: 192.168.0.1; - <porta> - Porta de conexão do banco; Default 1521; - <instancia> - A instancia do banco. Ex: oradata; Neste caso nossa URL seria: "jdbc:oracle:thin:@192.168.0.1:1521:oradata". [b]7[/b]. Informe os campos "Database" com a instancia do banco, "User" com o usuário e "password" com a senha do seu banco. Essas informações são necessárias para o iReport conectar-se no banco para obter informações da coluna. Clique em TEST para testar se a conexão está ok. Se estiver tudo em ordem, clique na opção SAVE para salvar sua conexão. Se você quiser alterar alguma dessas informações, clique no botão "Modify" da janela "Connections/Datasources". Após criada a conexão, apenas clique no "X" no canto já janela para fechá-la. Agora que você criou sua conexão, devemos informar que vamos usá-la no relatório, então vá ao menu "Build" e clique na opção "Set Active Connection". Irá aparecer uma lista das conexões disponíveis. Clique na conexão que criamos, a "MinhaConexao" e clique em ok para selecioná-la. [i][b]Selecionado a visualização no IReport[/b][/i] Após criada a conexão, devemos selecionar qual forma queremos visualizar nosso relatório depois de pronto. As opções disponíveis são aquelas que o Jasper disponibiliza. Vamos selecionar a opção PDF Preview para ver em PDF. [i][b]Criando o SELECT dos dados[/b][/i] Bem, como o relatório é apenas fictício, criaremos a seguinte query para retornar apenas alguns campos utilizados no relatório.
SELECT 'Meu Primeiro Relatorio' TITULO,
       SYSDATE DATA_CORRENTE,
       5000 DIAS
FROM DUAL
[b]1[/b]. Vá para o menu "Datasource > Report Queries". [b]2[/b]. Ao abrir a janela, encontra-se a area onde deverá ser digitado a sua query. Nesta janela, você pode criar qualquer query, pois o que importa é o resultado dela. [b]3[/b]. Após digitar sua query, veja que existem os botões "Read Fields" e "Save Query To Report". Clique no primeiro, "Read Field", que irá ler os campos que sua query retorna. Os campos irão aparecer na parte de baixo da janela, com o nome identificado na query e seu tipo correspondete no JDBC. No nosso caso irão aparece os seguintes campos: - TITULO : java.lang.String - DATA_CORRENTE : java.sql.Timestamp - DIAS : java.lang.Double [b]4[/b]. Selecione estes campos, clicando no primeiro, segure a tecla SHIFT e clique no ultimo. Clique no botão "Register Fields To Report". Isto fará com que os campos selecionados sejam criados ( registrados ) no relatório, para poderem ser utilizados. O botão "Clear List" limpa os campos encontrados na sua query. Se você, por acaso mais tarde resolver incluir um novo campo na sua query, ao clicar no "Register Fields To Report" ele irá verificar se os campos que estão retornando na query já estão registrados no relatório, e não irão ser exibidos, exibindo assim somente os campos novos. Para utilizar parâmetros no SQL, teremos que adicioná-los depois de criados os campos. Por que? Porque o iReport executa a query do jeito que esta no banco, e se existir algum parâmetro do iReport em sua query, ele irá reclamar, gerando um erro de SQL. 5. Antes de fechar a janela, altere sua query adicionando o parâmetro que iremos criar chamado de "PARAM1":
SELECT ?Meu Primeiro Relatorio? TITULO,
       SYSDATE DATA_CORRENTE,
       5000 DIAS,
       $P PARAMETRO
FROM DUAL
Para trabalhar com parametros nas queries, devemos identificar que o valor é um valor do iReport, que deverá ser substituido. Por isso utilizamos a sintaxe $P{"nome do parametro"}. Assim, quando executarem a nossa query no relatorio, irão substituir esse valor pelo valor que passaremos como parametro no relatório. No caso de uma variavel, a sintaxe muda para $V{"nome da variavel"}. Agora clique em "Save Query to Report" e clique em Close para salvar a query e fechar a janela. [i][b]Construindo o relatório[/b][/i] Vamos verificar se os campos foram criados corretamente. No meu "View", clique na opção "Report Fields", para abrir a janela dos campos do relatório. Nesta janela é possível visualizar os campos criados no relatório, bem como as variáveis do relatório e os parâmetros. Agora devemos criar o parâmetro que incluímos na nossa query, o "PARAM1". [b]1[/b]. Com a janela que exibe os campos aberta, vá na aba "Parameters". [b]2[/b]. Clique em "New"; Informe o nome do parâmetro, no caso "PARAM1", o tipo do parâmetro, neste caso java.lang.String, e um valor default, informe "VALOR DO PARAMETRO". Informe também uma descrição do parâmetro. [b]3[/b]. Clique em Ok, verifique que o parametro foi criado. Feche a janela. [i][b]Após criar o parâmetro, vamos adicionar os campos na tela.[/b][/i] [b]1[/b]. No menu "Edit" vá na opção "Insert Element...". Aparecerá os elementos que você pode inserir em seu relatório. Vamos inserir um "Static Text" clicando nesta opção. Um "Static Text" é como um label, onde o seu texto ficará estático: você informa o texto. [b]2[/b]. Verifique que o cursor do mouse alterou. Clique em um local do seu relatório, de preferência na área "Page Header", que é o cabeçalho de pagina para incluir o campo. [b]3[/b]. Clique agora no menu "View" e selecione a opção "Element Property". Irá aparecer a janela com as propriedades do campo criado. [b]4[/b]. Vamos alterar o tamanho dele. Altere a propriedade Width e Height para o tamanho desejado. Você pode também alterar o tamanho direto no layout do relatório apenas clicando e arrastando pelas bordas do objeto. Para deixar um tamanho padrao, vamos setar as propriedades para: - Width: 300 - Height: 30 - Top: 10 - Left: 120 [b]5[/b]. Na segunda aba da janela, "Font" vamos informar a fonte usada no objeto, clique nela. Altere as propriedade para: - "Font Name" = "Arial" - "Size" = 18 - "Bold" = Checked - "Horizontal Align" = Center - "Vertical Align" = Middle [b]6[/b]. Na terceira aba, "Static Text" é onde vamos informar o texto que deverá aparecer, clique nela. Na área que aparece, apague o texto e digite: "Relatório Ireport - JasperReport". Pode fechar a janela, clicando no (X). [b]7[/b]. Para facilitar nossa vida, na barra de menu tem os botões de atalho. Para criar um Text Field, clique no botão que contem a letra "F".Clique agora em alguma área do relatório, de preferência dentro da área escrita "Detail", onde se encontram os detalhes. Após inserir o campo, de um duplo clique sobre ele, e verá que aparece a caixa de propriedades do objeto. É semelhante as propriedades de um "Static Text" exceto pelas novas abas "Text Field" e "Hyper Link". Altere as propriedades abaixo na aba "Commom" - Width: 280 - Height: 18 - Top: 10 - Left: 15 [i][b]Feche a janela de propriedades do objeto.[/b][/i] [b]8[/b]. Vamos criar os outros dois campos do relatório: Repita o mesmo procedimento anterior para incluir um campo, mas alterar a propriedade Top para 30 em um e 50 no outro campo. Assim você irá criar mais 2 campos um logo abaixo do outro. [b]9[/b]. Dê um duplo clique no primeiro campo criado para verificar suas propriedades. Na janela de propriedades, clique na aba "Text Field" para alterarmos as propriedades de campos dele. A propriedade "Textfield Expression Class" é a classe que esse textfield irá representar. No nosse exemplo, esse campo irá representar o titulo que retornará da query. Altere para java.lang.String. A propriedade "Text Field Expression" é o valor que a mesma irá imprimir, preencha com $F. Sem fechar a janela, seleciona o segundo campo criado no relatório. Na mesma aba selecionada, a "Text Field" das propriedades do campo, altera as propriedades "TextField Expression Class" para java.util.Date e a propriedade "Text Field Expression" para $F. Altere a propriedade Pattern para "dd/MM/yyyy", que é o formato que queremos exibir a data. Agora clique no terceiro campo criado e altere as propriedades "TextField Expression Class" para java.lang.Double, "Text Field Expression" para $F e o Pattern para "0000". Após finalizar a configuração dos campos, clique em Save no meu File para salvar o arquivo, ou no disquete na barra de atalho. Informe o arquivo XML para o qual deseja salvar seu relatório. Confirme. Para compilar o seu relatório e gerar um arquivo . JASPER, clique no botão laranja, ao lado do zoom de visualização do relatório. Para executar seu relatório utilizando a conexao ativa, vá em "Build" e "Execute Report ( using active conn )".
Dalton

Dalton

Responder

Posts

09/04/2009

Wheb Ltda.

Seguinte cara,,, Vc possui algum exemplo de como alimentar um relatorio feito em JasperReport através de um Collection ou Array?? Pq até agora soh vi exemplo com sql do banco.
Responder

Gostei + 0

09/04/2009

Rafael Ferreira

Olá.... Finalmente consegui fazer o iReport funcionar... Só não ficou claro para mim, como que eu executo ele de "fora", como de um software que eu fiz em java posso chamar o iReport e utilizar já um relatorio pronto... Ainda ficou essa duvida!! agradeço muito Rafael Ferreira
Responder

Gostei + 0

09/04/2009

Wheb Ltda.

Caro Rafael Ferreira Para executar um relaótiro feito pelo Ireport vc utilizará o arquivo compilado do seu relatório XX.jrxml Logo vc criara um classe em java que será chamada pelo seu programa. Algo parecido com :
import java.io.IOException;
import java.io.StringReader;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.ResultSet;
import java.sql.Statement;
import java.util.HashMap;

import javax.swing.text.BadLocationException;
import javax.swing.text.rtf.RTFEditorKit;

import net.sf.jasperreports.engine.JasperManager;
import net.sf.jasperreports.engine.JasperPrint;
import net.sf.jasperreports.engine.JasperReport;
import net.sf.jasperreports.engine.design.JasperDesign;
import net.sf.jasperreports.view.JasperViewer;

/* Primeira parte */
public class RelatorioLaboratorio {
	
	
	private Connection con = null;
	private String driver = "oracle.jdbc.driver.OracleDriver";
	private String endereco = "enderecoBanco";
	private String user = "usuarioBanco";
	private String pass = "senhaBanco";
	private ResultSet rs = null;
	private String valores[] = new String[10];
	private int chamada = 1;
	private String dir = "local onde está o arquivo do relatorio";
	private StringReader stream;
	/*Segunda parte */
	
	public RelatorioLaboratorio() { 
		/* Efetua a conexao a base de dados e coleta os valores da base de dados armazenando-os
		 em um array para ser futuramente utilizado */
		try {
			if (con == null) {
				Class.forName(driver);
				con = DriverManager.getConnection(endereco, user, pass);
				Statement statement = con.createStatement();
				rs = statement.executeQuery("select a ser executado");
				HashMap teste = new HashMap();
				while(rs.next()) {
					//for até o numero de campos da tabela
					for (int i = 1; i < 10; i++) {
						valores[i] = rs.getString(i);
					}
				}
			}
		}
		catch (Exception e) {
			System.err.println("Problemas apresentados na operacao de conexao");
			e.printStackTrace();
		}
		/* Inicio do bloco que ira gerar nossos relatorios e 3ª parte */
		try {
			String array[] = valores;
			JasperDesign design = JasperManager.loadXmlDesign(dir + "NomeDoRelatorio.jrxml"); 
			JasperReport jr = JasperManager.compileReport(design);
			HashMap parameters = new HashMap();
			parameters.put("PARAMETRO_1",array[1]);
			parameters.put("PARAMETRO_2", array[2]);
			parameters.put("PARAMETRO_3", array[5]);
			parameters.put("PARAMETRO_4", array[4]);
			parameters.put("PARAMETRO_5",array[9]);
			JasperPrint impressao = JasperManager.fillReport(jr,parameters,con);
			JasperViewer jrviewer = new JasperViewer(impressao,false);
			jrviewer.show();
		}
		catch (Exception e) {
			e.printStackTrace();
		}
	}
	/* Aqui chamamos o construtor de nossa classe para exibirmos o relatorio e 4ª parte*/
	public static void main (String args[]) {
		new RelatorioLaboratorio();
		System.out.println("ok");
	}
}

Responder

Gostei + 0

09/04/2009

Raphael Santos

Galera.... estou gerando relatorios com o ireport numa boa, mas estou com um pequeno problema. A quebra de página está errada, ele está quebrando com +- 2/3 da página e ja começa o conteúdo da proóxima página na mesma. Se alguém tiver alguma idéia de como resolver isso, responda pf.
Responder

Gostei + 0

09/04/2009

Rafael Ferreira

Desculpe a lerdeza... Mas voltei a implementar esse meu projeto... Montei o meu software que joga tudo no banco e consegui fazer o iReport rodar e montei o relatorio e tudo funciona.. Está faltando a integração entre os 2. Copiei o codigo que o amigo colocou lá em cima... Mas estou tendo erros nas lib´s.... não acha aqui pra compilar
import net.sf.jasperreports.engine.JasperManager;
import net.sf.jasperreports.engine.JasperPrint;
import net.sf.jasperreports.engine.JasperReport;
import net.sf.jasperreports.engine.design.JasperDesign;
import net.sf.jasperreports.view.JasperViewer;
RelatorioLaboratorio.java [12:1] package net.sf.jasperreports.engine does not exist import net.sf.jasperreports.engine.JasperManager; ^ RelatorioLaboratorio.java [13:1] package net.sf.jasperreports.engine does not exist import net.sf.jasperreports.engine.JasperPrint; ^ RelatorioLaboratorio.java [14:1] package net.sf.jasperreports.engine does not exist import net.sf.jasperreports.engine.JasperReport; ^ RelatorioLaboratorio.java [15:1] package net.sf.jasperreports.engine.design does not exist import net.sf.jasperreports.engine.design.JasperDesign; ^ RelatorioLaboratorio.java [16:1] package net.sf.jasperreports.view does not exist import net.sf.jasperreports.view.JasperViewer;
Se alguem puder me ajudar... agradeço muito!! Ceará
Responder

Gostei + 0

09/04/2009

Djeff

[quote="Luis Coelho"]Caro Rafael Ferreira Para executar um relaótiro feito pelo Ireport vc utilizará o arquivo compilado do seu relatório XX.jrxml Logo vc criara um classe em java que será chamada pelo seu programa. Algo parecido com :
import java.io.IOException;
import java.io.StringReader;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.ResultSet;
import java.sql.Statement;
import java.util.HashMap;

import javax.swing.text.BadLocationException;
import javax.swing.text.rtf.RTFEditorKit;

import net.sf.jasperreports.engine.JasperManager;
import net.sf.jasperreports.engine.JasperPrint;
import net.sf.jasperreports.engine.JasperReport;
import net.sf.jasperreports.engine.design.JasperDesign;
import net.sf.jasperreports.view.JasperViewer;

/* Primeira parte */
public class RelatorioLaboratorio {
	
	
	private Connection con = null;
	private String driver = "oracle.jdbc.driver.OracleDriver";
	private String endereco = "enderecoBanco";
	private String user = "usuarioBanco";
	private String pass = "senhaBanco";
	private ResultSet rs = null;
	private String valores[] = new String[10];
	private int chamada = 1;
	private String dir = "local onde está o arquivo do relatorio";
	private StringReader stream;
	/*Segunda parte */
	
	public RelatorioLaboratorio() { 
		/* Efetua a conexao a base de dados e coleta os valores da base de dados armazenando-os
		 em um array para ser futuramente utilizado */
		try {
			if (con == null) {
				Class.forName(driver);
				con = DriverManager.getConnection(endereco, user, pass);
				Statement statement = con.createStatement();
				rs = statement.executeQuery("select a ser executado");
				HashMap teste = new HashMap();
				while(rs.next()) {
					//for até o numero de campos da tabela
					for (int i = 1; i < 10; i++) {
						valores[i] = rs.getString(i);
					}
				}
			}
		}
		catch (Exception e) {
			System.err.println("Problemas apresentados na operacao de conexao");
			e.printStackTrace();
		}
		/* Inicio do bloco que ira gerar nossos relatorios e 3ª parte */
		try {
			String array[] = valores;
			JasperDesign design = JasperManager.loadXmlDesign(dir + "NomeDoRelatorio.jrxml"); 
			JasperReport jr = JasperManager.compileReport(design);
			HashMap parameters = new HashMap();
			parameters.put("PARAMETRO_1",array[1]);
			parameters.put("PARAMETRO_2", array[2]);
			parameters.put("PARAMETRO_3", array[5]);
			parameters.put("PARAMETRO_4", array[4]);
			parameters.put("PARAMETRO_5",array[9]);
			JasperPrint impressao = JasperManager.fillReport(jr,parameters,con);
			JasperViewer jrviewer = new JasperViewer(impressao,false);
			jrviewer.show();
		}
		catch (Exception e) {
			e.printStackTrace();
		}
	}
	/* Aqui chamamos o construtor de nossa classe para exibirmos o relatorio e 4ª parte*/
	public static void main (String args[]) {
		new RelatorioLaboratorio();
		System.out.println("ok");
	}
}

eu tava usando o código disponível no guj e não tava conseguindo gerar a visualização do iReport e graças ao código disponibilizado aqui consegui gerar a visualização do meu relatório, muito obrigado aih Luis Coelho :o quanto a dúvida ali das lib's, uma pergunta: Elas foram importadas para a sua IDE??? Por exemple, eu to usando o JBuilder X, para poder encontrá-las tive que ir em required libraries e adicionar os arquivos da pasta lib do iReport, aih elas foram reconhecidas :!:
Responder

Gostei + 0

09/04/2009

Suelen Vinter

EhMeu código é o seguinte: import net.sf.jasperreports.engine.data.JRXmlDataSource; import net.sf.jasperreports.engine.export.JRPdfExporter; import net.sf.jasperreports.engine.*; import java.util.HashMap; public class Relatorio { public static void main(String[] args) throws Exception { String reportFileName = "addressbook.jasper"; String outFileName = "addressbook.pdf"; String xmlFileName = "bd.xml"; String recordPath = "/Northwind/Customers"; JRXmlDataSource jrxmlds = new JRXmlDataSource(xmlFileName,recordPath); HashMap hm = new HashMap(); try { JasperPrint print = JasperFillManager.fillReport( reportFileName, hm, jrxmlds); JRExporter exporter = new net.sf.jasperreports.engine.export.JRPdfExporter(); exporter.setParameter(JRExporterParameter.OUTPUT_FILE_NAME,outFileName); exporter.setParameter(JRExporterParameter.JASPER_PRINT,print); exporter.exportReport(); System.out.println("Created file: " + outFileName); } catch (JRException e) { e.printStackTrace(); System.exit(1); } catch (Exception e) { e.printStackTrace(); System.exit(1); } } } Eu queria saber pq o seguinte erro está ocorrendo? Ao executar... C:\j2sdk1.4.2_08\bin\java.exe -classpath "C:\j2sdk1.4.2_08\jre\lib\rt.jar;C:\j2sdk1.4.2_08\lib\tools.jar;C:\j2sdk1.4.2_08\jasperreports-0.6.6.jar;E:\relatorio" Relatorio org.xml.sax.SAXParseException: Document root element is missing. at org.apache.crimson.parser.Parser2.fatal(Parser2.java:3376) at org.apache.crimson.parser.Parser2.fatal(Parser2.java:3364) at org.apache.crimson.parser.Parser2.parseInternal(Parser2.java:668) at org.apache.crimson.parser.Parser2.parse(Parser2.java:337) at org.apache.crimson.parser.XMLReaderImpl.parse(XMLReaderImpl.java:448) at org.apache.crimson.jaxp.DocumentBuilderImpl.parse(DocumentBuilderImpl.java:185) at net.sf.jasperreports.engine.data.JRXmlDataSource.parse(JRXmlDataSource.java:248) at net.sf.jasperreports.engine.data.JRXmlDataSource.<init>(JRXmlDataSource.java:219) at Relatorio.main(Relatorio.java:16) NESTED BY : org.xml.sax.SAXParseException: Document root element is missing. at org.apache.crimson.parser.Parser2.fatal(Parser2.java:3376) at org.apache.crimson.parser.Parser2.fatal(Parser2.java:3364) at org.apache.crimson.parser.Parser2.parseInternal(Parser2.java:668) at org.apache.crimson.parser.Parser2.parse(Parser2.java:337) at org.apache.crimson.parser.XMLReaderImpl.parse(XMLReaderImpl.java:448) at org.apache.crimson.jaxp.DocumentBuilderImpl.parse(DocumentBuilderImpl.java:185) at net.sf.jasperreports.engine.data.JRXmlDataSource.parse(JRXmlDataSource.java:248) at net.sf.jasperreports.engine.data.JRXmlDataSource.<init>(JRXmlDataSource.java:219) at Relatorio.main(Relatorio.java:16) NESTED BY : net.sf.jasperreports.engine.JRException: Failed to parse the xml document at net.sf.jasperreports.engine.data.JRXmlDataSource.parse(JRXmlDataSource.java:250) at net.sf.jasperreports.engine.data.JRXmlDataSource.<init>(JRXmlDataSource.java:219) at Relatorio.main(Relatorio.java:16) Caused by: org.xml.sax.SAXParseException: Document root element is missing. at org.apache.crimson.parser.Parser2.fatal(Parser2.java:3376) at org.apache.crimson.parser.Parser2.fatal(Parser2.java:3364) at org.apache.crimson.parser.Parser2.parseInternal(Parser2.java:668) at org.apache.crimson.parser.Parser2.parse(Parser2.java:337) at org.apache.crimson.parser.XMLReaderImpl.parse(XMLReaderImpl.java:448) at org.apache.crimson.jaxp.DocumentBuilderImpl.parse(DocumentBuilderImpl.java:185) at net.sf.jasperreports.engine.data.JRXmlDataSource.parse(JRXmlDataSource.java:248) ... 2 more Exception in thread "main" Finished executing
Responder

Gostei + 0

09/04/2009

Djeff

EhPessoal, Estou com outra duvida: Não consigo gerar um relatorio apartir de um XML (jrxml), isso em uma aplicação WEB, pq quanto estou testando por um metodo main no meu projeto java, pega tranquilo. Eu ja havia passado por isso antes, mas me livrei usando o arquivo ja copilado (.jasper), so que dessa vez eu tenho que usar o JRXML e compilar.
JasperDesign jasperDesign = JasperManager.loadXmlDesign(arqJrxml);
 //O erro ocorre justamente aqui:
JasperReport jasperReport = JasperManager.compileReport(jasperDesign);
O erro é o seguinte:
C:\eclipse3.1\relacaoTransacaoTesouraria_groupGenerico.java:4: package net.sf.jasperreports.engine does not exist
 import net.sf.jasperreports.engine.*;
 ^
 C:\eclipse3.1\relacaoTransacaoTesouraria_groupGenerico.java:5: package net.sf.jasperreports.engine.fill does not exist
 import net.sf.jasperreports.engine.fill.*;
 ^
 C:\eclipse3.1\relacaoTransacaoTesouraria_groupGenerico.java:17: cannot resolve symbol
 symbol  : class JRCalculator 
 location: class relacaoTransacaoTesouraria_groupGenerico
 public class relacaoTransacaoTesouraria_groupGenerico extends JRCalculator
 ......... 
Eu acho o seguinte, ele tenta copilar e gera esse *.java temporariamente, so que ele esta pegando um caminho doido, no meu caso o "C:\eclipse3.1\" ao inves do path da minha aplicação. E nesse caminho ele não tem acesso ao jar do JasperReport, entao ele nao acha nenhuma das suas classes. Alguem já teve esse problema?
Responder

Gostei + 0

09/04/2009

Jeferson Junior

Eu acabei de achar um outro forum onde o rapaz teve o mesmo problema e sabe como resolve? Colocando um tal de jdt.compiler.jar dentro do lib do teu WEB-INF. Dá uma olhadinha na url que me resolveu o problema:http://dev.eclipse.org/newslists/news.eclipse.platform.rcp/msg05138.html Boa Sorte!, Jeff
Responder

Gostei + 0

09/04/2009

Artur Carvalho

Uma maneira de fazer relatórios zebrados, na band Detail, adicionar o retangulo q ira aparecer linha sim linha nauh. Na propriedade desse retangulo, na aba common no espaço Print When Expression adicionar a seguinte regra: new Boolean(($V.intValue() % 2) == 0)
Responder

Gostei + 0

09/04/2009

Djeff

Ae galera !!!!! Como faço para importar: import net.sf.jasperreports.engine.JasperManager; import net.sf.jasperreports.engine.JasperPrint; import net.sf.jasperreports.engine.JasperReport; import net.sf.jasperreports.engine.design.JasperDesign; import net.sf.jasperreports.view.JasperViewer; tentei importar no eclipse,mas não consegui... O q dvo fazer para poder importar essas classes ???? :mad:
Responder

Gostei + 0

09/04/2009

Fabricio Viana

Como faço para gerar um relatorio frente e verço E assim tenho um relatorio no ireport frente e outro verso Como falço para ele gerarem um frente e outro verso
Responder

Gostei + 0

09/04/2009

Fabricio Viana

Pessoal, eu estou fazendo um relatório que contém alguns subrelatórios. Como faço para forçar uma quebra de página antes de cada subrelatório?
Responder

Gostei + 0

09/04/2009

Fabricio Viana

tenho a seguinte query funcionando: select cst.CST_NOME nomeConsultor, tabelaR.totalMinutos totalMinutosConsultor, tabelaR.nomeProjeto nomeProjeto from rel_consultor cst, --tabelaR (select h.HRS_PRJCST_CST_LOGIN login, sum( NVL( (to_char(h.HRS_SAIDA_AM,'HH24')*60+to_char(h.HRS_SAIDA_AM,'MI')) -(to_char(h.HRS_ENTRADA_AM,'HH24')*60+to_char(h.HRS_ENTRADA_AM,'MI')),0 ) + NVL((to_char(h.HRS_SAIDA_PM,'HH24')*60 + to_char(h.HRS_SAIDA_PM,'MI')) -(to_char(h.HRS_ENTRADA_PM,'HH24')*60 + to_char(h.HRS_ENTRADA_PM,'MI')),0 )) totalMinutos, p.PRJ_NOME nomeProjeto from rel_horas h, rel_projeto p where h.HRS_PRJCST_PRJ_COD in(2526,2830,2521,2833,87,34,36,40) and h.HRS_PRJCST_PRJ_COD=p.PRJ_COD and (h.HRS_DATA between to_date($P,'DD/MM/YYYY') and to_date($P,'DD/MM/YYYY')) group by h.HRS_PRJCST_CST_LOGIN, p.PRJ_NOME) tabelaR --fim tabelaR where tabelaR.login = cst.CST_LOGIN order by tabelaR.nomeProjeto, cst.CST_NOME O problema esta quando eu tento passar um parametro para o "in()" da linha : where h.HRS_PRJCST_PRJ_COD in(2526,2830,2521,2833,87,34,36,40) ja tentei passar um parametro do tipo string da seguinte forma: where h.HRS_PRJCST_PRJ_COD in($P) e o conteudo de codProjeto seria uma string como essa: "2526,2830,2521,2833,87,34,36,40" o que não deu certo. dessa forma soah funciona quando eu tenho apenas 1 projeto : "2526". não encontrei uma forma de passar um vetor ou algo parecido. resumindo: como faço para passar um parâmetro para a clausula in() se alguem puder me ajudar agradeço...
Responder

Gostei + 0

09/04/2009

Gerda Oliveira

Pessoal, fiz um relatorio no ireport. depois fiz um servlet. e agora?????????????? como faço para chamar o relatorio na pagina web(html)?
Responder

Gostei + 0

Utilizamos cookies para fornecer uma melhor experiência para nossos usuários, consulte nossa política de privacidade.

Aceitar