[Ajuda]Ireport com imagens para cada registro[Resolvido!]

11 respostas
UMC

Olá pessoal to com um problema que nao sei resolver que e sobre o Ireport.
Quero construir um relatorio que me traga os dados do banco e quero tbm trazer uma imagem com eles entao
para cada registro no banco diferente uma imagem.
Obrigado pela atenção.
vlw
abs

11 Respostas

vi-gb

Mas a imagem esta no banco ou só o endereco?
Tenho um sub-relatorio que traz uma imagem para cada linha, porem eu tinha os nomes das imagens e gerava o inputStream da imagem e setava no objeto da linha, entao quando passo para o relatorio a lista ja tem as imagens para exibir no sub-relatorio.

UMC

bom . e seguinte eu tenho o endereço da imagen mais o nome da imagen e justamente um valor do campo que esta no banco fica +/- assim:

Banco: valor_banco = nome ; e relaorio imagens = /caminho/+Variavel valor_banco+.jpg

entao quero o seguinte para cada registro um imagem com aquela foto
vlw
abs

vi-gb

Nao sei se é a melhor maneira de se fazer mas aqui funcionou.

Coloque um atributo InputStream na sua classe, nao precisa persisti-lo nao, só ‘transient’ mesmo.
Quando tiver a sua lista de objetos a exibir, faça assim:

ExternalContext context = FacesContext.getCurrentInstance().getExternalContext(); for (MeuObjeto obj : lista) { InputStream stream = context.getResourceAsStream(obj.getImagem()); obj.setStream(stream) }

No iReport voce cria um campo que recebe um InputStream, e como ele vem de um atributo do seu objeto a chamada fica igual a qualquer outra.

UMC

cara desculpe mais nao entedir!!!
vc quer minha classe? assim pode ficar facil de vc me mostar como implementar o q vc postou!!
vlw

vi-gb

Posta seu codigo por favor.

UMC
ta ae!!
while((rs.next())){
			 
			 setX( rs.getInt("cx")-200);
			 setY( rs.getInt("cy")-200);
			 setX_( rs.getInt("cx_")-200);
			 setY_( rs.getInt("cy_")-200);
			 int nnn = (rs.getInt("sequencia"));
			 setSequencia(rs.getString("sequencia"));

Graphics2D g1 = imagem.createGraphics();  
		  		g1.setColor(Color.WHITE); 
		  	    //g1.drawRect(0,0,820, 677);
				g1.fillRect(0,0, 820, 677);
g1.setFont(bigFont);
		     g1.drawString("Pontos",80,20);
		     g.setFont(bigFont);
		     g.drawString("Pontos",80,20);
if(nnn == 1){
g1.setColor(Color.LIGHT_GRAY);
g1.fillArc(getX(),getY(),20,20,0,360);
 g1.setColor(Color.black);
			     g1.drawString(getSequencia(), getX()+4,getY()+15);

 if(nnn > 1){
 g1.setColor(Color.white);

				 g1.drawLine(getX_()+12,getY_()+12,getX()+12,getY()+12);
if(lum.equals("PST")){
g1.fillArc(getX(),getY(),20,20,0,360);
				      //g.fillArc(getX(),getY(),20,20,0,360);
				      //
				      g1.setColor(Color.black);
 g1.drawString(getSequencia(), getX()+4,getY()+15);
}else{
					 
					 g1.setColor(Color.magenta);
				     g1.fillArc(getX(),getY(),20,20,0,360);
				     g1.setColor(Color.black);
				     g1.drawString(getSequencia(), getX()+4,getY()+15);
setXy1 (new ArrayList<Integer>());
			getXy1().add(getX());
			
			setYx2(new ArrayList<Integer>());
			getYx2().add(getY());
			//xy.add(getY());
			//xy.add(getN());
			setN(new ArrayList<Integer>());
			getN().add(nnn);
			setRes(true);
		 }
			}
g1.setPaint(Color.white);
			g1.dispose();  
ImageIO.write(imagem, "jpg", new File("C:/export.jpg"));  
		}
		}
vlw abs
vi-gb

Neste codigo voce esta criando a imagem, entao ela nao vem do banco, voce a cria antes de gerar o relatorio?

Se for isso, segundo o topico http://www.guj.com.br/posts/list/76219.java

O seguinte codigo converte um BufferedImage em um InputStream:

ByteArrayOutputStream bos = new ByteArrayOutputStream(); JPEGImageEncoder encoder = JPEGCodec.createJPEGEncoder(bos); JPEGEncodeParam param = encoder.getDefaultJPEGEncodeParam(bufferedImage); int quality = 100; // Use between 1 and 100, with 100 being hest quality quality = Math.max(0, Math.min(quality, 100)); param.setQuality((float)quality / 100.0f, false); encoder.setJPEGEncodeParam(param); encoder.encode(bufferedImage); InputStream is = new ByteArrayInputStream(bos.toByteArray());

Agora guarde este inputStream na lista que será mandada ao jasper.

UMC

sim!!

vi-gb

Acabei editando o post mas veja se aquilo te serve, tinha postado o codigo que uso, pegando atraves do faces o inputStream, agora postei um que serve para o seu codigo eu acho.

UMC

ok
Obrigado pela atenção vou fazer ums testes depois!!!
To fazendo de outra maneira pra ver se dar certo!!!
vlw
abs

UMC

Obrigado vi-gb pela ajuda!!!
eu ultilizei os Grupos no Ireport para fazer isso!!!
vlw
abs

Criado 8 de dezembro de 2009
Ultima resposta 11 de dez. de 2009
Respostas 11
Participantes 2