2010-03-08 6 views

Répondre

1

Voici un rapport factice créé dans un fichier Servlet.

C'est la même chose que dans une classe Java normale. Assurez-vous que les importations de vos classes de rapports jasper sont en haut du fichier.

L'exemple ci-dessous génère un rapport à partir d'une source de données XML.

public class JasperServlet extends HttpServlet { 
    public void doGet(HttpServletRequest req, HttpServletResponse res) 
      throws ServletException, IOException { 
     try { 
      String reportFile = "myJasperReport.jrxml"; 
      File outputFile = new File("Report.pdf"); 
      HashMap hm = new HashMap(); 

      DocumentBuilderFactory documentBuilderFactory = DocumentBuilderFactory 
        .newInstance(); 
      DocumentBuilder documentBuilder = documentBuilderFactory 
        .newDocumentBuilder(); 
      Document document = documentBuilder.parse(new File("myXml.xml")); 

      // Compile the report 
      JasperReport report = JasperCompileManager 
        .compileReport(reportFile); 
      JRXmlDataSource xml = new JRXmlDataSource(document, "/xml/root"); 
      // Fill the report 
      JasperPrint print = JasperFillManager.fillReport(report, hm, xml); 
      // Create an Exporter 
      JRExporter exporter = new JRPdfExporter(); 
      exporter.setParameter(JRExporterParameter.OUTPUT_FILE, outputFile); 
      exporter.setParameter(JRExporterParameter.JASPER_PRINT, print); 
      // Export the file 
      exporter.exportReport(); 
     } catch (Exception e) { 
      e.printStackTrace(); 
     } 
    } 
} 
5

Vous pouvez préparer le fichier Jasper et le diffuser vers le client.

bytes[] byteStream = JasperRunManager.runReportToPdf("myJasperReport.jasper",paramMap,databaseConn); 

OutputStream outStream = servletResponse.getOutputStream(); 
response.setHeader("Content-Disposition","inline, filename=myReport.pdf"); 
response.setContentType("application/pdf"); 
response.setContentLength(byteStream.length); 
outStream.write(bytes,0,bytes.length); 
3

Une façon complète le faire à partir du servlet serait:

public void myServletMethod(HttpServletRequest request, HttpServletResponse response) throws IOException{ 
      JasperReport jasperReport = null; 
      JasperDesign jasperDesign = null; 
      Map parameters = new HashMap(); 
      String path = getServletContext().getRealPath("/WEB-INF/"); 
      jasperDesign = JRXmlLoader.load(path+"/relative/path/to/MyReport.jrxml"); 
      jasperReport = JasperCompileManager.compileReport(jasperDesign); 
      byte[] byteStream = JasperRunManager.runReportToPdf(jasperReport, parameters, **new DataSourceOfYourPreference**);        
      OutputStream outStream = response.getOutputStream(); 
      response.setHeader("Content-Disposition","inline, filename=myReport.pdf"); 
      response.setContentType("application/pdf"); 
      response.setContentLength(byteStream.length); 
      outStream.write(byteStream,0,byteStream.length);  

    } 
+0

performances peuvent être améliorées en remplissant le fichier '.jasper' au lieu de compiler le rapport à chaque demande. –

Questions connexes