使用BIRT生成报告的Java代码

时间:2013-03-22 12:48:47

标签: java report birt

我有一些XML形式的数据,它包含很少的记录,还创建了一个RPT文件。

现在,我如何通过传递XML和RPT作为输入参数来调用birt来生成报告。

我对BIRT完全不熟悉。任何代码示例都将不胜感激。

2 个答案:

答案 0 :(得分:8)

答案 1 :(得分:6)

试试这个:BirtEngine.java:

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 );
            //IPlatformContext context = new PlatformFileContext();
            config.setPlatformContext( context );
            //Create the report engine
            //birtEngine = new ReportEngine( config );
            //ReportEngine engine = new ReportEngine( null );
            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.destroy();
        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:

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. <br>
     */
    public void destroy() {
        super.destroy(); 
        BirtEngine.destroyBirtEngine();
    }
    /**
     * The doGet method of the servlet. <br>
     *
     */
    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.setContentType( "application/msword" ); 
        //resp.setHeader ("Content-Disposition","inline; filename=test.pdf");   
        resp.setHeader("Content-disposition","attachment; filename=\"" +"test.doc" +"\"");
        String reportName = req.getParameter("ReportName");
        ServletContext sc = req.getSession().getServletContext();
        this.birtReportEngine = BirtEngine.getBirtEngine(sc);
        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.getAppContext().put(EngineConstants.APPCONTEXT_CLASSLOADER_KEY, WebReport.class.getClassLoader()); 
            task.getAppContext().put("BIRT_VIEWER_HTTPSERVLET_REQUEST", req );          
            //set output options
            //HTMLRenderOption options = new HTMLRenderOption();
            //options.setOutputFormat(HTMLRenderOption.OUTPUT_FORMAT_HTML);
            //options.setOutputStream(resp.getOutputStream());
            //options.setImageHandler(new HTMLServerImageHandler());
            //options.setBaseImageURL(req.getContextPath()+"/images");
            //options.setImageDirectory(sc.getRealPath("/images"));
            /*PDFRenderOption options = new PDFRenderOption();
            options.setOutputFormat(HTMLRenderOption.OUTPUT_FORMAT_PDF);    
            options.setOutputStream(resp.getOutputStream());
            */
            RenderOption options = new RenderOption();  
            options.setOutputFormat("doc");
            options.setOutputStream(resp.getOutputStream());
            //options.setEnableAgentStyleEngine(true);
            //options.setEnableInlineStyle(true);
            task.setRenderOption(options);
            //run report
            task.run();
            task.close();
        }catch (Exception e){
        e.printStackTrace();
            throw new ServletException( e );
        }
    }
    /**
     * The doPost method of the servlet. <br>
     *
     */
    public void doPost(HttpServletRequest request, HttpServletResponse response)
            throws ServletException, IOException {
        response.setContentType("text/html");
        PrintWriter out = response.getWriter();
        out.println("<!DOCTYPE HTML PUBLIC \"-//W3C//DTD HTML 4.01 Transitional//EN\">");
        out.println("<HTML>");
        out.println("  <HEAD><TITLE>A Servlet</TITLE></HEAD>");
        out.println("  <BODY>");
        out.println(" Post Not Supported");
        out.println("  </BODY>");
        out.println("</HTML>");
        out.flush();
        out.close();
    }
    /**
     * Initialization of the servlet. <br>
     *
     * @throws ServletException if an error occure
     */
    public void init(ServletConfig sc) throws ServletException {
        BirtEngine.initBirtConfig();
        this.birtReportEngine = BirtEngine.getBirtEngine(sc.getServletContext());
    }
}

birtconfigproperty:

ogDirectory=c:/temp
logLevel=FINEST