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:
?
ResponderExcluirpoderia 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.
ResponderExcluirBoa 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.
ExcluirAbs