Guest User

Lavieri

a guest
Mar 16th, 2010
675
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Java 4.34 KB | None | 0 0
  1. package br.com.simtecnologia.util.jasper;
  2.  
  3. import java.io.ByteArrayInputStream;
  4. import java.io.ByteArrayOutputStream;
  5. import java.util.Collection;
  6. import java.util.HashMap;
  7. import java.util.Map;
  8.  
  9. import javax.servlet.ServletContext;
  10.  
  11. import net.sf.jasperreports.engine.JRExporter;
  12. import net.sf.jasperreports.engine.JRExporterParameter;
  13. import net.sf.jasperreports.engine.JasperFillManager;
  14. import net.sf.jasperreports.engine.JasperPrint;
  15. import net.sf.jasperreports.engine.data.JRBeanCollectionDataSource;
  16. import net.sf.jasperreports.engine.export.JRPdfExporter;
  17.  
  18. import org.slf4j.Logger;
  19. import org.slf4j.LoggerFactory;
  20.  
  21. import br.com.caelum.vraptor.interceptor.download.Download;
  22. import br.com.caelum.vraptor.interceptor.download.InputStreamDownload;
  23. import br.com.caelum.vraptor.ioc.Component;
  24.  
  25. @Component
  26. public class JasperMaker {
  27.  
  28.     private static final Logger LOGGER = LoggerFactory.getLogger(JasperMaker.class);
  29.     private final String jasperDir;
  30.     private final String contextDir;
  31.    
  32.     public JasperMaker(ServletContext servletContext) {
  33.        
  34.         contextDir = servletContext.getRealPath("/");
  35.         String temp = servletContext.getInitParameter("vraptor.jasperMaker");
  36.         temp = temp == null ? "WEB-INF/jasper/" : temp.trim();
  37.         if (!temp.endsWith("/"))
  38.             temp = temp.concat("/");
  39.         jasperDir = temp.startsWith("/") ? temp : contextDir.concat(temp);
  40.     }
  41.    
  42.     /**
  43.      * Cria um PDF a partir da coleção de Beans <tt>dataSource</tt> enviada.
  44.      *
  45.      * dois parametros são injetados por este método o "jasperPath" contendo o caminho
  46.      * para a paste dos arquivos jasper e o "contextPath" contendo o caminho para a raiz
  47.      * do aplicativo web.
  48.      * @param jasperFile o nome do arquivo .jasper, o diretório onde o .jasper deve estar
  49.      *          é definido no properties através do parametro "jasper.dir".
  50.      * @param dataSource a coleção de beans a ser usada no reporter.
  51.      * @param fileName o nome do arquivo a ser gerado.
  52.      * @param doDownload se o arquivo é para download, em caso de <tt>false</tt> o arquivo
  53.      *          poderá ser aberto no proprio browser.
  54.      * @return um {@link Download} a ser enviado como retorno.
  55.      */
  56.     public Download makePdf(String jasperFile,Collection<?> dataSource, String fileName, boolean doDownload) {
  57.         return makePdf(jasperFile, dataSource, fileName, doDownload, new HashMap<String, Object>());
  58.     }
  59.    
  60.     /**
  61.      * Cria um PDF a partir da coleção de Beans <tt>dataSource</tt> enviada.
  62.      * @param jasperFile o nome do arquivo .jasper, o diretório onde o .jasper deve estar
  63.      *          é definido no properties através do parametro "jasper.dir".
  64.      * @param dataSource a coleção de beans a ser usada no reporter.
  65.      * @param fileName o nome do arquivo a ser gerado.
  66.      * @param doDownload se o arquivo é para download, em caso de <tt>false</tt> o arquivo
  67.      *          poderá ser aberto no proprio browser.
  68.      * @param parametros os parametros a serem passados ao jasper reporter, dois
  69.      *          parametros são injetados por este método o "jasperPath" contendo o caminho
  70.      *          para a paste dos arquivos jasper e o "contextPath" contendo o caminho
  71.      *          para a raiz do aplicativo web.
  72.      * @return um {@link Download} a ser enviado como retorno.
  73.      */
  74.     public Download makePdf(String jasperFile,Collection<?> dataSource, String fileName, boolean doDownload, Map<String,Object> parametros) {
  75.         jasperFile = jasperDir+jasperFile;
  76.         parametros.put("jasperPath", jasperDir);
  77.         parametros.put("contextPath", contextDir);
  78.         try {
  79.              JasperPrint print = JasperFillManager.fillReport(jasperFile, parametros, new JRBeanCollectionDataSource(dataSource));
  80.            
  81.            
  82.             JRExporter exporter = new JRPdfExporter();
  83.  
  84.             ByteArrayOutputStream exported = new ByteArrayOutputStream();
  85.            
  86.             exporter.setParameter(JRExporterParameter.OUTPUT_STREAM, exported);
  87.             exporter.setParameter(JRExporterParameter.JASPER_PRINT, print);
  88.            
  89.             exporter.exportReport();
  90.            
  91.             byte[] content = exported.toByteArray();
  92.            
  93.             return new InputStreamDownload(
  94.                     new ByteArrayInputStream(content),
  95.                     "application/pdf",
  96.                     fileName,
  97.                     doDownload,
  98.                     content.length);
  99.            
  100.         } catch (Exception e) {
  101.             LOGGER.error("PDF Exporter error",e);
  102.             throw new RuntimeException(e);
  103.         }
  104.        
  105.     }
  106. }
Advertisement
Add Comment
Please, Sign In to add comment