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.
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
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)
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?
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.