将BIRT整合到自己的Java项目中(二)

系统 1564 0
关于编写viewer,关键在于使用ReportEngine API,这个在 birt官方文档 上有很详细的描述。 这里将几个主要环节总结一下:
  1. 启动ReportEngine
    这里需要注意启动ReportEngine的开销问题和图片链的协议的问题。使用IReportEngineFactory比每次new一个出来性能方面要好很多。使用HTMLEmitterConfig可以使得生成的HTML报表中的图片的src指向一个web资源而非file资源。
    public IReportEngine getEngine() ... {
        
    try ... {
          
    if (platformContext == null ) ... {
             platformContext
    = new PlatformServletContext(servletContext);
           }

           engineConfig
    = new EngineConfig();
           engineConfig.setEngineHome(
               servletContext.getRealPath(
    " /WEB-INF/platform/ " ));
          
    // 要求ENGINE HOME 位于WEB-INF/Platform
           engineConfig.setPlatformContext(platformContext);
          
    // This call sets the Log directory name and level
           engineConfig.setLogConfig(getLogDir(), Level.FINE);
          
          
    // 设置Emitter,渲染HTML的时候,image的地址是HTTP协议而不是File协议
           HTMLEmitterConfig emitterConfig = new HTMLEmitterConfig( );
           emitterConfig.setActionHandler(
    new HTMLActionHandler());
           HTMLServerImageHandler imageHandler
    = new HTMLServerImageHandler();
           emitterConfig.setImageHandler(imageHandler);
           engineConfig.getEmitterConfigs().put(
    " html " , emitterConfig);
          
          
    // 设置日志level
           engineConfig.setLogConfig(getLogDir(), Level.WARNING);
          
    // 启动Platform,创建ReportEngine
           Platform.startup(engineConfig);
           IReportEngineFactory factory
    = (IReportEngineFactory) Platform
               .createFactoryObject(IReportEngineFactory.EXTENSION_REPORT_ENGINE_FACTORY);
           engine
    = factory.createReportEngine(engineConfig);
           engine.changeLogLevel(Level.WARNING);
          
           log.debug(
    " A new engine startup. " );
         }
    catch (BirtException e) ... {
           e.printStackTrace();
         }


        
    return engine;
       }
  2. 运行报表
    我理解为编译报表文件。BIRT在渲染报表之前,要将报表编译为.rptdocument,再根据这个文件将报表渲染为HTML格式或PDF格式。编译报表使用IRunTask:
    protected void run(String rptDesign) ... {
        
    assert (context != null );

         IReportEngine engine
    = context.getEngine();
        
    // Open a report design
         IReportRunnable design = null ;
        
    try ... {
           design
    = engine.openReportDesign(context
               .getFullRptDesignFilename(rptDesign));
          
    // Create task to run the report - use the task to
          
    // execute the report and save to disk.
           IRunTask task = engine.createRunTask(design);
           String doc
    = context.getFullRptDocumentFilename(rptDesign);
          
    // run the report and destroy the engine
           task.run(doc);
          
           log.debug(
    " save rpt design to " + doc);
           task.close();
         }
    catch (EngineException e) ... {
           e.printStackTrace();
         }

       }

 

将BIRT整合到自己的Java项目中(二)


更多文章、技术交流、商务合作、联系博主

微信扫码或搜索:z360901061

微信扫一扫加我为好友

QQ号联系: 360901061

您的支持是博主写作最大的动力,如果您喜欢我的文章,感觉我的文章对您有帮助,请用微信扫描下面二维码支持博主2元、5元、10元、20元等您想捐的金额吧,狠狠点击下面给点支持吧,站长非常感激您!手机微信长按不能支付解决办法:请将微信支付二维码保存到相册,切换到微信,然后点击微信右上角扫一扫功能,选择支付二维码完成支付。

【本文对您有帮助就好】

您的支持是博主写作最大的动力,如果您喜欢我的文章,感觉我的文章对您有帮助,请用微信扫描上面二维码支持博主2元、5元、10元、自定义金额等您想捐的金额吧,站长会非常 感谢您的哦!!!

发表我的评论
最新评论 总共0条评论