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.
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
rlira
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")privatebyte[]conFoto;
Dassayev
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)
Vc esta fazendo isto direto no Ireport certo? como vc disse vc não estaria querendo usar Java…
Dassayev
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
rlira
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.