Estou tentando passar o logo da empresa para o relatório(estou gerando PDF pelo jasper “iReport 3.7.0”).
Entretanto, a imagem insiste em não aparecer e não sei mais o que fazer.
Olá…
Bem, primeiro: na raiz do seu S.O. existe um diretórios chamado imagens com a imagem FigLogoCliente.png lá dentro?
Quando quizer pegar a imagem por um File, deve colocar o nome completo, como: C:\diretorioDoPrograma\imagens\FigLogoCliente.png.
Mais um detalhe: Como o tipo do parametro logo já é File, não é necessário instânciar um novo objeto do tipo File.
Acredito que se fizer assim:
… tendo declarado o logo com um tipo File nos seus parametros, já funciona.
Só para tirar a duvida, vamos ver se esse File realmente aponta para um arquivo. Faça assim:
...
File logo = new File("/imagens/FigLogoCliente.png");
System.out.println(logo.isFile());
Map parameters = new HashMap();
parameters.put("logo", logo);
...
Se o retorno for true, então realmente aponta para o arquivo, mas se for false então reveja o caminho que você passou como referência.
Não é restrição de imagem pois o padrão de Reports é com imagens PNG
Só que note que ele está passando a imagem como um parametro provavelmente OBJECT. e você tem que transformar para IMG.
Da uma olhada no report o tipo de parametro que voce esta passando e qual o parametro desejado…
pode ser incompatibilidade de tipos;
Estive observando atentamente o seu código e vi que você instancia um HashMap, adiciona o valor logo nele, mas não passa o mapa como parametro no construtor do JRBeanCollectionDataSource. Sendo assim não está passando o File para o relatório.
JRResultSetDataSource jrRS = new JRResultSetDataSource(Conexao.Consultar());
InputStream is = getClass().getResourceAsStream("/reports/motorista.jasper");
//HashMap map = new HashMap();
Map parameters = new HashMap();
//File logo = new File("/images/Linux_Logo.png");
//File logo = new File("D:/Java/Sistemas/Sistema de Frota/Source/Sistema de Frota/src/images/Linux_Logo.png");
//System.out.println(logo.isFile());
//InputStream logo = getClass().getResourceAsStream("/images/Linux_Logo.png");
//InputStream logo = getClass().getResourceAsStream("D:/Java/Sistemas/Sistema de Frota/Source/Sistema de Frota/src/images/Linux_Logo.png");
parameters.put("logo", logo);
JasperPrint print = JasperFillManager.fillReport(is, parameters, jrRS);
JasperViewer viewer = new JasperViewer(print, false);
viewer.setDefaultCloseOperation(DISPOSE_ON_CLOSE);
viewer.setVisible(true);[/code]
Desculpe a minha ignorância, ( :oops: ) mas ainda não estou conseguindo fazer isso, gostaria de saber onde estou errando, alguem poderia dar esta ajuda? obrigado!
// Passagem do logotipo por parâmetro
ServletContext servletContext = (ServletContext)getContext().getExternalContext().getContext();
String path = servletContext.getRealPath("/imagens/BrasaoCubatao.jpg");
File brasao = new File(path);
parameters.put("brasao", brasao);
No relatório, criei um parameter chamado brasao que recebe um java.lang.Object.
Depois, inseri um image na posição que eu queria o brasão e associei essa parameter ao image no image express e no expression class do image, converti para java.io.File.