JasperReport + IReport

17 respostas
andrelrm

Boa Tarde, Sou iniciante em Java e estou tentando gerar um relatório. Pesquisei alguns código na web e correu tudo bem consegui gerar o arquivo PDF a partir de um jrprint ou até mesmo um PDF a partir de um .Jasper. O
problema é que o arquivo gerado é de 1k ou seja ele não preenche os dados. Alguem poderia ajudar

desde já

André Luiz

17 Respostas

ze_kiefa

Isso acontecia comigo quando, na geração do PDF, alguma exceção era lançada, seja de banco (SQLException) ou de arquivos (IOException).

Outro motivo, por incrível que pareça, era o resultado do banco vir vazio (a consulta não retornava nada!).

furutani

Olá

Verifique se não é lançada nenhuma exception.
Se tiver poste aqui para gente analisar.

andrelrm

Bem, eu mando o aplicativo editar no console os dados do banco de dados, tudo está dentro de um try, e a conexão também está ok o código java também está certo, so que os arquivos jrprint e pdf ficam vazios

obs o código

try

ResultSet con = script.selCandidatoCartao(insc.getSeqConcurso(),insc.getCodCargo(),insc.getNumCpf());

String path   = getServlet().getServletContext().getRealPath(Relatorios);//“webapps/InsWeb/Relatorios/”;

JRResultSetDataSource jrs = new JRResultSetDataSource(con);

HashMap parameters = new HashMap();

//////////////////////////////////////
System.out.println(“AQUI 1” + con.getString(“nom_candidato”));

//AQUI ELE CRIA O RELATORIO - JasperPrint impressao =
/* Preenche o relatório com os dados. Gera o arquivo cartaodeConfirmacao.jrprint */
JasperFillManager.fillReportToFile(path.concat("\cartaodeConfirmacao.jasper"), parameters, jrs);

//System.out.println("AQUI 2");               
           /* Exporta para o formato PDF */
          JasperExportManager.exportReportToPdfFile(path.concat("\\cartaodeConfirmacao.jrprint"));


       } catch (Exception e) 
       {
ze_kiefa
try {
 ResultSet con = script.selCandidatoCartao(insc.getSeqConcurso(),insc.getCodCargo(),insc.getNumCpf()); 
 String path = getServlet().getServletContext().getRealPath("Relatorios");//"webapps/InsWeb/Relatorios/"; 
 JRResultSetDataSource jrs = new JRResultSetDataSource(con); 
 HashMap parameters = new HashMap(); 

 ////////////////////////////////////// 
 System.out.println("AQUI 1" + con.getString("nom_candidato")); 

 //AQUI ELE CRIA O RELATORIO - JasperPrint impressao = 
 /* Preenche o relatório com os dados. Gera o arquivo cartaodeConfirmacao.jrprint */ 
 JasperFillManager.fillReportToFile(path.concat("\\cartaodeConfirmacao.jasper"), parameters, jrs); 

 //System.out.println("AQUI 2"); 
 /* Exporta para o formato PDF */ 
 JasperExportManager.exportReportToPdfFile(path.concat("\\cartaodeConfirmacao.jrprint")); 

} 
catch (Exception e) 
{ 
 // você trata as exceções (erros) AQUI
 e.printStackTrace();
}

Teste agora e ficamos aguardando!

andrelrm

Bem coloquei o código e.printStackTrace(); Só que ele não entra neste bloco, já que o sintaticamente está tudo ok. e os arquivos são gerados, só que vazios.

cartaodeConfirmacao.jrprint 1k
cartaodeConfirmacao.pdf 1k

18/09/2007 14:29:59 org.apache.catalina.storeconfig.StoreLoader load
INFO: Find registry server-registry.xml at classpath resource
18/09/2007 14:29:59 org.apache.catalina.startup.Catalina start
INFO: Server startup in 3034 ms
18/09/2007 14:30:25 org.apache.struts.tiles.TilesRequestProcessor initDefinitionsMapping
INFO: Tiles definition factory found for request processor ‘’.
AQUI 1 LUCIANO CANDIDATO TESTE
AQUI 4

ze_kiefa

Uma pequena observação antes: sintaxe correta não significa que o o programa será executado corretamente, pois exceções podem ocorrer. Para isso existe o bloco try/catch/finally.

Dando continuidade, não há exceções lançadas, mas há algo estranho com a variável path, observe:

//AQUI ELE CRIA O RELATORIO - JasperPrint impressao =   
/* Preenche o relatório com os dados. Gera o arquivo cartaodeConfirmacao.jrprint */  
JasperFillManager.fillReportToFile(path.concat("\\cartaodeConfirmacao.jasper"), parameters, jrs);   

/*
 * path tem "//webapps/InsWeb/Relatorios/\\cartaodeConfirmacao.jasper"
 */
 System.out.println( path );

//System.out.println("AQUI 2");   
/* Exporta para o formato PDF */  
JasperExportManager.exportReportToPdfFile(path.concat("\\cartaodeConfirmacao.jrprint"));   

/*
 * path tem "//webapps/InsWeb/Relatorios/\\cartaodeConfirmacao.jasper\\cartaodeConfirmacao.jrprint"
 */
 System.out.println( path );

Teste agora.

andrelrm

O path está ok, mandei imprimir no console. O que é difícil de entender é que mesmo dentro de try/catch não há retorno de erro. Segue abaixo o que mandei imprimir no Console.

AQUI 1 LUCIANO TESTE CANDIDATO
D:\JAVA\Tomcat 5.5\webapps\InsWeb\Relatorios - PATH
AQUI 4

M

Opa, beleza?Aonde você faz a busca (filtragem) dos dados?O arquivo pdf, está gerando normalmente?

andrelrm

Bem a busca eu executo dentro do meu servelt os arquivos jrprint e pdf são gerados, contudo sem qualquer informação dentro. Observe o código:

try

ResultSet con = script.selCandidatoCartao(insc.getSeqConcurso(),insc.getCodCargo(),insc.getNumCpf());

String path = getServlet().getServletContext().getRealPath(Relatorios);//“webapps/InsWeb/Relatorios/”;

JRResultSetDataSource jrs = new JRResultSetDataSource(con);

HashMap parameters = new HashMap();

System.out.println(“AQUI 1” + con.getString(“nom_candidato”));

//AQUI ELE CRIA O RELATORIO - JasperPrint impressao =
/* Preenche o relatório com os dados. Gera o arquivo cartaodeConfirmacao.jrprint */
JasperFillManager.fillReportToFile(path.concat("\cartaodeConfirmacao.jasper"), parameters, jrs);

<a href="//System.out.println">//System.out.println</a>(“AQUI 2”);

/* Exporta para o formato PDF */

JasperExportManager.exportReportToPdfFile(path.concat("\cartaodeConfirmacao.jrprint"));

} catch (Exception e)
{

M

andrelrm:
Bem a busca eu executo dentro do meu servelt os arquivos jrprint e pdf são gerados, contudo sem qualquer informação dentro. Observe o código:

try
ResultSet con = script.selCandidatoCartao(insc.getSeqConcurso(),insc.getCodCargo(),insc.getNumCpf());

{


Seria nesta parte do código, onde você filtra os seus dados?

M

Dê uma olhada neste links aqui:
http://www.ensode.net/jasperreports_pdf_send_to_browser.html
http://www.furutani.eti.br/tutoriais/Tutorial_Sub_Relatorio_ArrayList.pdf
Talvez você possar tirar proveito do conteúdo!

S

eu estou tendo esse mesmo problema,

já pesquisei muito a manhã inteira e nada,

c alguem conseguir solucionar este problema post aqui,

vou continuar pesquisando…

andrelrm

Olá pessoal, ainda estou com o mesmo problema. retornei so para lembrar.

Esta acontecendo que eu tenho um arquivo .jasper gerado e compilado, gero o jrprint e o pdf, mais os dois estão vazios, apenas com 1k. A query de busca está ok, não exception. Resumindo. Estou perdido.

Alguem poderia ajudar?

André Luiz

PadrE

Hmm…

Primeiro aconselho a vc colocar um tratamento ai no catch… assim, poderá ver o que ocorreu… nem que seja um printStackTrace()…

Mas como vc disse… n tem “erros”… ao menos de sintaxe e execução… ^^

Acredito que vc tenha testado a execução do relatório diretono iReport… passando os parâmentros no mão… e deve ter funcionado perfeitamente… se não fez isso, demoro pra fazer e descartar a possibilidade de ser algo do jasper…

Como a geração do PDF ta dependendo no jrprint… o problema esta antes de gerar o PDF…

eu diria… que esta na linha:

JasperFillManager.fillReportToFile(path.concat("\\cartaodeConfirmacao.jasper"), parameters, jrs);

Não manjo muito desse JasperFillManager… mas creio que de para deduzir algumas coisas…

Vc esta usando o metodo:
JasperFillManager.fillReportToFile(sourceFileName, parameters, dataSource);

Mas esse dataSource… n saquei muito bem… ele passa exatamente o que ??
Me parece ser um “ResultSet” com os dados para gerar o arquivo… mas esse cara nao tem nada… ao menos entre a declaração e essa linha… n existe nada, a nao ser atrelar esse cara com o Connection… =/

Bom… acredito que vc tenha feito o relatório no padrão… ou seja, a Query ta compilada bunitinho dentro do jasper…

Então… eu tentaria usar o seguinte no lugar:
JasperFillManager.fillReportToFile(sourceFileName, parameters, connection);

E passaria o connection, e deixa o jasper executar a consulta por si mesmo…

Ou posso estar viajando de mais… e nada aparece porque vc simplesmente passa um HashMap de paramentros em branco… e como n tem parâmetro, nada aparece no relatório… e vc poderia resolver isso, simplesmente colocando um parâmetro nele… ^^

furutani

Olá

"\\cartaodeConfirmacao.jasper"

Qual é o motivo de voce usar \ ?

andrelrm

Vou seguir o seu conselho. Já estava suspeitando que talvez seja este o problema. Mandarei notícias.

André Luiz

andrelrm

O \ é para que a concatenação seja correta.

Exemplo

webapps\insweb\relatorioscartaodeconfirmacao.jasper  se eu não usar o \\ fica assim.  Usando

fica na forma correta

webapps\insweb\relatorios \ cartaodeconfirmacao.jasper
Criado 18 de setembro de 2007
Ultima resposta 21 de set. de 2007
Respostas 17
Participantes 6