[size=12]Eu estou começando a usar java, e estou fazendo um sistema simples para emitir relatorios com o Ireport mas ñ sei como eu faço para q no meu sistema chame o relatorio ja criado no ireport para o sistema, ele funcionaria da seguinte maneira, é um sistema onde vc entra com os dados e poe para imprimir ñ existe conexão com banco de dados, ele teria apenas q pegar os dados preenchidos no textfield e jogar para os respectivos campos no relatorioa, colocando os dados nesse textfield ele aperta o botão imprimir ai ele imprimiria o relatorio com os dados, era isso q eu queria q o sistema fizesse mas eu ñ sei como fazer alguem poderie me dar uma ajuda nisso por favor…[/size]
Bom, se você vai digitar informações em um JTextField, provavelmente não haverá a banda “Detail” no seu relatório, certo?
Neste caso você pode criar parâmetros no seu relatório e passá-los lá na sua aplicação.
Na sua aplicação ficaria algo do tipo:
[code]// Valores dos parâmetros
HashMap params = new HashMap();
params.put(“valor1”, 10);
params.put(“valor2”, 20);
params.put(“rotulo”, “testando”);
// Carrega o relatório
JasperReport report = (JasperReport) JRLoader.loadObject(getClass().getClassLoader().getResource(“relatorio.jasper”));
// Passa os parâmetros ao relatório
JasperPrint impressao = JasperFillManager.fillReport(report, params);
// Exibe o relatório na tela
JRViewer viewer = new JRViewer(impressao);
viewer.setVisible(true);[/code]
Sacou?
Agora se você vai ter um relatório com várias linhas de valores, que utilize a banda “Detail”, você deve criar um JRDataSource.
Abraços,
Marcos Antonio Campos Jordão’’
O q eu quero é poder inserir esses dados no sistema no campo correspondente q é o JtextField e imprimir no relatório, so isso sem banco de dados sem nda é coloca os dados no sistema imprimo no relatorio como é q eu posso fazer isso?
Do jeito que eu falei.
Criando parâmetros no seu Report e passando do sistema para ele na hora da impressão via HashMap.
Então é so eu pegar tipo tem uma variavel nome no IReporte é $F{nome_pac} e no NetBeans esta como JtextField1, eu faria params.put(“JtextField1”, “nome_pac”); ficaria assim?
Com “Variáveis” não dá certo.
Você terá que criar “Parâmetros”.
Para adicionar ao Map seria assim:
Desde que “nome_pac” seja um parâmetro e não uma variável.
Então cara la no Ireporte onde eu criei a variavel $F{nome_pac} eu tenho que criar ela como $P{nome_pac} seria issou ou ñ? como faria para criar um paramentro
Não.
No iReport tem as áreas:
- Parâmetros
- Campos
- Variáveis
Ao invés de criar em Variáveis, crie em Parâmetros.
Pode ser via menu: Visualizar > Parâmetros do Relatório > Novo
Ou pela lateral “Estrutura do Documento”.
Veja a imagem anexa.
Como é q eu vou criar o JRDataSource com 6 parametros
Ai raciOnal da uma olhada no código q eu criei so q da erro ve se tem alguma coisa de errada?
[code] public void Prontuario() {
//Inicializando as Variaveis
JasperPrint impressao = null;
// Parametros do relatorios
HashMap params = new HashMap();
params.put("nome_pac", nome_paciente.getText());
params.put("cor_pac",cor_paciente.getItemListeners());
params.put("idade_pac", idade_paciente.getText());
params.put("sexo_pac",sexo_paciente.getItemAt(0));
params.put("estvciv_pac",estcivil_paciente.getItemAt(0));
params.put("religiao_pac",religiao_paciente.getText());
params.put("localtrabalho_pac",localtrabalho_paciente.getText());
params.put("profissao_pac",profissao_paciente.getText());
params.put("convenio_pac",convenio_paciente.getText());
params.put("endereco_pac",endereco_paciente.getText());
// Referenciando o .jasper
String relatorio = "Prontuario.jasper";
try {
impressao = JasperFillManager.fillReport(relatorio, params);
} catch (JRException ex) {
ex.printStackTrace();
}
// Exibe o relatório na tela
JRViewer viewer = new JRViewer(impressao);
viewer.setVisible(true);
}[/code]
Você não informou qual o erro que está dando!
A princípio notei que está passando o relatório (variável “relatorio”) como String, tente passa-lo como JasperReport, obtendo pelo JRLoader, de preferência pegando o caminho no classpath através do getResource(). Assim:
Falow
Kara o erro é esse
at java.lang.ClassLoader.defineClass1(Native Method)
at java.lang.ClassLoader.defineClass(ClassLoader.java:620)
at java.security.SecureClassLoader.defineClass(SecureClassLoader.java:124)
at java.net.URLClassLoader.defineClass(URLClassLoader.java:260)
at java.net.URLClassLoader.access$000(URLClassLoader.java:56)
at java.net.URLClassLoader$1.run(URLClassLoader.java:195)
at java.security.AccessController.doPrivileged(Native Method)
at java.net.URLClassLoader.findClass(URLClassLoader.java:188)
at java.lang.ClassLoader.loadClass(ClassLoader.java:306)
at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:276)
at java.lang.ClassLoader.loadClass(ClassLoader.java:251)
at java.lang.ClassLoader.loadClassInternal(ClassLoader.java:319)
at net.sf.jasperreports.engine.JasperFillManager.fillReport(JasperFillManager.java:420)
at net.sf.jasperreports.engine.JasperFillManager.fillReport(JasperFillManager.java:256)
at prontuarioimpresso.Prontuario.Prontuario(Prontuario.java:58)
Kara e vc havia dito pegando o caminho no classpath como assim… como faz isso?
e vc tb flw para eu usar o JRDataSource eu tenho mais parametros para passar ainda para o relatorio são 18 parametros, como eu vou usa JRDataSource seguindo esses ai q eu ja passei?
Agora da esse erro
Exception in thread "AWT-EventQueue-0" java.lang.NullPointerException
at net.sf.jasperreports.engine.util.JRLoader.loadObject(JRLoader.java:139)
esse codigo é implementado dentro da classe onde eu criei o formulario Java ou eu tenho q criar um outra classe para ele
O JRDataSource eu tinha dito para você usar no caso de querer fazer um relatório com vários registros.
Também serve para fazer de um registro só, como é o seu caso, mas passando por parâmetro também vai dar certo.
Eu acho que o seu problema agora está em carregar o arquivo do .jasper
Onde você colocou o seu arquivo compilado?
Se ele estiver junto do seu projeto, por exemplo na raiz dele, a melhor maneira é deste jeito:
Agora se ele estiver dentro de algum package interno, você deve informar também, assim:
Se ele estiver em algum lugar do seu computador você pode passá-lo como File, assim:
[code]// Linux
File arquivo = new File("/home/marcos/relatorios/relatorio.jasper");
JasperReport relatorio = (JasperReport) JRLoader.loadObject(arquivo);
// Windows
File arquivo = new File(“c:\relatorios\relatorio.jasper”);
JasperReport relatorio = (JasperReport) JRLoader.loadObject(arquivo);[/code]
Mais uma dica, dá uma boa olhada na documentação, eu também precisei do JasperReport não faz muito tempo e aprendi tudo com a documentação.
Falow
gardussi, esse “Exception in thread “AWT-EventQueue-0” java.lang.NullPointerException”
ocorre devido ao caminho informado estar retornando null, faça como o raci0nal falou
pra mim é a melhor maneira… cria um package e joga os .jasper nele e informe atraves do classpath
não tem erro… fica 100%
Exemplo de como eu uso :
- Sistema
---- dao
---- view
---- recursos
---- etc
dai você lê os recursos do pacote:
URL relatorio = getClass().getClassLoader().getResource("recursos/nome-do-relatorio.jasper");
Map parameters = new HashMap();
//parameters.put("nome do parametro", valor ); Caso queira passar algum parametro ao relatório
JasperPrint preencher_este_relatorio = JasperFillManager.fillReport( relatorio.openStream() , parameters , jrRS);
JasperViewer.setDefaultLookAndFeelDecorated(true);
JasperViewer.viewReport( preencher_este_relatorio , false );
Kara continua dando erro eu ja coloquei o arquivo .jasper o .jrxml e nda
Agora eu consegui deu certo vlw ai pela ajuda kara
Esse é o codigo do programa no meu ele funcionou certinho vlw
[code]public void GeraRelatorio() {
JasperReport caminho = null;
try {
caminho = (JasperReport) JRLoader.loadObject(getClass().getClassLoader().getResource("Prontuario.jasper"));
} catch (JRException ex) {
System.out.println(ex.getMessage());
ex.printStackTrace();
}
// Parametros do relatorios
Map parametros = new HashMap();
parametros.put("nome_pac", nome_paciente.getText());
parametros.put("cor_pac",cor_paciente.getText());
parametros.put("idade_pac", idade_paciente.getText());
parametros.put("sexo_pac",sexo_paciente.getText());
parametros.put("estvciv_pac",estadocivil_paciente.getText());
parametros.put("religiao_pac",religiao_paciente.getText());
parametros.put("localtrabalho_pac",localtrabalho_paciente.getText());
parametros.put("profissao_pac",profissao_paciente.getText());
parametros.put("convenio_pac",convenio_paciente.getText());
parametros.put("endereco_pac",endereco_paciente.getText());
JasperPrint impressao = new JasperPrint();
try {
impressao = JasperFillManager.fillReport(caminho ,parametros);
JasperViewer viewer = new JasperViewer(impressao, true);
viewer.setVisible(true);
//Nome e diretorio onde vai ser gerado o PDF
String destFileName = "C:\\Prontuario\\relatorio\\geraPDF.pdf";
JasperExportManager.exportReportToPdfFile(impressao,destFileName);
// JasperExportManager.exportReportToHtmlFile(impressao,destFileNameHTML);
} catch (JRException e) {
System.out.println(e.getMessage());
}
} [/code]
oi ai esta meu codigo
[code]import java.io.*;
import java.util.HashMap;
import java.util.ArrayList;
import java.util.List;
import java.util.Map;
//import javax.swing.JOptionPane;
public class Dados{
//"args" é um array de String onde cada elemento é um argumento passado pela linha de comando momento na "inicialização" da execução.
public static void main(String[] args){
Map<Integer, List<String>> mapLines= new HashMap<Integer, List<String>>();
try {
//leitura do ficheiro, prepara-o para ser aberto
BufferedReader in = new BufferedReader(new FileReader("conteudo.txt"));
String str;
int i = 0;
//vai percorrer todo o ficheiro
while((str = in.readLine()) != null)
{
if(str.startsWith("#"))
{
str= "";
}
else{ //esta a dividir a frase em varias strings imprimindo o seu resultado
List<String> values = new ArrayList<String>();
String words[] = str.split(";");
for(String word : words) {
values.add(word);
System.out.println(word);
}
mapLines.put(i, values);
i++;
}
}// fim do while
in.close();
} catch (IOException e){
// possiveis erros são tratatos aqui
//JOptionPane.showMessageDialog(null, this.word, "NÂO FOI POSSÍVEL ABRIR O SEU FICHEIRO", JOptionPane.ERROR_MESSAGE);
System.out.println("ERRO-->NÃO FOI ENCONTRADO O SEU FICHEIRO DE DESTINO,TENTE DE NOVO");
}
// Apresenta o contéudo do Map
Map<Integer, List<String>> m = new HashMap<Integer, List<String>>();
for(Integer key : m.keySet()) {
for(String word : m.get(key)) {
System.out.println(word);
}
}
}
public static void main2(String[] args){
Map<Integer, List<String>> mapLines= new HashMap<Integer, List<String>>();
try {
BufferedReader in2 = new BufferedReader(new FileReader("conteudo2.txt"));
String str;
int i = 0;
while((str = in2.readLine()) != null)
{
if(str.startsWith("#"))
{
str= "";
}
else{ //esta a dividir a frase em varias strings
List<String> values = new ArrayList<String>();
String words[] = str.split(" ");
for(String word : words) {
values.add(word);
System.out.println(word);
}
mapLines.put(i, values);
i++;
}
}// fim do while
in2.close();
} catch (IOException e){
// possiveis erros são tratatos aqui
System.out.println("ERRO-->NÃO FOI ENCONTRADO O SEU FICHEIRO DE DESTINO,TENTE DE NOVO");
}
// Apresenta o contéudo do Map
Map<Integer, List<String>> m = new HashMap<Integer, List<String>>();
for(Integer key : m.keySet()) {
for(String word : m.get(key)) {
System.out.println(word);
}
}
}
} [/code]
e tenho por exemplo este ficheiro
961234567 253883377 24:05:2011 10:30:10 068 16 13
963456789 253883355 28:05:2011 12:15:17 088 12 09
963456789 253883377 29:05:2011 17:00:00 120 14 11
969876666 253883377 30:05:2011 10:05:34 070 11 09
961234567 253883377 31:05:2011 22:30:05 066 14 11
961234567 253883377 02:06:2011 14:19:41 076 15 13
963456789 253883377 05:06:2011 11:33:34 085 07 06
e queria que fosse pedido ao utilizador que dados e que ele quer imprimir. por exemplo…pedirmos para imprimir todos os dados com o numero 961234567
abraços