2010-03-08 26 views

Respuesta

1

Aquí hay un informe ficticio creado dentro de un archivo Servlet.

Es lo mismo que en la clase normal de Java.

Solo asegúrese de tener las importaciones para sus clases de informes de jaspe en la parte superior del archivo.

El ejemplo siguiente crea un informe a partir de un origen de datos 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

Puede preparar el archivo Jasper y transmitirlo al cliente.

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

Una forma completa a hacerlo desde el servlet sería:

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

El rendimiento puede mejorarse mediante la cumplimentación del archivo '.jasper' en lugar de compilar el informe en cada solicitud. –

Cuestiones relacionadas