Tenho um relatório criado no iReport que preciso mostrar uma imagem que esta em um banco de dados postgreSQL com o tipo bytea[]. Pesquisei em vários tópicos e sites, fiz diversas tentativas porém nenhuma efetiva. Pelo oque entendi, o problema é que o postgre não salva imagens com um tipo chamado BLOB, oque dificulta a inserção de imagem no relatório.
Segue oque eu fiz até agora no iReport baseado nas pesquisas realizadas:
Se não me engano, deve-se evitar salvar imagens no banco. Além disso, se ao contrário o MySQL, o PostgreSQL não suporta BLOB, não seria melhor passar o path da imagem para o IReport?
Cleiton_Conceicao
no jasper só funciona quando o tipo é java.io.InputStream.
faz o teste pra ver se funciona.
Qual seria a melhor forma? Eu fiz salvando a imagem no BD, tem alguma outra forma melhor de fazer isso?
Vinicius_Costa1
Segui o que você disse, mas aparece isso:
Vinicius_Costa1
E no console não aparece nada, nenhum erro, somente aparece esta mensagem.
Vinicius_Costa1
Tentei também, porém aparece a mensagem:
E não aparece nada no console
Villagram
Boa tarde, geralmente o que eu faço é colocar a imagem como InputStream. Pra mim funciona numa boa.
Vinicius_Costa1
Mas você utiliza o postgreSQL? Porque pelas pesquisas que fiz, o postgreSQL gera uma dificuldade a mais do que os outros bancos, porque ele não salva a imagem em um formato BLOB (não sei muito bem do que se trata).
rodriguesabner
Cara, não é que gera dificuldade a mais. Só são banco de dados que tratam algumas coisas de forma diferente. Mas é um ótimo banco. Eu uso o postgres e nunca tive problemas pra nada…
Agora uma dúvida, pq vc está utilizando o iReport? Pq não começa a usar o Jasper?
Vinicius_Costa1
Concordo com você, todos meus projetos da faculdade foram sempre feitos no postgreSQL, é um ótimo banco, eu que não estou sabendo lidar com essa situação.
Cara, porque aprendi a usar o iReport, você me recomenda migrar para o Jaspersoft Studio? Ele é melhor?
Villagram
Eu uso Oracle e também passei mal para fazer imagens e outros componentes funcionarem corretamente. Mas independente do gerador de relatórios que você usar você vai ter problemas com outras coisas. Fique bom no que você já sabe e depois procure opções, esse é meu conselho.
Vinicius_Costa1
Entendo, porém é possível você me mostrar o que você faz pra trazer uma imagem do postgreSQL para o iReport? Tentei de várias formas porém algumas dão erro no console, outras dão erro no momento de gerar o relatório…
Villagram
me passa a configuração do campo dentro do postgre para eu conseguir simular aqui que eu te passo certinho.
Será que é a forma como eu salvo a imagem no banco de dados?
Vinicius_Costa1
Select utilizado
Esqueci de dizer, mas a mensagem pede pra ver o console para mais detalhes, porém o console fica vazio.
Villagram
bom dia, minha query está igual, a grande questão é se os dados dentro do campo de imagem na sua tabela não tem nada corrompido, algo que não seja uma imagem ou conteúdo nulo.
Vinicius_Costa1
Bom dia, corrompido ou nulo imagino que não deve estar, pois eu consigo recuperar a imagem do banco de dados e exibi-la dentro do netbeans.
Como você envia a imagem para o banco? Eu utilizo o seguinte método para fazer a conversão da imagem para byte(foi um cara daqui que me passou ele)
na outra de compilar o relatório da algum erro? você já tentou tirar a imagem e rodar só com os dados?
As vezes você pode estar pensando que é uma coisa e na verdade seja um conjunto de coisas.
Vinicius_Costa1
Se eu tirar a imagem, o relatório compila normalmente, fica tudo perfeito, ele só da erro quando eu insiro a imagem.
Vinicius_Costa1
Até criei outro relatório em branco e peguei somente a field de imagem do banco pra fazer o teste, e também da erro.
Villagram
essas imagens são muito grandes? ou tem algum formato diferente?
Vinicius_Costa1
Fiz o teste com 2 imagens, ambas são .jpg e possuem em torno de 1MB.
Vinicius_Costa1
Pesquisei até em fóruns de outras linguas, até tentei fazer de várias outras formas que aparentemente deram certo pra outras pessoas, porém quando eu executo o preview do relatório, aparece aquela mensagem de erro e sem nada no console. Por isso eu imagino que seja a forma como eu estou salvando a imagem no banco.
Villagram
eu já tive muitos problemas com imagens .jpg pela razão de existir a porra do .jpeg e mesmo se disserem que é mesma coisa, não acredite, essa merda de “e” as vezes faz toda diferença, eu prefiro usar .png ou .gif.
mas olhando seu problema dessa maneira superficial fica difícil saber o que realmente esta acontecendo, pois o erro é para expor o relatório, então imagino eu que está tudo certo, o problema aparentemente é de renderização do preview ou mesmo de uso de memória.
talvez se você rodar o relatório direto da aplicação funcione sem nenhum problema.
Vinicius_Costa1
Tentei com uma imagem .png e não deu certo também. Complicado cara, não acho solução.
Vou tentar fazer no JasperSoft, se não der certo, vou tentar jogar direto na aplicação java o relatório e ver se funciona. Se não der, vou migrar para o MySQL, pois pelas pesquisas que fiz, pelo jeito lá é mais simples essa ponte entre a imagem e o iReport.
Posteriormente posto os resultados
De qualquer forma, obrigado pela ajuda.
Solucao aceita
Villagram1 like
Não acho que o Jasper vai resolver se for problema de relatório visto que o IReport é desenvolvido por eles, também não acho que seja um problema com o banco de dados, como eu disse acho que pode ser um problema de renderização dentro da IDE, rodar direto no sistema é a melhor opção para riscar a possibilidade da lista.
Eu usei o IReport 5.6 com NetBeans 8.2 para rodar o preview.
Vinicius_Costa1
Rapaz, era isso mesmo, coloquei o relatório na aplicação java e deu certo, o relatório trouxe a imagem normalmente.
Cara muito obrigado pela ajuda, desde o começo então era problema na renderização que o iReport estava fazendo. Fica a sua dica para as pessoas que vierem a enfrentar o mesmo problema.
rodriguesabner1 like
Só um detalhe, o Jasper pode resolver sim, até pq o iReport tá descontinuado, eu consigo recuperar imagens com aquele trecho de código que passei lá no começo. Vale a pena tentar
Vinicius_Costa11 like
O seu código deu certo orochimaru, o problema era realmente algo envolvendo o iReport na hora de renderizar. Foi somente executar o relatório pela aplicação do netbeans e funcionou perfeitamente. Como é algo que funciona apenas mudando de IDE, creio que realmente funcionária no Jasper.