`
咖啡舞者
  • 浏览: 128712 次
  • 性别: Icon_minigender_1
  • 来自: 福州
社区版块
存档分类
最新评论

BIRT部署并利用API生成PDF

    博客分类:
  • JAVA
阅读更多

注:本文转自 http://blog.csdn.net/xujiaqiang/archive/2008/01/19/2052789.aspx

感谢作者分享。

 

Birt报表设计步骤:

1、下载birt all in one 2.2.1.1,包含eclipse,解开下载文件
      启动eclipse,必须使用JDK1.5启动eclipse,否则新建工程对话框中没有birt的相关选项


2、新建report project和report
      打开data explorer视图,新建一个data sources,定义数据库连接driver/url/用户名/密码,在"Manage Drivers..."中把jdbc的jar加进来


3、新建Report Parameter,设置参数名称、类型,参数值将来通过url传递或使用程序方式赋值


4、新建data sets,设置Query,即preparedStatement语句,设置data set的Pameters,即reparedStatement中的“?”,使之和report parameter关联; 如果data set的Parameter的值不是来自于Report Parameter,例如来自另外一个data set, 可不设置关联,而在报表内容中设置和其它data set字段的关联(见步骤8)

5、如果data set对应的sql是动态生成的,可以设置“property Binding”,在Query Text中输入sql和表达式,其中可以使用Report Parameter和javascript语句,运行时将执行Property Binding中的Query Text,而不执行Query中的preparedStatement,但是Query中的preparedStatement在设计报表时还是有用的,因为可以看到运行结果的字段列表,只要preparedStatement和Query Text返回相同的字段即可

6、将定义好的data set拖动到设计界面上,会自动在报表放置一个Table

7、如要对table的某列合计,从Palette视图中拖一个“Aggregation”到设计界面

8、如要Master-Sleve报表,则在Table中再放置一个Table。例如一个data set是客户基本信息,每个客户一条记录,另一个data set是客户交易明细,每个客户可能有多条记录,则先将客户基本信息的data set拖置设计界面,会自动放置一个Table,然后将客户交易明细的data set拖置前一个Table中适当位置,即生成一个Table中的Table。选中交易明细的Table,打开Property Editor视图,在binding栏中,选择交易明细的data set,按“Dataset Parameter Binding...”,选择“CUST_ID"字段,将其和客户基本信息data set的CUST_ID关联起来(row["CUST_ID"])

9、按需要调整报表的样式,从eclipse工具栏中选择“view report in web viewer”,如果设置了Report Parameter,会出现一个对话框,要求输入Report Parameter的值,按确定后生成报表内容

10、在web viewer中,鼠标右建点按生成的报表,选“属性”,获取url,开一个空白IE,复制url到地址栏,在url最后用“&参数名=参数值”方式,把Report Parameter加进url,按回车,直接出现报表结果,不再出现报表参数输入对话框。还可以pdf/doc/html等格式预览生成的报表

Birt报表部署步骤:

部署设计好的报表很简单,只需要下载Birt runtime,将Birt runtime部署为一个web应用,报表设计文件复制到该应用的根目录即可。为方便起见,以下将Birt runtime部属为一个独立的应用,当然也可以将Birt runtime整合到你的web应用中

1、下载birt runtime 2.2.1.1,解开下载文件
2、将birt rumtime解开后的目录下的部署为一个web应用,使用JDK1.4.2或以上版本
3、将报表设计步骤中生成的设计文件(*.retdesing文件)复制到web应用所在目录
4、确保以下文件在WEB-INF/lib目录下存在,如果没有,从all in one中搜索复制过来
       com.ibm.icu_3.6.1.v20070906.jar
       coreapi.jar
       engineapi.jar
       scriptapi.jar
5、将jdbc的jar或zip文件复制到WEB-INF\platform\plugins\org.eclipse.birt.report.data.oda.jdbc_2.2.1.r22x_v20070919\drivers目录下
6、删除WEB-INF\platform\org.eclipse.birt.report.data.oda.sampledb_2.2.1.r22x_v20070919目录(示例数据库,没什么用处),否则生成报表时有不必要的警告信息出现
7、启动web server,修改设计步骤第10步获得的url,使IP/端口/web应用名称符合你的Birt runtime部署,在IE中可以查看报表内容 

使用Birt提供API以程序方式生成报表结果,例如生成PDF格式的报表结果,代码片段如下:

import java.util.HashMap;
import java.util.logging.Level;

import java.io.OutputStream;
import java.io.FileOutputStream;
import java.io.ByteArrayOutputStream;

import org.eclipse.birt.core.framework.Platform;
import org.eclipse.birt.report.engine.api.EngineConfig;
import org.eclipse.birt.report.engine.api.EngineConstants;
import org.eclipse.birt.report.engine.api.EngineException;
import org.eclipse.birt.report.engine.api.IReportEngine;
import org.eclipse.birt.report.engine.api.IReportEngineFactory;
import org.eclipse.birt.report.engine.api.IReportRunnable;
import org.eclipse.birt.report.engine.api.IRunAndRenderTask;
import org.eclipse.birt.report.engine.api.PDFRenderOption;

public class PDFReportServiceAccess
{
    /** *//** 初始化的状态 */
    protected static boolean initStatus = false;

    private static IReportEngine engine = null;

    private static EngineConfig config = null;
    
    private static IReportRunnable design = null;
    
    private static PDFRenderOption ro = null;

    /** *//** 初始化资源 */
    public void initilize()
    {
    if ( initStatus == true )
        return;

    try
    {
        config = new EngineConfig();
        config.setEngineHome( "C:/projects/birt/WEB-INF/platform" );  //birt runtime web应用中的报表引擎目录
        config.setLogConfig( "C:/projects/birt/logs", Level.FINE );

        Platform.startup( config );
        IReportEngineFactory factory = ( IReportEngineFactory ) Platform
            .createFactoryObject( IReportEngineFactory.EXTENSION_REPORT_ENGINE_FACTORY );
        engine = factory.createReportEngine( config );
        engine.changeLogLevel( Level.WARNING );

        ro = new PDFRenderOption();
      //  ro.setBaseURL( "http://localhost:8080/birt" ); //birt runtime web应用
        config.getEmitterConfigs().put( "pdf", ro ); //生成pdf格式

        initStatus = true;

    }
    catch ( Exception ex )
    {
        ex.printStackTrace();
        initStatus = false;
    }
    }

    /** *//** 释放资源 */
    public void release()
    {
    engine.shutdown();
    Platform.shutdown();

    initStatus = false;
    }

    protected OutputStream run( String filename, HashMap parameters ) throws EngineException
    {
    design = engine.openReportDesign( filename );
    
    // Create task to run and render the report,
    IRunAndRenderTask task = engine.createRunAndRenderTask( design );
    HashMap contextMap = new HashMap();
    contextMap.put( EngineConstants.APPCONTEXT_PDF_RENDER_CONTEXT, ro );
    task.setAppContext( contextMap );
    task.setParameterValues( parameters );
    task.validateParameters();

    OutputStream os = new ByteArrayOutputStream();
    ro.setOutputStream( os );
    ro.setOutputFormat( "pdf" );
    task.setRenderOption( ro );

    task.run();
    task.close();

    return os;
    }

    /** *//**
         * 生成PDF格式报表,以OutputStream格式返回
         * 
         * @param filename 报表设计文件名全路径
         * @param parameters
         *                报表参数
         * @return ByteArrayOutputStream
         * @throws EngineException
         */
    public OutputStream call( String filename, HashMap parameters ) throws EngineException
    {
    initilize();
    OutputStream os = run( filename, parameters );
    release();
    
    return os;
    }

    /** *//**
         * @param args
         */
    public static void main( String[] args )
    {
    HashMap parameters = new HashMap();
                     //三个Report Parameters,名称必须在报表设计文件中预先定义好
    parameters.put( "begindate", "2004/01/01" );
    parameters.put( "enddate", "2007/12/31" );
    parameters.put(  "sql", " where cust_id = 1234567" );
    
    ByteArrayOutputStream bos = null;

    PDFReportServiceAccess ebr = new PDFReportServiceAccess();

    String filename = "C:/projects/birt/batch_report.rptdesign";
    try
    {
        bos = ( ByteArrayOutputStream ) ebr.call( filename, parameters );
        OutputStream fis = new FileOutputStream( "c:/test.pdf" );
        bos.writeTo( fis );
    }
    catch ( Exception e )
    {
        e.printStackTrace();
    }
    }

}

 

分享到:
评论
1 楼 java-007 2008-08-18  
哥们,问你个问题,就是我想把我生成的html格式报表嵌套在别的jsp里面,这怎么实现,急啊,困扰了好几天了,万望回复,不胜感激啊!!!

相关推荐

    bird生成报表jar包 java生成excel报表

    自己写的java生成excel报表jar包,使用html中的table标签样式设计报表头部信息xml文件,接受list数据集生成excel报表。对结构不是太复杂的excel报表十分好用,有详细使用说明。不断完善中,欢迎提供意见和建议!(注...

    flappybird源代码[归纳].pdf

    flappybird源代码[归纳].pdf

    bird species recognition.pdf

    This paper investigates acoustic modeling for recognition of bird species from audio field recordings. First, the acoustic scene is decomposed into isolated segments, corresponding to detected ...

    bird生成报表jar包 java生成excel报表(添加打印时间)

    自己写的java生成excel报表jar包,使用html中的table标签样式设计报表头部信息xml文件,接受list数据集生成excel报表。对结构不是太复杂的excel报表十分好用,有详细使用说明。最新添加了打印时间。

    FlappyBird游戏源码

    在FlappyBird的cocos2dx版本中,游戏场景、角色动画、碰撞检测等功能都通过cocos2dx的API实现。 2. 游戏对象:游戏中的Bird对象和管道(Pipes)对象是核心。Bird的移动和跳跃通过物理引擎模拟,而Pipes则动态生成,...

    Flappy Bird java 源代码.pdf

    Flappy Bird java 源代码.pdf

    基于HTML5的Flappy bird游戏设计与开发.pdf

    在游戏开发中,我们还需要设计_pipe模块,用于生成随机的管道,玩家需要通过点击屏幕来控制小鸟飞过管道,获取游戏分数。游戏结束时,我们需要将游戏分数记录下来,并显示游戏结束信息。 本文通过结合HTML5中的...

    基于linux下nginx的安装及项目部署

    【描述】:本文将详细介绍如何在Linux系统中安装Nginx,并探讨其主要功能,包括反向代理、负载均衡以及项目部署的具体操作。 【标签】:“Nginx”,“Nginx反向代理”,“Nginx负载均衡”,“Nginx项目部署” ...

    OpenCv制作的FlappyBird

    在这个名为“OpenCv制作的FlappyBird”的项目中,开发者利用OpenCV技术实现了一个经典游戏FlappyBird的版本。下面我们将详细探讨OpenCV在该项目中的应用以及相关知识点。 首先,我们要理解OpenCV的基本概念。OpenCV...

    Ubuntu1210利用thunderbird收发邮件

    在Ubuntu 12.10操作系统中,Thunderbird是一款非常受欢迎的开源邮件客户端,它提供了高效、安全且用户友好的邮件管理功能。Thunderbird由Mozilla基金会开发,与Firefox浏览器一样,都强调隐私保护和自由软件的价值。...

    birt pdf 书

    这个CHM文件包含了大量的技术信息,帮助开发者了解如何利用BIRT的API来创建、设计和运行报表。API(Application Programming Interface)是软件之间交互的接口,对于开发者来说,它是理解BIRT内部工作原理并进行定制...

    flappyBird素材包

    在本文中,我们将深入探讨这款游戏中的一些关键素材,并通过提供的压缩包文件,了解游戏场景、障碍物以及用户界面的基本构成。 1. 游戏背景: - bg_day.png 和 bg_night.png:这两个文件代表了游戏的日间和夜间...

    FlappyBird实训报告.docx

    - 创建动态生成的管道障碍,确保游戏的随机性和挑战性。 - 设计得分系统和游戏结束条件。 - 对游戏进行调试和优化,确保流畅运行。 第二章 游戏功能分析 2.1 游戏主界面功能分析 主界面应包含开始按钮、游戏说明和...

    Flappy bird资源.zip

    本篇将深入探讨利用Unity进行游戏开发,以Flappy Bird为案例,同时延伸至"小鸟大战"这一中型游戏的制作过程。 Flappy Bird是一款曾经风靡全球的简单却又极具挑战性的手机游戏,其设计的核心在于玩家操控小鸟穿越...

    02-flappy bird.pdf

    在开发游戏时,图像处理和音频管理是至关重要的部分,特别是在创建类似Flappy Bird这样的简单但视觉和听觉效果丰富的游戏中。以下是从给定的文件中提取的关键知识点: 1. **图片导入与使用**: - `#include ...

    Unity3D flappy bird

    - 管子的生成和移动是一个循环过程,我们可以在水平方向上设置一个边界,当管子到达边界时销毁并重新生成。 3. **碰撞检测与响应**: - Unity3D的碰撞检测系统可以帮助我们判断小鸟是否与管子发生碰撞。如果发生...

    FlappyBird源码-java

    通过学习Flappy Bird的Java源码,开发者不仅可以掌握基础的游戏开发技能,还能了解如何利用Java实现游戏逻辑、图形渲染、用户交互等多个方面。这个过程对于提升Java编程能力和游戏设计思维具有极大的帮助。

    bluebird-api

    **蓝色知更鸟API(Bluebird API)** 在JavaScript的世界里,Promise是处理异步操作的重要工具,而Bluebird库是Promise的一个强大实现。Bluebird以其高性能、丰富的API和全面的错误处理机制著称。本篇文章将深入探讨...

    flappybird图像音频资源包

    《Flappy Bird 图像音频资源解析》 在游戏开发领域,资源是构成游戏世界的基础,它们赋予游戏视觉和听觉的生动性。本资源包“flappybird图像音频资源包”便是针对经典游戏《Flappy Bird》而设计的,旨在为开发者...

Global site tag (gtag.js) - Google Analytics