December 02, 2006

Jasper Report Printing from Servlet

 

In this post I will show you how to write a simple Servlet to view PDF reports on web browser.

The source code is quite simple and self exlained.
Take a look !










package com.db.misportal.servlet;



import java.io.IOException;



import javax.servlet.ServletConfig;

import javax.servlet.ServletContext;

import javax.servlet.ServletException;

import javax.servlet.ServletOutputStream;

import javax.servlet.http.HttpServlet;

import javax.servlet.http.HttpServletRequest;

import javax.servlet.http.HttpServletResponse;

import org.apache.log4j.Logger;

import com.db.report.jasper.custom.common.AbstractReport;

import com.db.report.jasper.custom.consumptionreport.ConsumptionReport;

import com.db.report.jasper.custom.trackingreport.TrackingReport;


/**

* @web.servlet name = "JasperReportsBrowserServlet" description = "Display PDF

* reports on the browser.The default file name is

* <productcode>.pdf"

*

* @web.servlet-mapping url-pattern = "/JasperReportsBrowserServlet/*"

*

* @author anhquan.nguyen@gmail.com

*

*/


public class JasperReportsBrowserServlet extends HttpServlet {



private static final long serialVersionUID = 1L;

static Logger _log = Logger.getLogger(JasperReportsBrowserServlet.class);

String strProductCode;

String strReportDate;

String strReportHome;

String strProductCategory;

String strReportType;

String strReportMonth;

String strReportYear;

String strReportMode;

public void init(ServletConfig config) throws ServletException {

super.init(config);

_log.info("init JasperReportsBrowserServlet...");

// String initial = config.getInitParameter("initial");

ServletContext context = this.getServletConfig().getServletContext();

strReportHome = context.getRealPath("/reports");

_log.debug("Report Home : " + strReportHome);

_log.info("init completed!");

}



protected void doGet(HttpServletRequest request,

HttpServletResponse response) throws ServletException, IOException {

process(request, response);

}

protected void doPost(HttpServletRequest request,

HttpServletResponse response) throws ServletException, IOException {

process(request, response);

}



protected void process(HttpServletRequest request,

HttpServletResponse response) throws ServletException, IOException {

ServletOutputStream servletOutputStream = response.getOutputStream();

/* Get parameters from form */

strProductCode = request.getParameter("productCode");

strProductCategory = request.getParameter("productCategory");

strReportType = request.getParameter("reportType");

strReportMonth = request.getParameter("reportMonth");

strReportYear = request.getParameter("reportYear");

strReportMode = request.getParameter("reportMode");

strReportDate = strReportMonth + "/" + strReportYear;



AbstractReport report = null;

String strReportHome = "N:\\thesis\\workspace\\misportal\\WebRoot\\reports";



if ("consumption_report".equals(strReportType)) {

String strPDFFileName = strProductCode + ".pdf";

String strContentHeader = strProductCode;

report = new ConsumptionReport();

report.setParams(strProductCode, strReportDate);

if ("single".equals(strReportMode)) {

report.setPath("consumptionreportsingle", strReportHome

+ "\\consumption\\in", strReportHome

+ "\\consumption\\out");

} else // all

{

strPDFFileName = "Consumption" + ".pdf";

strContentHeader = "Consumption";

report.setPath("consumptionreportall", strReportHome

+ "\\consumption\\in", strReportHome

+ "\\consumption\\out");

}

exportToPDFStream(response, servletOutputStream, report,

strPDFFileName, strContentHeader);

} else if ("tracking_report".equals(strReportType)) {

if ("single".equals(strReportMode)) {

report = new TrackingReport();

report.setParams(strProductCode, strReportDate);



report.setPath("tracking", strReportHome

+ "\\trackingreport\\in", strReportHome

+ "\\trackingreport\\out");



report.setSubReports("tracking_part", 1, 10);

String strPDFFileName = strProductCode + ".pdf";

String strContentHeader = strProductCode;



exportToPDFStream(response, servletOutputStream, report,

strPDFFileName, strContentHeader);

} else {

report = new TrackingReport();

report.setParams(strProductCode, strReportDate);



report.setPath("tracking", strReportHome

+ "\\trackingreport\\in", strReportHome

+ "\\trackingreport\\out");



report.setSubReports("tracking_part", 1, 10);

String strPDFFileName = strProductCode + ".pdf";

String strContentHeader = strProductCode;

exportToPDFStream(response, servletOutputStream, report,

strPDFFileName, strContentHeader);

}

}



servletOutputStream.close();

}



/**

* Export to PDF Stream

*

* @param response

* @param servletOutputStream

* @param report

* @param strPDFFileName

* Default file name

* @param strContentHeader

* Content header description

* @throws IOException

*/

private void exportToPDFStream(HttpServletResponse response,

ServletOutputStream servletOutputStream, AbstractReport report,

String strPDFFileName, String strContentHeader) throws IOException {



byte[] bytes = report.getPDFBytes();

_log.debug("Bytes length : " + bytes.length);

response.setContentType("application/pdf");

response.setHeader("Content-Description", strContentHeader);

response.setHeader("Content-transfer-encoding", "binary");

response.setHeader("Content-Disposition", "attachment; filename="

+ strPDFFileName);

response.setContentLength(bytes.length);

servletOutputStream.write(bytes, 0, bytes.length);

servletOutputStream.flush();

_log.debug("close outputstream");

}

}




That's all !

1 responses:

animeworld said...

where i can find the jars that contain the classes below:

com.db.report.jasper.custom.common.AbstractReport;
com.db.report.jasper.custom.consumptionreport.ConsumptionReport;

thanks