[RESOLVIDO] Imagem no iReport

Pessoal, tenho pouca experiencia com o iReport e estou fazendo um relatório que precisa de uma imagem do logotipo da empresa… como eu faço para colocar essa imagem no relatório ??? não estou conseguindo de jeito nenhum.

  • só um detalhe, estou gerando o relatório em pdf.

vlw

Luis Cesar

Amigo,

É tranquilo. Primeiro você cria um parâmetro no iReport do tipo java.awt.Image com o nome por exemplo de, logo.

Depois você vai arrastar um componente Image do iReport e colocar na página. Na aba imagem deste componente você escreve o nome do seu parametro que é a imagem, por exemplo, $P{logo}.

Agora nas suas classes você precisa enviar a imagem como um parâmetro. Existem n formas de se fazer isso, ai vai uma delas:

ImageIcon gto = new ImageIcon(getClass().getResource("/br/com/dominio/projeto/report/logo.gif")); params.put("logo", gto.getImage());

Abraços,

Normandes Junior.

1 curtida

normandesjr, fiz como vc me sugeriu mas o apache me reportou um erro:

java.lang.NullPointerException
	javax.swing.ImageIcon.<init>(Unknown Source)
	report.AutorizacaoServico.doPost(AutorizacaoServico.java:42)
	report.AutorizacaoServico.doGet(AutorizacaoServico.java:71)
	javax.servlet.http.HttpServlet.service(HttpServlet.java:690)
	javax.servlet.http.HttpServlet.service(HttpServlet.java:803)

tem alguma ideia ?

[]’ Luis César

ops… já consegui…

era somente a caminho que estava errado… a ajudo do normandesjr foi perfeita… muito obrigado.

[]'Luis César

cara pq vc num usa o IReports ?

Mas eu estou usando o iReport, esse relatório é no iReport

Luis Cesar

Que bom. :smiley:

Abraços.

No link abaixo tem uns vídeos interessantes que ajudam a fazer forma simples um relatório utilizando o iReport dentro do NetNeans 6.0 já aplicado dentro do seu progama…

http://www.jasperforge.org/jaspersoft/opensource/b…report/page.php?name=iReportNB

Ainda não testei, mas parece ser muito prático e fácil.

uso o Ireport 3.7.1
to com um problema aqui que da erro quando copio meu projeto para executar em outra maquina…
erro é da imagem de relatorio… feito no iReporte
me pareçe que fauta algum componente
pq a imagem se localisa no mesmo lugar em que copio a pasta
unidade C:\OS\report\logo.jpeg
eu fiz adicionando a imagem lá no IReporte e em minha maquina funciona normal
até depois de limpar e contruir usando o executavel.Jar da dist (uso Netbeans).“teste fora do NetBeans” 'executavel criado pelo mesmo’
creio que fica fautando algum componente na lib sobre imagem,
pode ser isso mesmo?
ou só pega se fazer dessa forma que fizeram passando por parametro?

Cuidado se vc está levando o folder dist para o novo destino, pois as bibliotecas ficam juntas e são necessário para a execução do jar.

Para não ter esse problema, compacte todas as bibliotecas dentro do jar!

[quote=jj_df]Cuidado se vc está levando o folder dist para o novo destino, pois as bibliotecas ficam juntas e são necessário para a execução do jar.

Para não ter esse problema, compacte todas as bibliotecas dentro do jar![/quote]
como faz isso?

http://java.sun.com/developer/technicalArticles/java_warehouse/single_jar/

Não importa a sua versão, nesse texto dá pra entender como faz e vc no máximo vai adaptar uma coisinha ou outra pra sua versão, nem sei se precisar fazer alguma coisa mesmo!
Se estiver utilizando eclipse, dá pra fazer tb, mas eu não uso o eclipse!

Vlw brother normandesjr , me ajudou bastante, pensei que a lista de tipos era somente a disponível na lista do ireport lá, apaguei e pus java.awt.image e mandei bala, funcionou perfeitamente, no meu caso passei como bean no JRBeanCollectionDataSource e funcionou perfeitamente!

Olá Pessoal!

No preview do netbeans funciona mas quando mando rodar executando o programa só não carrega a imagem.
Eu estou usando a imagem salva em uma pasta e passo como parametro todo o caminho até a pasta, mas dá o seguinte erro:
Byte data not found at : sun.awt.image.ToolkitImage@48144df0

Já usei a variável de parametro do Ireport como java.awt.Image, como java.lang.String
Na imagem deixo como java.awt.Image. no Expression Class.

Segue código Ireport passo como parametro pois é usada para cada usuário uma imagem (foto).

<parameter name="imagemFoto" class="java.awt.Image">
		<defaultValueExpression><![CDATA[$P{imagemFoto}]]></defaultValueExpression>
</parameter>

A declaração do componente imagem

<image>
	<reportElement uuid="44e09861-a2cc-42c0-a5cf-22ff90245863" x="270" y="10" width="72" height="90"/>
	<imageExpression><![CDATA[$P{imagemFoto}]]></imageExpression>
</image>

E o método que pega o caminho da imagem da tela, verifiquei que pega correto da pasta o caminho usando o debug.

private void jButton1ActionPerformed(java.awt.event.ActionEvent evt) {                                         
        ImageIcon gto = new ImageIcon("C:/AgendadeContatos/imagem/" + nomeFoto);  
        InputStream inputStream = getClass().getResourceAsStream("/contato.jasper");
        Map parametros = new HashMap();       
        parametros.put("ID", Integer.parseInt(jTid.getText()));
        parametros.put("imagemFoto", gto.getImage());  
        try { 
            // abre o relatório
            ReporteUtil.abreReport( "Clientes", inputStream, parametros,
                    CriaConexao.getConexao());
 
        } catch ( SQLException | JRException exc ) {
            System.out.println("Erro ao abrir arquivo jasper... " + exc.getMessage());
        }        
    } 

Metodo que é chamado “abreReport”

public static void abreReport(String titulo, InputStream inputStream,
            Map parametros, Connection conexao) throws JRException {
        JasperPrint print = JasperFillManager.fillReport(inputStream, parametros, conexao);
        // abre o JasperPrint em um JFrame
        viewReportFrame(titulo, print);
    }
Dá o erro no metodo fillReport.

Se alguém tiver alguma ideia.

Então brother, debuga aí se a imagem é encontrada com as funções “file/exists” quando vai executar, tem que ir passo a passo até achar onde que está o erro, estou meio sem tempo e vou tentar te ajudar o máximo no que posso

Outra coisa diferente que esta no meu projeto, não tenho certeza quanto a utilização disto com parametros pois fiz com jrdatasource onde passo a query atraves de um array no java (era necessario para mim pois precisava de uns calculos, codigo de barras e tal)

Vou te passar meu código (as partes essenciais dele), tenho até intenção divulgar ao publico algum dia por não ter no mercado ainda boletos com ireport, porém tenho que terminar antes…

onde está o path da imagem, atenção pois aqui é o caminho relativo pois esta dentro dos pacotes

[code]import java.net.URL;

public class Resource {

private static Resource resources;
//
public URL IMAGE_AMPARA;
public URL IMAGE_MULTICAR;
public URL IMAGE_CAIXA;

public Resource() {
    IMAGE_AMPARA = getClass().getResource("/com/djar/boleto/resources/ampara.jpg");[/code]

onde declaro o objeto que vai conter a imagem

[code]import java.awt.Image;

public class Cedente {

public Image logo;

[/code]

onde instancio a imagem instancio a imagem para a variável

onde mando imprimir o relatório

[code] // gera o pdf do relatório
InputStream relatorio = null;

    if (metodoImpressao == Impressao.FULLPAGE) {
        relatorio = getClass().getResourceAsStream("/com/djar/boleto/relatorios/fullpage.jasper");
        System.out.println("fullpage");
    } else if (metodoImpressao == Impressao.COMPACT) {
        relatorio = getClass().getResourceAsStream("/com/djar/boleto/relatorios/compact.jasper");
    } else if (metodoImpressao == Impressao.CARNE3PORPAG) {
        relatorio = getClass().getResourceAsStream("/com/djar/boleto/relatorios/carne3porpag.jasper");
    } else {
        System.out.println("Tipo do documento a imprimir não é válido!");
        System.exit(1);
    }

    String outFileName = arquivo;
    HashMap parametros = new HashMap();
    JRBeanCollectionDataSource datasource = new JRBeanCollectionDataSource(impressoes);

    try {
        JasperPrint print = JasperFillManager.fillReport(relatorio, parametros, datasource);
        JRExporter exporter = new net.sf.jasperreports.engine.export.JRPdfExporter();
        exporter.setParameter(JRExporterParameter.OUTPUT_FILE_NAME, outFileName);
        exporter.setParameter(JRExporterParameter.JASPER_PRINT, print);
        exporter.exportReport();
        System.out.println("relatório criado: " + outFileName);
    } catch (JRException e) {
        e.printStackTrace();
        System.exit(1);
    } catch (Exception e) {
        e.printStackTrace();
        System.exit(1);
    }

[/code]

no ireport os fields (nao sao mais parametros pois eu passo todos meus dados via array como é dito no tópico, nem existe consulta sql lá)

<field name="codigobarras" class="java.awt.Image"/> <field name="logobanco" class="java.awt.Image"/> <field name="logoempresa" class="java.awt.Image"/>

onde imprime


			<image hAlign="Center" vAlign="Bottom">
				<reportElement uuid="69a74ae7-b660-40b2-b351-8d2d8e8ffc54" mode="Opaque" x="3" y="3" width="152" height="38" forecolor="#FFFFFF"/>
				<imageExpression><![CDATA[$F{logoempresa}]]></imageExpression>
			</image>

Resolvido!
Foi mais erro meu do que problema, eu pego minha imagem de uma pasta fora do src ai não preciso trabalhar com imagem e sim com String, passei para o paramentro o tipo String e para a classe da imagem tambem String e resolveu o problema, pois só preciso informar qual o caminho até a imagem.

No metodo fica assim:

  private void jButton1ActionPerformed(java.awt.event.ActionEvent evt) {                                         
        InputStream inputStream = getClass().getResourceAsStream( "/report1.jasper" );
        Map parametros = new HashMap();       
        parametros.put("ID", Integer.parseInt(jTid.getText()));
        parametros.put("imgFoto", "C:/AgendadeContatos/imagem/" + nomeFoto);
        try { 
            // abre o relatório
            ReportUtil.abreReport( "Contatos", inputStream, parametros, CriaConexao.getConexao());
 
        } catch ( SQLException | JRException exc ) {
            System.out.println("Erro ao abrir arquivo jasper... " + exc.getMessage());
        }
    }

Valeu pela ajuda.

Amigos boa noite,
Sou novo com Ireport, estou tentando passar parametros para iReport, já tentei de tudo, diversas formas, e até agora não consigo ver uma luz no fundo do túnel, por favor me ajudem, segue meu código:

Versão netbeans: 7.3
Versão Ireport: 5.2.0
Versão MySQL: 5.6.12


import net.sf.jasperreports.engine.*;
import net.sf.jasperreports.view.JasperViewer;

//import net.sf.jasperreports.engine.JRException;  
//import net.sf.jasperreports.engine.JasperFillManager;
//import net.sf.jasperreports.engine.JasperPrint;
//import net.sf.jasperreports.engine.JasperReport;
//import net.sf.jasperreports.engine.util.JRLoader;
//import net.sf.jasperreports.engine.JRException;
//import net.sf.jasperreports.engine.JasperReport;
//import net.sf.jasperreports.engine.JasperReportsContext;
//import net.sf.jasperreports.web.JRInteractiveException;
//import net.sf.jasperreports.web.WebReportContext;
//import net.sf.jasperreports.web.actions.Action;
import wr.acessoBD.AcessoMySql;

 private void imprimirRecibo() throws SQLException {
       
        
        try {
            Connection con;
             
            con = AcessoMySql.conectar();
            //InputStream relatorio = getClass().getResourceAsStream( "./relatorio_comanda.jasper" );  
            InputStream relatorio = getClass().getResourceAsStream( "/wrestaurante/view/relatorio_comanda.jasper" );  
                      
            Map parametros = new HashMap();
            parametros.put("nmesa", getMesa());

            System.out.println("relatorio = " + relatorio);
            //Resultado do print relatorio = java.io.BufferedInputStream@41424b9c
 
            System.out.println("parametro = " + parametros);
            //Resultado do print parametro = {nmesa=4}

            System.out.println("con = " + con);
            //Resultado do print con = com.mysql.jdbc.JDBC4Connection@6772103c
            
Linha 1461:   JasperPrint print = JasperFillManager.fillReport(relatorio, parametros, con); //Onde ocorre o erro
           
            JasperViewer.viewReport(print);
            
        } catch (JRException ex) {
            Logger.getLogger(PedidosView.class.getName()).log(Level.SEVERE, null, ex);
        }
    
    }

Quando utilizo o preview do iReport ele pede o parâmetro, e funciona perfeito, mas quando vou para o netBeans e tento comunicar com o iReport gera o erro na linha 1461, como o trace abaixo:

relatorio = java.io.BufferedInputStream@71880832
parametro = {nmesa=4}
con = com.mysql.jdbc.JDBC4Connection@19d244d9
Exception in thread "AWT-EventQueue-0" java.lang.NoClassDefFoundError: org/apache/commons/logging/LogFactory
	at net.sf.jasperreports.engine.util.JRLoader.<clinit>(JRLoader.java:68)
	at net.sf.jasperreports.engine.JRPropertiesUtil.loadProperties(JRPropertiesUtil.java:99)
	at net.sf.jasperreports.engine.DefaultJasperReportsContext.initProperties(DefaultJasperReportsContext.java:94)
	at net.sf.jasperreports.engine.DefaultJasperReportsContext.<init>(DefaultJasperReportsContext.java:71)
	at net.sf.jasperreports.engine.DefaultJasperReportsContext.<clinit>(DefaultJasperReportsContext.java:59)
	at net.sf.jasperreports.engine.JasperFillManager.getDefaultInstance(JasperFillManager.java:85)
	at net.sf.jasperreports.engine.JasperFillManager.fillReport(JasperFillManager.java:824)
	at wrestaurante.view.PedidosView.imprimirRecibo(PedidosView.java:1461)
	at wrestaurante.view.PedidosView.jButton2ActionPerformed(PedidosView.java:908)
	at wrestaurante.view.PedidosView.access$1900(PedidosView.java:91)
	at wrestaurante.view.PedidosView$18.actionPerformed(PedidosView.java:520)
	at javax.swing.AbstractButton.fireActionPerformed(AbstractButton.java:2018)
	at javax.swing.AbstractButton$Handler.actionPerformed(AbstractButton.java:2341)
	at javax.swing.DefaultButtonModel.fireActionPerformed(DefaultButtonModel.java:402)
	at javax.swing.DefaultButtonModel.setPressed(DefaultButtonModel.java:259)
	at javax.swing.plaf.basic.BasicButtonListener.mouseReleased(BasicButtonListener.java:252)
	at java.awt.Component.processMouseEvent(Component.java:6505)
	at javax.swing.JComponent.processMouseEvent(JComponent.java:3321)
	at java.awt.Component.processEvent(Component.java:6270)
	at java.awt.Container.processEvent(Container.java:2229)
	at java.awt.Component.dispatchEventImpl(Component.java:4861)
	at java.awt.Container.dispatchEventImpl(Container.java:2287)
	at java.awt.Component.dispatchEvent(Component.java:4687)
	at java.awt.LightweightDispatcher.retargetMouseEvent(Container.java:4832)
	at java.awt.LightweightDispatcher.processMouseEvent(Container.java:4492)
	at java.awt.LightweightDispatcher.dispatchEvent(Container.java:4422)
	at java.awt.Container.dispatchEventImpl(Container.java:2273)
	at java.awt.Window.dispatchEventImpl(Window.java:2719)
	at java.awt.Component.dispatchEvent(Component.java:4687)
	at java.awt.EventQueue.dispatchEventImpl(EventQueue.java:735)
	at java.awt.EventQueue.access$200(EventQueue.java:103)
	at java.awt.EventQueue$3.run(EventQueue.java:694)
	at java.awt.EventQueue$3.run(EventQueue.java:692)
	at java.security.AccessController.doPrivileged(Native Method)
	at java.security.ProtectionDomain$1.doIntersectionPrivilege(ProtectionDomain.java:76)
	at java.security.ProtectionDomain$1.doIntersectionPrivilege(ProtectionDomain.java:87)
	at java.awt.EventQueue$4.run(EventQueue.java:708)
	at java.awt.EventQueue$4.run(EventQueue.java:706)
	at java.security.AccessController.doPrivileged(Native Method)
	at java.security.ProtectionDomain$1.doIntersectionPrivilege(ProtectionDomain.java:76)

	at java.awt.EventQueue.dispatchEvent(EventQueue.java:705)
	at java.awt.EventDispatchThread.pumpOneEventForFilters(EventDispatchThread.java:242)
	at java.awt.EventDispatchThread.pumpEventsForFilter(EventDispatchThread.java:161)
	at java.awt.EventDispatchThread.pumpEventsForFilter(EventDispatchThread.java:154)
	at java.awt.WaitDispatchSupport$2.run(WaitDispatchSupport.java:182)
	at java.awt.WaitDispatchSupport$4.run(WaitDispatchSupport.java:221)
	at java.security.AccessController.doPrivileged(Native Method)
	at java.awt.WaitDispatchSupport.enter(WaitDispatchSupport.java:219)
	at java.awt.Dialog.show(Dialog.java:1082)
	at java.awt.Component.show(Component.java:1651)
	at java.awt.Component.setVisible(Component.java:1603)
	at java.awt.Window.setVisible(Window.java:1014)
	at java.awt.Dialog.setVisible(Dialog.java:1005)
	at wrestaurante.view.Inicio.exibirPedido(Inicio.java:3238)
	at wrestaurante.view.Inicio.bt4ActionPerformed(Inicio.java:2774)
	at wrestaurante.view.Inicio.access$2000(Inicio.java:19)
	at wrestaurante.view.Inicio$21.actionPerformed(Inicio.java:1614)
	at javax.swing.AbstractButton.fireActionPerformed(AbstractButton.java:2018)
	at javax.swing.AbstractButton$Handler.actionPerformed(AbstractButton.java:2341)
	at javax.swing.DefaultButtonModel.fireActionPerformed(DefaultButtonModel.java:402)
	at javax.swing.DefaultButtonModel.setPressed(DefaultButtonModel.java:259)
	at javax.swing.plaf.basic.BasicButtonListener.mouseReleased(BasicButtonListener.java:252)
	at java.awt.Component.processMouseEvent(Component.java:6505)
	at javax.swing.JComponent.processMouseEvent(JComponent.java:3321)
	at java.awt.Component.processEvent(Component.java:6270)
	at java.awt.Container.processEvent(Container.java:2229)
	at java.awt.Component.dispatchEventImpl(Component.java:4861)
	at java.awt.Container.dispatchEventImpl(Container.java:2287)
	at java.awt.Component.dispatchEvent(Component.java:4687)
	at java.awt.LightweightDispatcher.retargetMouseEvent(Container.java:4832)
	at java.awt.LightweightDispatcher.processMouseEvent(Container.java:4492)
	at java.awt.LightweightDispatcher.dispatchEvent(Container.java:4422)
	at java.awt.Container.dispatchEventImpl(Container.java:2273)
	at java.awt.Window.dispatchEventImpl(Window.java:2719)
	at java.awt.Component.dispatchEvent(Component.java:4687)
	at java.awt.EventQueue.dispatchEventImpl(EventQueue.java:735)
	at java.awt.EventQueue.access$200(EventQueue.java:103)
	at java.awt.EventQueue$3.run(EventQueue.java:694)
	at java.awt.EventQueue$3.run(EventQueue.java:692)
	at java.security.AccessController.doPrivileged(Native Method)
	at java.security.ProtectionDomain$1.doIntersectionPrivilege(ProtectionDomain.java:76)
	at java.security.ProtectionDomain$1.doIntersectionPrivilege(ProtectionDomain.java:87)
	at java.awt.EventQueue$4.run(EventQueue.java:708)
	at java.awt.EventQueue$4.run(EventQueue.java:706)
	at java.security.AccessController.doPrivileged(Native Method)
	at java.security.ProtectionDomain$1.doIntersectionPrivilege(ProtectionDomain.java:76)
	at java.awt.EventQueue.dispatchEvent(EventQueue.java:705)
	at java.awt.EventDispatchThread.pumpOneEventForFilters(EventDispatchThread.java:242)
	at java.awt.EventDispatchThread.pumpEventsForFilter(EventDispatchThread.java:161)
	at java.awt.EventDispatchThread.pumpEventsForHierarchy(EventDispatchThread.java:150)
	at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:146)
	at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:138)
	at java.awt.EventDispatchThread.run(EventDispatchThread.java:91)
Caused by: java.lang.ClassNotFoundException: org.apache.commons.logging.LogFactory
	at java.net.URLClassLoader$1.run(URLClassLoader.java:366)
	at java.net.URLClassLoader$1.run(URLClassLoader.java:355)
	at java.security.AccessController.doPrivileged(Native Method)
	at java.net.URLClassLoader.findClass(URLClassLoader.java:354)
	at java.lang.ClassLoader.loadClass(ClassLoader.java:424)
	at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:308)
	at java.lang.ClassLoader.loadClass(ClassLoader.java:357)
	... 93 more

RESOLVIDO!

Utilizei as jars:

commons-logging-1.1.1.jar
commons-beanutils-1.8.0.jar
commons-digester-2.1.jar
iText-2.1.7.js2.jar
commons-collections-2.1.1.jar
jasperreports-5.2.0.jar

Obrigado

[quote=normandesjr]Amigo,

É tranquilo. Primeiro você cria um parâmetro no iReport do tipo java.awt.Image com o nome por exemplo de, logo.

Depois você vai arrastar um componente Image do iReport e colocar na página. Na aba imagem deste componente você escreve o nome do seu parametro que é a imagem, por exemplo, $P{logo}.

Agora nas suas classes você precisa enviar a imagem como um parâmetro. Existem n formas de se fazer isso, ai vai uma delas:

ImageIcon gto = new ImageIcon(getClass().getResource("/br/com/dominio/projeto/report/logo.gif")); params.put("logo", gto.getImage());

Abraços,

Normandes Junior.[/quote]

[quote=normandesjr] Oi sou novo por aqui e estou querendo saber qual a forma correta de passar o caminho da imagem,
pois sempre dá nullPointer

    	final ImageIcon CAMINHOIMAGEMLOGO = new ImageIcon(getClass().getResource("/relatorios/images/logo_web.jpg"));
    	final ImageIcon CAMINHOIMAGEMBRASAO = new ImageIcon(getClass().getResource("/relatorios/images/brasao.jpg"));
    	parametros.put("CAMINHOIMAGEMLOGO", CAMINHOIMAGEMLOGO.getImage());
    	parametros.put("CAMINHOIMAGEMBRASAO", CAMINHOIMAGEMBRASAO.getImage());

A minha estrutura de pastas no eclipse é essa:

                                                     src
                                                         main
                                                            java
                                                            resources
                                                                 br
                                                                 conf
                                                                 META_INF
                                                                 relatorios
                                                                      images 
                                                                          logo_sigem_web.jpg
                                                                          sigem_brasao.jpg  

Aonde estou errando por favor me ajudem.

Grato!

[size=18]RESOLVIDO GALERA![/size]

O meu problema era que estava passando o caminho da imagem para o Ireport como String dessa forma:

String diretorioImagem =this.getClass().getClassLoader().getResource("relatorios/images").getPath();
parametros.put("CAMINHO_IMAGEM_BRASAO", diretorioImagem	+ java.io.File.separator + "sigem_brasao.jpg");

E no Ireport eu criei um parâmetro para a imagem com o tipo String, até então tudo certo localmente as imagens do relatório apareciam normalmente, porém quando eu subiu uma build para homologação a String passada não era encontrada no servidor Jboss Linux, por ter uma estrutura de pastas diferentes do windows e a imagens apareciam em branco.
Depois de muita pesquisa resolvi passar a imagem como Stream dessa forma:

InputStream caminhoImagemBrasao = getClass().getResourceAsStream("/relatorios/images/sigem_brasao.jpg");
parametros.put("CAMINHO_IMAGEM_BRASAO", caminhoImagemBrasao);

E no Ireport eu mudei o parâmetro que era String para InputStream tanto a imagem como o parâmetro e funfou de boas.