Dicas de iReport

09/julho/2009 - Java

Olá!

Abaixo seis dicas para iReport/JasperReport. Espero que seja úteis para alguém. 😉

  1. Não exibir null
    Para que o campo texto no relatório não fique exibindo null basta marcar a opção Branco quando nulo na propriedade dos campos texto do seu relatório.
  2. Alterar as propriedades do PDF
    No menu opções > opções de export é possível alterar várias informações que vão embutidas no PDF, como o título, autor, assunto, palavras-chave e aplicativo, no Adobe Reader pressione Ctrl + D para ver as propriedades do documento.
  3. Colocar senha no PDF
    Para colocar senha no relatório é muito fácil, no menu opções > opções de export selecione Is Encripted e preencha no campo using default(User password) e Owner password com a senha para abrir o PDF.
  4. Expressões
    O iReport permite criar expressões bastante sofisticadas, são blocos de código java que são executadas dentro do relatório para mais diversos fins. Geralmente usados determinar se mostra ou não um campo, fazer um cálculo para ser exibido ou simplismente concaternar strings.
    Exemplo: Para dar um substring é só usar
    $P{parametro}.substring( 0, 2 );
    Para concatenar com um espaço no meio use $P{parametro} + ” ” + $P{parametro}
    Para saber se o parâmetro ou campo é diferente de null, $P{parametro} != null.
    Dentro dessas expressões é possível usar os parâmetros, variáveis e os campos.
  5. Internacionalização
    É fácil fazer relatório internacionalizáveis no iReport. No menu editar, clique em propriedades do relatório, na aba i18n informe no campo nome da base do pacote do recurso o prefixo dos arquivos properties com as mensagens. Por exemplo se você tem os arquivos Mensagem_pt_BR.properties, Mensagem_en_US.properties e Mensagem.properties informe nesse campo apenas Mensagem
    Se os arquivos estiverem dentro de pacotes você deve informar o caminho completo, exemplo br.com.furutani.resources.Mensagem
    Existe a opção de informar o
    arquivo de resource bundle via paramêtros, desse forma é mais dinâmica pois você pode montar o resource bundle com uma tabela de banco de dados por exemplo, para isso basta que no HashMap de parâmetros coloque a chave REPORT_RESOURCE_BUNDLE e no valor um objeto do tipo java.util.ResourceBundle.
    Para mostrar um texto do resource bundle no relatório, adicione um campo texto e coloque na propriedade expressão $R{chave}. Exemplo: $R{msg.hoje}
  6. Protegendo o documento PDF
    É possível desabilitar o botão Imprimir, o Ctrl+C no documento, permitir adicionar comentários e etc. no menu opções > opções de export selecione a propriedade Is Encripted e no campo Permissions informe 16 para permitir copiar, 2052 para permitir imprimir, 512 para permitir leitores de telas, 0 (zero) para bloquear tudo. Para permitir copiar e imprimir informe 2068.
    Esses números são baseados nas constantes ALLOW_* encontradas na classe com.lowagie.text.pdf.PdfWriter para saber o número a informar nesse campo com um conjunto de permissões uso o operador |

    Exemplo:  System.out.println(PdfWriter.AllowCopy | PdfWriter.AllowPrinting);
Share


6 comentários

  1. #
    Daniel
    agosto 7th, 2009 at 15:18

    Bom dia furutani. Você tem algum exemplo de como posso fazer para montar meu objeto ResourceBundle a partir de uma tabela do banco de dados?

    Pesquisei mas não consegui nada que pudesse me ajudar…

    Responda a esse comentário
    • #
      Roberto Furutani
      agosto 8th, 2009 at 13:29

      Olá!
      Não tenho um exemplo de como montar um ResourceBundle com banco de dados. Mas teoricamente é só você ler sua tabela e colocar as chaves e valores em um HashMap dentro de uma classe que extende de java.util.ResourceBundle. Para pegar o valor você deve sobreescrever getBundle e/ou getString.

      Responda a esse comentário
  2. #
    Marcos Andre
    agosto 22nd, 2009 at 14:59

    Olá, sou iniciante em Java e estou tentando gerar relatórios co o Jasper/Ireport. Quando instalei o Ireport, fiz todos os procedimentos para conectar com o BD e o relatório foi gerado perfeitamente mas a partir do segundo começa o dar erro descrito abaixo:

     Compilando para o arquivo … .\ListarCargos.jasper -> C:\Program Files\JasperSoft\iReport-3.0.0\ListarCargos.java
    Erros de compilação .\ListarCargos.jasper.
    net.sf.jasperreports.engine.JRException: Error saving expressions class file : C:\Program Files\JasperSoft\iReport-3.0.0\ListarCargos_1250963281567_796860.java     at net.sf.jasperreports.engine.util.JRSaver.saveClassSource(JRSaver.java:171)     at net.sf.jasperreports.engine.design.JRAbstractCompiler.getSourceFile(JRAbstractCompiler.java:297)     at net.sf.jasperreports.engine.design.JRAbstractCompiler.createCompileUnit(JRAbstractCompiler.java:271)     at net.sf.jasperreports.engine.design.JRAbstractCompiler.compileReport(JRAbstractCompiler.java:168)     at it.businesslogic.ireport.IReportCompiler.run(IReportCompiler.java:591)     at java.lang.Thread.run(Unknown Source) Caused by: java.io.FileNotFoundException: C:\Program Files\JasperSoft\iReport-3.0.0\ListarCargos_1250963281567_796860.java (Acesso negado)     at java.io.FileOutputStream.open(Native Method)     at java.io.FileOutputStream.(Unknown Source)     at java.io.FileOutputStream.(Unknown Source)     at java.io.FileWriter.(Unknown Source)     at net.sf.jasperreports.engine.util.JRSaver.saveClassSource(JRSaver.java:163)     … 5 more
    Tempo de execução de compilação: 149

    Vc poderia me ajudar?

    Responda a esse comentário
  3. #
    Ligiano Azzi
    janeiro 6th, 2010 at 12:30

    1 – Não exibir null
    Para que o campo texto no relatório não fique exibindo null basta marcar a opção Branco quando nulo na propriedade dos campos texto do seu relatório.

    ME AJUDOU PAKAS!!! OBRIGADO

    Responda a esse comentário
    • #
      Alvaro
      março 6th, 2012 at 16:38

      me ajudou tambemmmmmm =]
      engraçado né?
      a dica mais boba e mais procurada…hehehe

      Responda a esse comentário
  4. #
    nathalie
    junho 1st, 2016 at 19:24

    oi Roberto. Peço sua ajuda para resolver um pequeno probleminha no iReport. Meu banco de dados tem um campo java.util.Date(assim reconhecido pelo iReport) que para não ficar nulo, insiro uma data qualquer(no caso 01/01/1970).Como faço para que haja uma condição no Print when expression que, quando houver esta data aleatória, o campo da data fique vazio? Obrigada, Nathalie

    Responda a esse comentário

Deixe seu comentário para Daniel