sexta-feira, 7 de janeiro de 2011

Exibição de PDF em uma JSP

Neste exemplo, uso um iframe para exibir um relatório em PDF em uma área de uma página JSP. Utilizei Struts como framework Web.

Aqui, não abro um arquivo físico, e sim utilizo o stream de dados para escrever o conteúdo do pdf.

Segue o código do método da DispatchAction do Struts:

public ActionForward geraRelatorio(ActionMapping mapping, ActionForm form, HttpServletRequest request, HttpServletResponse response) {
try {
Map<String, String> parametros = new HashMap<String, String>();
//recuperacao de imagem para o relatorio
//passagem de parametro
parametros.put("caminhoImagem", request.getSession().getServletContext().getRealPath("/images/relatorio/logo.jpg"));

//recuperacao do arquivo compilado do relatorio
InputStream relatorio = getClass().getResourceAsStream("/br/com/relatorio.jasper");
byte[] pdf = ReportUtil.pdfPrint(relatorio, parametros);
response.setContentType("application/pdf");
response.getOutputStream().write(pdf);
} catch (Exception e) {}

//nao pode fazer forward, uma vez que escreveu no response
return null;
}


E segue o exemplo da página contendo simplesmente um iframe:


3 comentários:

  1. poderia me mandar o projeto de exemplo? no meu caso tenho uma tela que chama um método do serviço e gera um relatório dinâmico. gostaria de mostrar o mesmo na tela.

    ResponderExcluir
    Respostas
    1. Boa tarde Odilan, infelizmente, não tenho mais um projeto. Agora, se sua tela for um jsp que chame uma action, esses dois trechos já são suficientes para resolver esse tipo de problema. Você só teria que se preocupar com o mapeamento.
      Abs

      Excluir