Imagem em xls usando iReports 3.7(jasperReports)

2 respostas
J

Olá pesooal.

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.

Alguém já teve esse problema?

Obrigado a todos.

2 Respostas

J

jcmaster:
Olá pesooal.

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:

private JRBeanCollectionDataSource imprimir() {
        List<RetRegimeTrabalho> tipos = RegimeTrabalhoBo.filtrarRegimeTrabalho(filtroDescricao);
        JRBeanCollectionDataSource ds = new JRBeanCollectionDataSource(tipos, false);
        return ds;
    }

    private Map setarParametrosRelatorio(){
         // Passagem do logotipo por parâmetro
        Map parameters = new HashMap();
        ServletContext servletContext = (ServletContext)getContext().getExternalContext().getContext();
        String path = servletContext.getRealPath("/imagens/BrasaoCubatao.jpg");
        File brasao = new File(path);
        parameters.put("brasao", brasao);
        return parameters;
    }

    public void imprimirExcel() {

        Map parameters = setarParametrosRelatorio();
        try{
            JRBeanCollectionDataSource ds = imprimir();
            impr.imprimirExcel(ds, "exportRegimeTrabalho", parameters);
        } catch (Exception ex) {
            Logger.getLogger(RegimeTrabalhoMb.class.getName()).log(Level.SEVERE, null, ex);
        }
    }

Método que faz a impressão em uma classe útil:

public void imprimirExcel(JRBeanCollectionDataSource ds, String nomeRelatorio, Map parametros ) throws Exception {

        if(validaArquivoExistente(nomeRelatorio)){
            try {

                ServletContext servletContext = (ServletContext)getContext().getExternalContext().getContext();
                String path = servletContext.getRealPath("/relatorios/"+nomeRelatorio+".jrxml");

                JasperReport jasperReport2  = JasperCompileManager.compileReport(path);

                JasperPrint jasperPrint = JasperFillManager.fillReport(jasperReport2, parametros, ds);

                // obter o diretório temporário do servidor. funciona em qualquer sistema operacional
                String tempDir = System.getProperty ("java.io.tmpdir");

                // obter a string de data até milisegundos para o nome do arquivo a ser gerado
                SimpleDateFormat df = new SimpleDateFormat("yyyyMMddHHmmssS");
                String destFileName = df.format(new Date());

                // exportar para arquivo temporário
                JasperExportManager.exportReportToHtmlFile(jasperPrint, tempDir + destFileName);

                // obter conteúdo do arquivo em bytes
                File file = new File(tempDir + destFileName);
                FileInputStream fReader = new FileInputStream(file);
                BufferedInputStream buffReader = new BufferedInputStream(fReader);
                DataInputStream data = new DataInputStream(buffReader);
                Long l = new Long(file.length());
                byte[] b = new byte[Integer.parseInt(l.toString())];
                data.read(b);

                // apagar arquivo temporário
                file.delete();

                HttpServletResponse response = (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 (Exception ex) {
               throw  new Exception(ex.getMessage());
            }
        }else{
            addMessage("Arquivo para geração de relatório não encontrado.");
        }

    }

Alguém já teve esse problema?

Obrigado a todos.

J

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

Criado 26 de fevereiro de 2010
Ultima resposta 1 de mar. de 2010
Respostas 2
Participantes 1