Formatar campos CPF e CNPJ no IReport

Alguém sabe como eu poderia formatar no IReport, através do uso de Fórmulas, registros nos formatos CPF e CNPJ. Gostaria de usar o “Expression Editor” do IReport.

Clique com o botão direito no campo e selecione Edit Expression.

O código abaixo testa o tamanho do campo. Se for igual a 14 dígitos, formata para CNPJ, caso contrário, formata para CPF.

( $F{cpfcnpj}.length() == 14 ? ($F{cpfcnpj}.substring(0, 2) + "." + $F{cpfcnpj}.substring(2, 5) + "." + $F{cpfcnpj}.substring(5, 8) + "/" + $F{cpfcnpj}.substring(8, 12) + "-" + $F{cpfcnpj}.substring(12, 14)) : ($F{cpfcnpj}.substring(0, 3) + "." + $F{cpfcnpj}.substring(3, 6) + "." + $F{cpfcnpj}.substring(6, 9) + "-" + $F{cpfcnpj}.substring(9, 11)) )
2 curtidas

Por favor, me informe o tipo de campo usando no BD para armazenar o numero do CPF/CNPJ e qual o banco de dados a que se refere seu exemplo.
Obrigado.

Isso funciona em qualquer BD com campo do tipo VARCHAR.

Alguem sabe com converto um campo do tipo Long para String (no IReport/Jasper), para poder usar a formula acima?

ja tentei
String.valueOf
cast para String
new String
usando toString() ocorre um erro informando q nao eh possivel fazer um cast de String para Long
e nada

Obrigado

de String para Long?? Não seria o contrário?
Bom se for esse mesmo o erro (pau ao converter de String para Long), dá uma verificada no tipo de “Classe de Expressão de Campo de Texto”. Para isso clique com o botão direito na caixa de texto, vá em Propriedades e na aba “Campo texto”. Se lá estiver marcado java.lang.Long você pode estar tendo problema não na conversão de long para String (ou seja, o toString() está funcionando), mas sim na hora que ele vai imprimir esse resultado na caixa de texto que está configurada como do tipo Long…

Para formatar o cnpj eu usei expressões regulares… O textField do cnpj ficou assim:

($P{CNPJ} != null && java.util.regex.Pattern.compile("(\\d{2})(\\d{3})(\\d{3})(\\d{4})(\\d{2})").matcher($P{CNPJ}).matches()) 
? java.util.regex.Pattern.compile("(\\d{2})(\\d{3})(\\d{3})(\\d{4})(\\d{2})").matcher($P{CNPJ}).replaceAll("$1.$2.$3/$4-$5") 
: "CNPJ inválido"

Para o cpf é análogo…

:wink:

[quote=mcz.raf]Para formatar o cnpj eu usei expressões regulares… O textField do cnpj ficou assim:

($P{CNPJ} != null && java.util.regex.Pattern.compile("(\\d{2})(\\d{3})(\\d{3})(\\d{4})(\\d{2})").matcher($P{CNPJ}).matches()) 
? java.util.regex.Pattern.compile("(\\d{2})(\\d{3})(\\d{3})(\\d{4})(\\d{2})").matcher($P{CNPJ}).replaceAll("$1.$2.$3/$4-$5") 
: "CNPJ inválido"

Para o cpf é análogo…

:wink: [/quote]

Olá…
Para evitar problemas com relação a padronização de formatação no iReport, utilize o mesmo formatador da sua aplicação.
Faça assim na textField:

caminho.completo.da.classe.de.formatar.cnpj.da.aplicação.SeuFormatador.formatarCnpj($P{CNPJ});

Lembrando que o metodo deve ser estatico e a classe deve estar no classpath do seu iReport.
A vantagem é que se você encontrar uma melhor forma de formatar os seus dados (BrazilUtil por exemplo), vai se preciso alterar em apenas um lugar.

:wink:
[]'s
JL

Na verdade, a minha idéia era só postar a “lógica” da formatação usando expressões regulares, ou seja, podendo a colocar onde o desenvolvedor quiser.

Mas de qualquer forma, é muito bom ressaltar que centralizar essas funções na aplicação é a melhor solução!! Boa!! :wink:

Mero_Aprenziz, achei muito interessante oque você disse. Não sabia que era possível.
Porém tentei fazer aqui e não deu certo.
Como que eu tenho q colocar esse caminho completo? C:/pasta1/pasta2/arquivoJAR.NomeDaClasse.NomeDoMétodo ???
E esse caminho eu coloco direto no “Expression Editor”?

Valeu!

[quote=Mero_Aprendiz][quote=mcz.raf]Para formatar o cnpj eu usei expressões regulares… O textField do cnpj ficou assim:

($P{CNPJ} != null && java.util.regex.Pattern.compile("(\\d{2})(\\d{3})(\\d{3})(\\d{4})(\\d{2})").matcher($P{CNPJ}).matches()) 
? java.util.regex.Pattern.compile("(\\d{2})(\\d{3})(\\d{3})(\\d{4})(\\d{2})").matcher($P{CNPJ}).replaceAll("$1.$2.$3/$4-$5") 
: "CNPJ inválido"

Para o cpf é análogo…

:wink: [/quote]

Olá…
Para evitar problemas com relação a padronização de formatação no iReport, utilize o mesmo formatador da sua aplicação.
Faça assim na textField:

caminho.completo.da.classe.de.formatar.cnpj.da.aplicação.SeuFormatador.formatarCnpj($P{CNPJ});

Lembrando que o metodo deve ser estatico e a classe deve estar no classpath do seu iReport.
A vantagem é que se você encontrar uma melhor forma de formatar os seus dados (BrazilUtil por exemplo), vai se preciso alterar em apenas um lugar.

:wink:
[]'s
JL
[/quote]

Achei muito interessante oque você disse. Não sabia que era possível.
Porém tentei fazer aqui e não deu certo.
Como que eu tenho q colocar esse caminho completo? C:/pasta1/pasta2/arquivoJAR.NomeDaClasse.NomeDoMétodo ???
E esse caminho eu coloco direto no “Expression Editor”?

Valeu!