Imagens do Postgres no iReport

7 respostas
D

Boa noite!

Tenho uma tabela no banco de dados Postgres onde existe um campo chamado logo do tipo bigInt onde eu guardo os bytes de uma imagem. A minha dúvida é como exibir essa imagem em um relatório criado pelo iReport, sem a interferência do JAVA, direto no relatório.

Desde já agradeço!

7 Respostas

F

Olá
Sem interferência de uma codificação em Java eu não sei se é possível. Uma sugestão é pegar os bytes e salvar em disco e fazer com que o ireport leia ele. Outra possibilidade é criar um objeto Image em memória e passar como parâmetro para o relatório.

R

Olá, prezado realmente sem Java também não sei se é possivel, mais no Ireport o que vc irá fazer é simplesmente
pegar na paleta o image, arrasta ele para a banda detalhe e nas sua propriedade ( no meu caso o campo tem o nome conFoto )
use a expressão

new ByteArrayInputStream(( byte[] )$ F{conFoto} )

na lista de campos a classe sera do tipo java.lang.Object

bem outro detalhe no meu caso o campo que contem a imagem no banco é do tipo bytea
na minha classe entidade o campo foi mapeado desta forma

@Column(name="con_foto")
private byte[] conFoto ;
D

Bom dia rlira!

Fiz como você falou, mas no iReport gera o seguinte erro:

Error filling print... Byte data not found at location : java.io.ByteArrayInputStream@1639ed1 net.sf.jasperreports.engine.JRException: Byte data not found at location : java.io.ByteArrayInputStream@1639ed1 at net.sf.jasperreports.engine.util.JRLoader.loadBytesFromLocation(JRLoader.java:477) at net.sf.jasperreports.engine.JRImageRenderer.getInstance(JRImageRenderer.java:217) at net.sf.jasperreports.engine.fill.JRFillImage.evaluateImage(JRFillImage.java:1057) at net.sf.jasperreports.engine.fill.JRFillImage.evaluate(JRFillImage.java:1004) at net.sf.jasperreports.engine.fill.JRFillElementContainer.evaluate(JRFillElementContainer.java:258) at net.sf.jasperreports.engine.fill.JRFillBand.evaluate(JRFillBand.java:499) at net.sf.jasperreports.engine.fill.JRVerticalFiller.fillTitle(JRVerticalFiller.java:325) at net.sf.jasperreports.engine.fill.JRVerticalFiller.fillReportStart(JRVerticalFiller.java:261) at net.sf.jasperreports.engine.fill.JRVerticalFiller.fillReport(JRVerticalFiller.java:127) at net.sf.jasperreports.engine.fill.JRBaseFiller.fill(JRBaseFiller.java:942) at net.sf.jasperreports.engine.fill.JRBaseFiller.fill(JRBaseFiller.java:841) at net.sf.jasperreports.engine.fill.JRFiller.fillReport(JRFiller.java:58) at net.sf.jasperreports.engine.JasperFillManager.fillReport(JasperFillManager.java:417) at net.sf.jasperreports.engine.JasperFillManager.fillReport(JasperFillManager.java:247) at com.jaspersoft.ireport.designer.compiler.IReportCompiler.run(IReportCompiler.java:877) at org.openide.util.RequestProcessor$Task.run(RequestProcessor.java:572) at org.openide.util.RequestProcessor$Processor.run(RequestProcessor.java:997)

Mapeamento no JAVA:

@Column(name = "logo_relatorio") private byte[] logoRelatorio;

No banco de dados (Postgres) ele é do tipo bytea.

R

Olá Dassayev

Vc esta fazendo isto direto no Ireport certo? como vc disse vc não estaria querendo usar Java…

D

Quando eu disse que não queria usar JAVA era que eu não queria passar a imagem por parâmetro quando eu chamo o relatório (pelo JAVA). Quero usar a imagem que vem do banco! Entendeu?

R

Ok entendi, bem como faço para te enviar alguns arquivos?

veja o que eu fiz passo a passo

tenho um projeto web simples aqueles de agenda de contatos ok?
no pacote model a classe Contato.java

abri o ireport e crei o relatorio, no ireport eu não criei nenhuma conexao com o banco, fiz so o layout
e inserir os campos baseado nos atributos da minha classe Contato.java

copiei o jrxml para uma pasta do meu projeto, e fiz uma classe para popular e chamar o relatorio
se vc quizer posso te enviar os fontes.

R

Veja onde eu peguei a dica


http://javafree.uol.com.br/topic-870971-Imagem-do-Banco-de-Dados-no-Ireport.html

Criado 25 de abril de 2012
Ultima resposta 8 de mai. de 2012
Respostas 7
Participantes 3