Pages

Showing posts with label Birt Report. Show all posts
Showing posts with label Birt Report. Show all posts

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();

}

}
Google
 

Java-Struts