2010-03-08 6 views

Antwort

1

Hier ist ein Dummy-Bericht, der in einer Servlet-Datei erstellt wurde.

Es ist das gleiche wie in der normalen Java-Klasse.

Stellen Sie sicher, dass Sie die Importe für Ihre Jaspis-Berichtklassen am Anfang der Datei haben.

Im folgenden Beispiel wird ein Bericht aus einer XML-Datenquelle erstellt.

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

Sie können die Jasper-Datei vorbereiten und an den Client streamen.

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

Ein kompletter Weg, dies aus dem Servlet zu tun wäre:

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

Leistung durch Füllen die '.jasper' Datei verbessert werden kann stattdessen bei jeder Anfrage den Bericht zusammenzustellen. –

Verwandte Themen