Pages

Tuesday, May 5, 2009

Integrate Birt Report Engine To Your Application

Setup

1. Download Birt Runtime

2. Copy all the jars in the birt-runtime/ReportEngine/lib directory from the Report Engine download into your ApplicationRoot/WEB-INF/lib directory.

3. Create a directory named platform in your WEB-INF folder.

4. Copy the birt-runtime/Report Engine/plugins and birt-runtime/ReportEngine/configuration directories to the platform directory you just created.

5. Copy iText.jar to the platform/plugins/com.lowagie.itext/lib directory. If the directory does not exist, create it.

6. Copy servlet.jar into WEB-INF/lib

* BirtConfig.properties - Configuration properties for the Engine.Place it to /WEB-INF/classes folder
* BirtEngine.java - Class used to initialize the Report Engine.
* WebReport.java - The servlet that handles report generation on a GET command.
* Copy Database driver class to


BirtConfig.properties

logDirectory=c:/temp

logLevel=FINEST

BirtEngine.java

import java.io.InputStream;
import java.io.IOException;
import java.util.Properties;
import java.util.logging.Level;
import org.eclipse.birt.report.engine.api.EngineConfig;
import org.eclipse.birt.report.engine.api.IReportEngine;
import javax.servlet.*;
import org.eclipse.birt.core.framework.PlatformServletContext;
import org.eclipse.birt.core.framework.IPlatformContext;
import org.eclipse.birt.core.framework.Platform;
import org.eclipse.birt.core.exception.BirtException;
import org.eclipse.birt.report.engine.api.IReportEngineFactory;

public class BirtEngine {

private static IReportEngine birtEngine = null;

private static Properties configProps = new Properties();

private final static String configFile = "BirtConfig.properties";

public static synchronized void initBirtConfig() {

loadEngineProps();

}


public static synchronized IReportEngine getBirtEngine(ServletContext sc) {

if (birtEngine == null)
{

EngineConfig config = new EngineConfig();

if( configProps != null){

String logLevel = configProps.getProperty("logLevel");

Level level = Level.OFF;

if ("SEVERE".equalsIgnoreCase(logLevel))

{

level = Level.SEVERE;

} else if ("WARNING".equalsIgnoreCase(logLevel))

{

level = Level.WARNING;

} else if ("INFO".equalsIgnoreCase(logLevel))

{

level = Level.INFO;

} else if ("CONFIG".equalsIgnoreCase(logLevel))

{

level = Level.CONFIG;

} else if ("FINE".equalsIgnoreCase(logLevel))

{

level = Level.FINE;

} else if ("FINER".equalsIgnoreCase(logLevel))

{

level = Level.FINER;

} else if ("FINEST".equalsIgnoreCase(logLevel))

{

level = Level.FINEST;

} else if ("OFF".equalsIgnoreCase(logLevel))

{

level = Level.OFF;

}

config.setLogConfig(configProps.getProperty("logDirectory"), level);

}

config.setEngineHome("");

IPlatformContext context = new PlatformServletContext( sc );

config.setPlatformContext( context );

try

{

Platform.startup( config );

}

catch ( BirtException e )

{

e.printStackTrace( );

}


IReportEngineFactory factory = (IReportEngineFactory) Platform

.createFactoryObject( IReportEngineFactory.EXTENSION_REPORT_ENGINE_FACTORY );

birtEngine = factory.createReportEngine( config );

}

return birtEngine;

}

public static synchronized void destroyBirtEngine() {

if (birtEngine == null) {

return;

}

birtEngine.shutdown();

Platform.shutdown();

birtEngine = null;

}


public Object clone() throws CloneNotSupportedException {

throw new CloneNotSupportedException();

}


private static void loadEngineProps() {

try {

//Config File must be in classpath

ClassLoader cl = Thread.currentThread ().getContextClassLoader();

InputStream in = null;

in = cl.getResourceAsStream (configFile);

configProps.load(in);

in.close();

} catch (IOException e) {

e.printStackTrace();

}

}

}

WebReport.java

import java.io.IOException;
import java.io.PrintWriter;
import java.util.HashMap;
import java.util.logging.Level;
import java.util.logging.Logger;
import javax.servlet.ServletContext;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import org.eclipse.birt.report.engine.api.EngineConstants;
import org.eclipse.birt.report.engine.api.HTMLRenderContext;
import org.eclipse.birt.report.engine.api.HTMLRenderOption;
import org.eclipse.birt.report.engine.api.IReportRunnable;
import org.eclipse.birt.report.engine.api.IRunAndRenderTask;
import org.eclipse.birt.report.engine.api.IReportEngine;


public class WebReport extends HttpServlet {

private static final long serialVersionUID = 1L;

/**

* Constructor of the object.

*/

private IReportEngine birtReportEngine = null;

protected static Logger logger = Logger.getLogger( "org.eclipse.birt" );

public WebReport() {

super();

}


/**

* Destruction of the servlet.

*/

public void destroy() {

super.destroy();

BirtEngine.destroyBirtEngine();

}



/**

* The doGet method of the servlet.

*

*/

public void doGet(HttpServletRequest req, HttpServletResponse resp)

throws ServletException, IOException {

//get report name and launch the engine

resp.setContentType("text/html");

//resp.setContentType( "application/pdf" );

//resp.setHeader ("Content-Disposition","inline; filename=test.pdf");

String reportName = req.getParameter("ReportName");

ServletContext sc = req.getSession().getServletContext();

this.birtReportEngine = BirtEngine.getBirtEngine(sc);



//setup image directory

HTMLRenderContext renderContext = new HTMLRenderContext();

renderContext.setBaseImageURL(req.getContextPath()+"/images");

renderContext.setImageDirectory(sc.getRealPath("/images"));



logger.log( Level.FINE, "image directory " + sc.getRealPath("/images"));

System.out.println("stdout image directory " + sc.getRealPath("/images"));

HashMap contextMap = new HashMap();

contextMap.put( EngineConstants.APPCONTEXT_HTML_RENDER_CONTEXT, renderContext );

IReportRunnable design;

try

{

//Open report design

design = birtReportEngine.openReportDesign( sc.getRealPath("/Reports")+"/"+reportName );

//create task to run and render report

IRunAndRenderTask task = birtReportEngine.createRunAndRenderTask( design );

task.setAppContext( contextMap );

//set output options

HTMLRenderOption options = new HTMLRenderOption();

options.setOutputFormat(HTMLRenderOption.OUTPUT_FORMAT_HTML);

//options.setOutputFormat(HTMLRenderOption.OUTPUT_FORMAT_PDF);

options.setOutputStream(resp.getOutputStream());

task.setRenderOption(options);

//run report

task.run();

task.close();

}catch (Exception e){
e.printStackTrace();
throw new ServletException( e );
}

}


/**

* The doPost method of the servlet.

*/

public void doPost(HttpServletRequest request, HttpServletResponse response)

throws ServletException, IOException {

response.setContentType("text/html");

PrintWriter out = response.getWriter();
out.println("");
out.println("");
out.println(" ");
out.println(" ");
out.println(" Post does nothing");
out.println(" ");
out.println("");
out.flush();
out.close();

}



/**

* Initialization of the servlet.

*

* @throws ServletException if an error occure

*/

public void init() throws ServletException {

BirtEngine.initBirtConfig();

}

}

No comments:

Google
 

Java-Struts