Labels

Showing posts with label PDF. Show all posts
Showing posts with label PDF. Show all posts

Friday, September 21, 2012

JSF + JasperReports

Alguns dias atrás eu tive que fazer um método no Bean para gerar um relatório (JasperReports) e jogar o mesmo na tela como Download.


Classes:
public class GeraRelatorioBean {

 private RelatorioManager manager = new RelatorioManager();

  public static String PDF = "pdf";

  public String gerarRelatorioPdf(){
  Map map = new HashMap();
  map.put("p1","Valor 1");
  map.put("p2","Valor 2");


  geraRelatorio("nome_reports.jasper", map, PDF);
  
  return null;
 }
}



 public String geraRelatorio(String jasperFile, Map map, String formato){
  
  HttpServletRequest req =   (HttpServletRequest)  FacesContext.getCurrentInstance().getExternalContext().getRequest();
  String rel = req.getRealPath("/rel/");
  
   
 try {
  
  HttpServletResponse res =   (HttpServletResponse)  FacesContext.getCurrentInstance().getExternalContext   ().getResponse();
  res.setHeader("Content-disposition", "attachment;filename=relatorio."+formato);
  
  OutputStream out = res.getOutputStream();
  manager.exportReport(map, rel+jasperFile, formato, out);
  
  out.close();
 }catch(Exception e){
  e.printStackTrace();
 }  
  FacesContext.getCurrentInstance().responseComplete(); 
  return null;
 }


}


public class RelatorioManager {
 
 public static String PDF = "pdf";
 public static String JPG = "jpg";
 
 public void exportReport(Map parameters, String jasperFile, String formato, OutputStream target){
  if(JPG.equalsIgnoreCase(formato)){
   exportReportImage(parameters, jasperFile, target);
  }else if(PDF.equalsIgnoreCase(formato)){
   exportReportPdf(parameters, jasperFile, target);
  }
 }
 
 
  private void exportReportImage(
    Map parameters, String jasperFile, OutputStream target) {
   try{
  JasperPrint jasperPrint =  JasperFillManager.fillReport(
  (JasperReport) JRLoader.loadObject(jasperFile), parameters, new JREmptyDataSource());
  JRGraphics2DExporter exporter = new JRGraphics2DExporter();

  BufferedImage bufferedImage = new BufferedImage(jasperPrint.getPageWidth() * 4, jasperPrint.getPageHeight() * 4, BufferedImage.TYPE_INT_RGB);

  Graphics2D g = (Graphics2D) bufferedImage.getGraphics();

  exporter.setParameter(JRGraphics2DExporterParameter.GRAPHICS_2D, g);
  exporter.setParameter(JRGraphics2DExporterParameter.ZOOM_RATIO, Float.valueOf(4));
  exporter.setParameter(JRExporterParameter.JASPER_PRINT, jasperPrint);
  exporter.exportReport();
  g.dispose();
   
   ImageIO.write(bufferedImage, "JPG", target);
   }catch(Exception e) {
    e.printStackTrace();
   }
  } 
  
  private void exportReportPdf(
    Map parameters, String jasperFile, OutputStream target) {
   try{
  JasperPrint jasperPrint =  JasperFillManager.fillReport(
  (JasperReport) JRLoader.loadObject(jasperFile), parameters, new JREmptyDataSource());
  
 JasperExportManager.exportReportToPdfStream(jasperPrint, target);
  
   }catch(Exception e) {
    e.printStackTrace();
   }
  } 
}


Chamando o método no Bean