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

  1. 渲染报表
    BIRT支持HTML格式和PDF格式,这两种报表生成的过程相同,只是设置不同的RenderContext和RenderOptions。我们把相同的部分提取为父类的公共方法,不同的部分留给子类实现:

    IReportDocument iReportDocument = engine.openReportDocument(docFilename);
          
    // Create Render Task
           IRenderTask task = engine.createRenderTask(iReportDocument);
           task.addScriptableJavaObject(
    " jsBirtObject " ,
               getScriptableObject(scriptObj));
          
    if (params != null && ! params.isEmpty()) ... {
             task.setParameterValues(params);
           }

           setRenderContext(task);
    // 设置Render Context,具体由子类实现
           setRenderOptions(task, out); // 设置Render Options,具体由子类实现
           task.render();
           task.close();
         }
    catch (EngineException e) ... {
           e.printStackTrace();
         }
    finally ... {
           engine.shutdown();
         }
  1. 渲染PDF和HTML报表
  2. PDF
       /** */ /**
        *
    @see AbstractBirtReportParser#setRenderContext(IRenderTask)
       
    */
       @Override
      
    protected void setRenderContext(IRenderTask task) ... {
         PDFRenderContext renderContext
    = new PDFRenderContext();
         renderContext.setEmbededFont(
    true);    
         HashMap contextMap
    = new HashMap();
         contextMap.put( EngineConstants.APPCONTEXT_PDF_RENDER_CONTEXT, renderContext);
         task.setAppContext( contextMap );        
       }


      
    /** */ /**
        *
    @see AbstractBirtReportParser#setRenderOptions(IRenderTask, OutputStream)
       
    */
       @Override
      
    protected void setRenderOptions(IRenderTask task, OutputStream out) ... {
         RenderOptionBase options
    = new RenderOptionBase();
         options.setOutputStream(out);
         options.setOutputFormat(RenderOptionBase.OUTPUT_FORMAT_PDF);
         task.setRenderOption(options);
       }
  • HTML
    我们要生成一个HTML的一部分,而非包含<html/>标记的完整的HTML文档
       /** */ /**
        *
    @see AbstractBirtReportParser#setRenderContext(IRenderTask)
       
    */
       @Override
      
    protected void setRenderContext(IRenderTask task) ... {
         HTMLRenderContext renderContext
    = new HTMLRenderContext();
         renderContext.setBaseURL(context.getBaseURL());        
       
    //You must define HTMLServerImageHandler to use a URL
         renderContext.setBaseImageURL(context.getBaseImageURL());
        
    //renderContext.setImageDirectory("myimages");
         renderContext.setImageDirectory(context.getImageDirectory());
         renderContext.setSupportedImageFormats(
    "JPG;PNG");
         HashMap contextMap
    = new HashMap();
         contextMap.put( EngineConstants.APPCONTEXT_HTML_RENDER_CONTEXT, renderContext);
         task.setAppContext( contextMap );    
       }


      
    /** */ /**
        *
    @see AbstractBirtReportParser#setRenderOptions(oIRenderTask, OutputStream)
       
    */
       @Override
      
    protected void setRenderOptions(IRenderTask task, OutputStream out) ... {
         HTMLRenderOption options
    = new HTMLRenderOption();
         options.setOutputStream(out);
         options.setEmbeddable(
    true);
         task.setRenderOption(options);   
       }
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值