[RESOLVIDO]Imagem do PostgreSQL no iReport

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)

private byte[] converterImagem(File file) throws FileNotFoundException, IOException {
    FileInputStream fis = new FileInputStream(file);
    ByteArrayOutputStream bos = new ByteArrayOutputStream();
    byte[] buf = new byte[1024];
    try {
        for (int readNum; (readNum = fis.read(buf)) != -1;) {
            bos.write(buf, 0, readNum);
        }
    } catch (IOException ex) {
        ex.printStackTrace();
    }
    byte[] bytes = bos.toByteArray();

    return bytes;
}

bom dia, fiz o teste da seguinte forma:

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;

import javax.imageio.ImageIO;
import javax.swing.*;
import java.awt.image.BufferedImage;
import java.io.ByteArrayInputStream;
import java.io.File;
import java.nio.file.Files;

@Service
public class ReportByteImage {

    @Autowired
    private ImageRepository imageRepository;

    public void execute() {
        try {
            byte[] image = Files.readAllBytes(new File("C:\\Users\\villagran\\Downloads\\villagran.jpg").toPath());
            imageRepository.save(new ImageTest(1L, image));
            ByteArrayInputStream byteArrayInputStream = new ByteArrayInputStream(imageRepository.findById(1L).get().getImage());
            BufferedImage bufferedImage = ImageIO.read(byteArrayInputStream);
            ImageIcon imageIcon = new ImageIcon(bufferedImage);
            System.out.println("teste");
        } catch (Exception ex) {
            ex.printStackTrace();
        }
    }

}

Me passa a classe ImageRepository pra eu ver como fica por favor.

@Vinicius_Costa1
Boa noite, acho que você vai ficar decepcionado, pois para fazer o exemplo rápido e sem muita configuração eu usei spring.

@Repository
public interface ImageRepository extends JpaRepository<Long, ImageTest> {

}

@Villagram
Esses conceitos são avançados pro meu conhecimento, não consegui aplicar seu método no meu código.

@Vinicius_Costa1
Segue exemplo para substituir seu método:

import java.io.File;
import java.nio.file.Files;

public class ReportByteImage {
    
    private byte[] converterImagem(File file) {
        try {
            return Files.readAllBytes(file.toPath());
        } catch (Exception ex) {
            ex.printStackTrace();
        }
        return null;
    }
    
}

@Villagram
Utilizei este método que você me passou e salvei outra imagem no banco, porém apareceu a mesma situação no iReport

image

Mesmo assim ainda imagino que seja o método que eu salvo a imagem no banco que pode estar ocasionando este problema

Qual o erro que o console do ireport passa?

Esse é o problema, o console fica em branco

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.

Se eu tirar a imagem, o relatório compila normalmente, fica tudo perfeito, ele só da erro quando eu insiro a imagem.

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.

essas imagens são muito grandes? ou tem algum formato diferente?

Fiz o teste com 2 imagens, ambas são .jpg e possuem em torno de 1MB.

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.

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.

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.

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.

1 curtida

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.

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

1 curtida