Estou gerando um xls e um pdf, passando uma imagem como parâmetro para o relatório.
No pdf, ele dimensiona certinho 64 px por 64 px, mas, no xls, ele insere a imagem no tamanho original dela 512 px por 512 px, não do tamanho do image que eu inseri no report. Eu setei a propriedade Scale Imagem para Retain Shape.
Ao que parece, a imagem não ficou atrelada a célula alguma.
Estou gerando um xls e um pdf, passando uma imagem como parâmetro para o relatório.
No pdf, ele dimensiona certinho 64 px por 64 px, mas, no xls, ele insere a imagem no tamanho original dela 512 px por 512 px, não do tamanho do image que eu inseri no report. Eu setei a propriedade Scale Imagem para Retain Shape.
Ao que parece, a imagem não ficou atrelada a célula alguma.
No menagedBean, fiz assim:
privateJRBeanCollectionDataSourceimprimir(){List<RetRegimeTrabalho>tipos=RegimeTrabalhoBo.filtrarRegimeTrabalho(filtroDescricao);JRBeanCollectionDataSourceds=newJRBeanCollectionDataSource(tipos,false);returnds;}privateMapsetarParametrosRelatorio(){// Passagem do logotipo por parâmetroMapparameters=newHashMap();ServletContextservletContext=(ServletContext)getContext().getExternalContext().getContext();Stringpath=servletContext.getRealPath("/imagens/BrasaoCubatao.jpg");Filebrasao=newFile(path);parameters.put("brasao",brasao);returnparameters;}publicvoidimprimirExcel(){Mapparameters=setarParametrosRelatorio();try{JRBeanCollectionDataSourceds=imprimir();impr.imprimirExcel(ds,"exportRegimeTrabalho",parameters);}catch(Exceptionex){Logger.getLogger(RegimeTrabalhoMb.class.getName()).log(Level.SEVERE,null,ex);}}
Método que faz a impressão em uma classe útil:
publicvoidimprimirExcel(JRBeanCollectionDataSourceds,StringnomeRelatorio,Mapparametros)throwsException{if(validaArquivoExistente(nomeRelatorio)){try{ServletContextservletContext=(ServletContext)getContext().getExternalContext().getContext();Stringpath=servletContext.getRealPath("/relatorios/"+nomeRelatorio+".jrxml");JasperReportjasperReport2=JasperCompileManager.compileReport(path);JasperPrintjasperPrint=JasperFillManager.fillReport(jasperReport2,parametros,ds);// obter o diretório temporário do servidor. funciona em qualquer sistema operacionalStringtempDir=System.getProperty("java.io.tmpdir");// obter a string de data até milisegundos para o nome do arquivo a ser geradoSimpleDateFormatdf=newSimpleDateFormat("yyyyMMddHHmmssS");StringdestFileName=df.format(newDate());// exportar para arquivo temporárioJasperExportManager.exportReportToHtmlFile(jasperPrint,tempDir+destFileName);// obter conteúdo do arquivo em bytesFilefile=newFile(tempDir+destFileName);FileInputStreamfReader=newFileInputStream(file);BufferedInputStreambuffReader=newBufferedInputStream(fReader);DataInputStreamdata=newDataInputStream(buffReader);Longl=newLong(file.length());byte[]b=newbyte[Integer.parseInt(l.toString())];data.read(b);// apagar arquivo temporáriofile.delete();HttpServletResponseresponse=(HttpServletResponse)FacesContext.getCurrentInstance().getExternalContext().getResponse();response.setContentType("application/vnd.ms-excel");response.setHeader("Content-disposition","attachment;filename=SigeExport.xls");response.getOutputStream().write(b);FacesContext.getCurrentInstance().responseComplete();}catch(Exceptionex){thrownewException(ex.getMessage());}}else{addMessage("Arquivo para geração de relatório não encontrado.");}}
Alguém já teve esse problema?
Obrigado a todos.
J
jcmaster
Será que é um problema recorrente da API do jasper? Achei vários tópicos em outros fóruns e grupos com esse problema, mas, nenhuma solução. rs
O jeito é continuar garimpando mesmo !!! rs