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 !
December 02, 2006
Jasper Report Printing from Servlet
Tags:
JasperReports
Subscribe to:
Post Comments (Atom)
1 responses:
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
Post a Comment