[RESOLVIDO] PDF em branco

1 resposta
D

Estou gerando um relatório utilizando jasperReports e iReport.
Os dados são carregados a partir de um JRDataSource e aparentemente está tudo ok.
Quando clico no ícone para gerar meu PDF ele é criado perfeitamente, porém se tento fazer isso uma segunda fez é gerado um PDF em branco.
Alguém tem ideia do que pode ser?

.xhtml
<h:commandLink style="margin-left:47%">
	<p:fileDownload value="#{contratoEmpenhoBean.arquivoRetorno}"></p:fileDownload>
	<p:graphicImage library="img" name="PDF.png" title="Gerar PDF"/>
</h:commandLink>
bean
public StreamedContent getArquivoRetorno() {
	String nomeRelatorioSaida = contratoEmpenho.getContrato();
	InputStream caminhoArquivoJasper = getClass().getResourceAsStream( "/contratoEmpenho.jasper" );
	Map parametros = new HashMap();
	ReportUtils reportUtils = new ReportUtils();
	try {
	    this.arquivoRetorno = reportUtils.geraRelatorio(nomeRelatorioSaida, caminhoArquivoJasper, parametros, ContratoEmpenhoJRDataSourceFactory.createDataSource(this.contratoEmpenho));
	} catch (Exception e) {
	    e.printStackTrace();
	    return null;
	}
        return arquivoRetorno;
    }
ReportUtil
public StreamedContent geraRelatorio(String nomeRelatorioSaida, InputStream caminhoArquivoJasper, Map parametros, JRDataSource dataSource ){
	StreamedContent arquivoRetorno = null;
	try {
	    JasperPrint impressoraJasper = JasperFillManager.fillReport(caminhoArquivoJasper, parametros, dataSource );
	    
	    String caminhoArquivoRelatorio = String.valueOf(getClass().getResourceAsStream("/"+nomeRelatorioSaida+".pdf"));
	    File arquivoGerado = new File(caminhoArquivoRelatorio);
	    JRExporter tipoArquivoExportado = new JRPdfExporter();
	    
	    tipoArquivoExportado.setParameter(JRExporterParameter.JASPER_PRINT, impressoraJasper);
	    tipoArquivoExportado.setParameter(JRExporterParameter.OUTPUT_FILE, arquivoGerado);
	    tipoArquivoExportado.exportReport();
	    
	    arquivoGerado.deleteOnExit();
	    
	    InputStream conteudoRelatorio = new FileInputStream(arquivoGerado);
	    arquivoRetorno = new DefaultStreamedContent(conteudoRelatorio, "application/"+".pdf", nomeRelatorioSaida+".pdf");
	} catch (JRException e) {
	    e.printStackTrace();
	} catch (FileNotFoundException e) {
	    e.printStackTrace();
	}
	return arquivoRetorno;
    }

1 Resposta

D

Fiz uma alteração na classe que gerava meu JRDataSource e o problema foi resolvido.

Antes:
package reports;

import java.util.Vector;

import br.gov.sp.model.ContratoEmpenho;
import net.sf.jasperreports.engine.JRDataSource;

public class ContratoEmpenhoJRDataSourceFactory {
    private static JRDataSource data;
    
    public static JRDataSource createDataSource(ContratoEmpenho contratoEmpenho ) {
	if (data == null) {
	    Vector<ContratoEmpenho> obj = new Vector<ContratoEmpenho>();
	    obj.add(contratoEmpenho);
	    data = new ContratoEmpenhoJRDataSource(obj);
   	}
   	return data;
    }
}
Agora:
package reports;

import java.util.Vector;

import br.gov.sp.model.ContratoEmpenho;
import net.sf.jasperreports.engine.JRDataSource;

public class ContratoEmpenhoJRDataSourceFactory {
    private static JRDataSource data;
    
    public static JRDataSource createDataSource(ContratoEmpenho contratoEmpenho) {
	Vector<ContratoEmpenho> obj = new Vector<ContratoEmpenho>();
	obj.add(contratoEmpenho);
	data = new ContratoEmpenhoJRDataSource(obj);
   	return data;
    }
}
Criado 12 de maio de 2014
Ultima resposta 14 de mai. de 2014
Respostas 1
Participantes 1