Galera alguem sabe se tem como, ou se tem algum link falando sobre o assunto? Eu estou usando o JasperReport para gerar PDF e está funcinando bem, mas não quero gerar o arquivo em disco. Quero transformar o JasperPrint em PDF em memória em envia-lo direto ao browser do cliente. Tem um método que teoricamente faria isso, mas quando uso ele em conjunto com o struts da um erro. Pois eu tenho que pegar o OutputStream do response, e dai no struts ele fala que o OutputStream ja foi chamado.
O método que tentei usar foi esse aqui:
JasperExportManager.exportReportToPdfStream( print, out )
Assim voce coloca algo em bytes no response… um PDF por exemplo!
// Gera o relatorio pdf e pega ele em bytes, tem varias maneiras para fazelo...
byte[] pdfBytes = Jasper...
if (pdfBytes != null) {
// OutputStream do response
OutputStream os = response.getOutputStream();
os.write(pdfBytes);
os.flush();
os.close();
// informa o tipo de arquivo sendo enviado
response.setContentType("application/pdf");
}
[]s
Lucas Balensiefer
Eu ja fiz isso. O problema é que depois de fazer isso no action do struts ele da pau la no JSP dizendo que o OutputStream ja foi usado. Não queria fazer um Servlet somente para enviar o PDF ao browser mas acho que não tem como criar um action no struts para fazer isso :sad: . Mesmo assim valew a ajuda. 
Consegui. Fiz isso aqui ó:
public ActionForward execute( ActionMapping actionMapping, ActionForm actionForm,
HttpServletRequest request, HttpServletResponse response )
throws Exception
{
ActionErrors errors = new ActionErrors();
RelatorioForm form = (RelatorioForm) actionForm;
try
{
BusinessObject bo = (BusinessObject) BusinessObject.getInstance();
List list = bo.listaTodos();
//Fonte de dados que implementei. Recebe um list de VOs e o tipo de
//VO no construtor.
JRDataSourceVOs jrDs = new JRDataSourceVOs(
list, TesteVO.class.newInstance() );
InputStream jasperFile = Thread.currentThread().getContextClassLoader().getResourceAsStream(
"relatorio.jasper" ) ;
//diz ao browser que é um arquivo pdf e tem nome.
response.setContentType("application/pdf");
response.setHeader("Content-disposition","filename=relatorio.pdf");
//pega a saida
ServletOutputStream out = response.getOutputStream();
//Cria o JasperPrint
JasperPrint print = JasperFillManager.fillReport( fileRel, null, jrDs );
//Exporta o PDF para a saida
JasperExportManager.exportReportToPdfStream( print, out);
//Chama um mapiamento que não existe.
return ( actionMapping.findForward( "none" ) );
}
catch ( Exception e )
{
errors.add( ActionErrors.GLOBAL_ERROR, new ActionError( "Teste" ) );
getServlet().log( "Erro = " + e, e );
}
saveErrors( request, errors );
return ( actionMapping.findForward( "failure" ) );
}
Não sei se é a melhor maneira de implementar isso mas funciona com o struts.