Boa tarde a todos!
Gostaria de saber se tem como exibir dentro de um um arquivo .pdf (físico localizado fora do pacote .war) ou o OutputStream do .pdf gerado dentro do iframe.
Exibir o .pdf no browser a partir do OutputStream eu já consegui com o método JasperExportManager.exportReportToPdfStream(JasperPrint print, OutputStream os); só que eu queria exibir a página XHTML e dentro de um frame o mesmo resultado obtido no método anterior.
Eu estou fazendo desta forma:
Controller:
@Named
@SessionScoped
public classRelatorioController implements Serializable {
private File pdf;
public String relatorioPdfFile() {
try {
// Cria um arquivo temporário
pdf = File.createTempFile( "tmp_lista.", ".pdf" );
// Obtem o OutputStream
fos = new FileOutputStream( pdf );
// Preenche o arquivo .jasper
JasperPrint relatorioPreenchido = this.relatorioJasperService.preencheRelatorio( this.lista, Boolean.TRUE, NomeArquivoJasperEnum.OUVIDORIA_LISTA.getInputStream(), new HashMap<String, Object>() );
// Exporta para o arquivo tmp_lista.pdf
JasperExportManager.exportReportToPdfStream( relatorioPreenchido, fos );
} catch (IOException e) {
log.error( "Erro criando TMP File", e );
} catch (JRException e) {
log.error( "Erro exportando", e );
}
}
// getters omitidos
}
A idéia é pegar a referencia do arquivo tmp_lista.pdf a partir do seu path e exibí-lo no iframe setando o caminho do arquivo no atributo src do frame como no trecho abaixo.
...
<f:subview id="relatorio" rendered="#{ not empty relatorioController.pdf }">
<iframe id="iframe" src="#{ relatorioController.pdf }"
width="99%"
height="600px"
style="min-height: 400px" >
</iframe>
</f:subview>
...
Porém, acho que pelo fato de o .pdf gerado estar fora do contexto da aplicação, a pagina é exibida mas dá erro 404 dentro do frame como descrito abaido:
type Status report
message /tmp/tmp_lista.1326432374121740787.pdf
description The requested resource (/tmp/tmp_lista.1326432374121740787.pdf) is not available.
Tem como fazer isto?
O ideal seria exibir dentro do frame a partir do OutputStream para não gerar arquivo fisico no servidor.
Quais seriam as sugestões de relatórios.
Desde já obrigado.