JasperReports: Sub-report com Imagem InputStream

7 respostas
D

Oi,

Estou usando o JasperReports 3.7.6 e iReport 3.7.6 na minha aplicação Desktop. Eu tenho o seguinte tipo de relatório:

relatório-1 (dados de texto)

  • Sub-relatório-1 (com imagem)

O problema é que eu tenho a imagem em byte[] na memória em meu aplicativo. Gostaria de interagir com Jasper, a fim de resolver o local do arquivo eu mesmo. Quero dizer, quando Jasper vai tentar obter a imagem (img-1.jpg, img-2.jpg, img-n.jpg) Eu gostaria de ter a imagem no meu código Java e retornar seu InputStream.

Isso porque as imagens são gravadas em um storage e são encodadas por um algoritmo específico. É por isso que eu preciso resolver a imagem pelo nome e devolvê-lo ao Jasper, a fim de preencher o relatório.

Existe algum filtro ou interceptador?

Grato. :wink:

7 Respostas

rdmardegam

Amigo !! Voce pode passar o InputStream da imagem para o Ireport renderizalo !!

So que vc vai ter q fazer os seguinte, passar o inputStream como parametro para seu relatorio principal e o seu relatorio principal, passa esse parametro para o sub-relatorio.

Assim, vc pode pegar a imagem de onde quiser, seja do banco de dados, da propia maquina, enfim de onde quiser, assim tirando essa resposanbilidade do Ireport.

Abraço.

D

rdmardegam obrigado por responder!

Acho que não detalhei direito
O problema é que para cada registro terei uma imagem diferente, sendo que preciso buscar no banco a imagem referente a cada registro do detalhe do relatório…

Por isso não é possível enviar a imagem através de parametro.

A tabela ta mais ou menos assim:

1 - tabela
- id (1, 2, 3…)
- imagem (rr41ww, rr42ww, rr43ww…)

onde o rr41ww, rr42ww, rr43ww e etc. simboliza a image criptografada.
Através de uma classe java consigo descriptografar e obter o caminho puro (C:/…).

rdmardegam

Voce poderia passar uma colecao de InputStream, onde cada looping do inputStream seria a imagem a ser renderizada!

Ou entao passar a colecao contando os caminhos das imagens!

D

O problema é que quero fazer passando a conexão para o Jasper…

Se for fazer desse jeito terei que executar a query no java e montar o data source… seria esse o unico jeito??

drigo.angelo

Creio que você pode instanciar uma classe sua de dentro do jasper, só nunca fiz isso…

drigo.angelo

[Pode ser útil]

D

drigo.angelo obrigado pela ajuda!

Resolvi da seguinte forma: criei uma classe em java com um metodo que decodifica as imagens e retorna seu InputStream em seguida referenciei sua .jar no classpath do iReport.

Depois de refereciar a jar criei um objeto de imagem no iReport e na propriedade “Image Expression” fiz a chamada do metodo que criei.

Obrigado a todos que ajudaram :wink:

Criado 7 de janeiro de 2011
Ultima resposta 10 de jan. de 2011
Respostas 7
Participantes 3