分享

BIRT部署并利用API生成PDF

 昵称76774 2008-10-08

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格式的报表结果,代码片段如下:

Java代码 复制代码
  1. import java.util.HashMap;  
  2. import java.util.logging.Level;  
  3.   
  4. import java.io.OutputStream;  
  5. import java.io.FileOutputStream;  
  6. import java.io.ByteArrayOutputStream;  
  7.   
  8. import org.eclipse.birt.core.framework.Platform;  
  9. import org.eclipse.birt.report.engine.api.EngineConfig;  
  10. import org.eclipse.birt.report.engine.api.EngineConstants;  
  11. import org.eclipse.birt.report.engine.api.EngineException;  
  12. import org.eclipse.birt.report.engine.api.IReportEngine;  
  13. import org.eclipse.birt.report.engine.api.IReportEngineFactory;  
  14. import org.eclipse.birt.report.engine.api.IReportRunnable;  
  15. import org.eclipse.birt.report.engine.api.IRunAndRenderTask;  
  16. import org.eclipse.birt.report.engine.api.PDFRenderOption;  
  17.   
  18. public class PDFReportServiceAccess  
  19. {  
  20.     /** *//** 初始化的状态 */  
  21.     protected static boolean initStatus = false;  
  22.   
  23.     private static IReportEngine engine = null;  
  24.   
  25.     private static EngineConfig config = null;  
  26.       
  27.     private static IReportRunnable design = null;  
  28.       
  29.     private static PDFRenderOption ro = null;  
  30.   
  31.     /** *//** 初始化资源 */  
  32.     public void initilize()  
  33.     {  
  34.     if ( initStatus == true )  
  35.         return;  
  36.   
  37.     try  
  38.     {  
  39.         config = new EngineConfig();  
  40.         config.setEngineHome( "C:/projects/birt/WEB-INF/platform" );  //birt runtime web应用中的报表引擎目录  
  41.         config.setLogConfig( "C:/projects/birt/logs", Level.FINE );  
  42.   
  43.         Platform.startup( config );  
  44.         IReportEngineFactory factory = ( IReportEngineFactory ) Platform  
  45.             .createFactoryObject( IReportEngineFactory.EXTENSION_REPORT_ENGINE_FACTORY );  
  46.         engine = factory.createReportEngine( config );  
  47.         engine.changeLogLevel( Level.WARNING );  
  48.   
  49.         ro = new PDFRenderOption();  
  50.       //  ro.setBaseURL( "http://localhost:8080/birt" ); //birt runtime web应用  
  51.         config.getEmitterConfigs().put( "pdf", ro ); //生成pdf格式  
  52.   
  53.         initStatus = true;  
  54.   
  55.     }  
  56.     catch ( Exception ex )  
  57.     {  
  58.         ex.printStackTrace();  
  59.         initStatus = false;  
  60.     }  
  61.     }  
  62.   
  63.     /** *//** 释放资源 */  
  64.     public void release()  
  65.     {  
  66.     engine.shutdown();  
  67.     Platform.shutdown();  
  68.   
  69.     initStatus = false;  
  70.     }  
  71.   
  72.     protected OutputStream run( String filename, HashMap parameters ) throws EngineException  
  73.     {  
  74.     design = engine.openReportDesign( filename );  
  75.       
  76.     // Create task to run and render the report,  
  77.     IRunAndRenderTask task = engine.createRunAndRenderTask( design );  
  78.     HashMap contextMap = new HashMap();  
  79.     contextMap.put( EngineConstants.APPCONTEXT_PDF_RENDER_CONTEXT, ro );  
  80.     task.setAppContext( contextMap );  
  81.     task.setParameterValues( parameters );  
  82.     task.validateParameters();  
  83.   
  84.     OutputStream os = new ByteArrayOutputStream();  
  85.     ro.setOutputStream( os );  
  86.     ro.setOutputFormat( "pdf" );  
  87.     task.setRenderOption( ro );  
  88.   
  89.     task.run();  
  90.     task.close();  
  91.   
  92.     return os;  
  93.     }  
  94.   
  95.     /** *//** 
  96.          * 生成PDF格式报表,以OutputStream格式返回 
  97.          *  
  98.          * @param filename 报表设计文件名全路径 
  99.          * @param parameters 
  100.          *                报表参数 
  101.          * @return ByteArrayOutputStream 
  102.          * @throws EngineException 
  103.          */  
  104.     public OutputStream call( String filename, HashMap parameters ) throws EngineException  
  105.     {  
  106.     initilize();  
  107.     OutputStream os = run( filename, parameters );  
  108.     release();  
  109.       
  110.     return os;  
  111.     }  
  112.   
  113.     /** *//** 
  114.          * @param args 
  115.          */  
  116.     public static void main( String[] args )  
  117.     {  
  118.     HashMap parameters = new HashMap();  
  119.                      //三个Report Parameters,名称必须在报表设计文件中预先定义好  
  120.     parameters.put( "begindate""2004/01/01" );  
  121.     parameters.put( "enddate""2007/12/31" );  
  122.     parameters.put(  "sql"" where cust_id = 1234567" );  
  123.       
  124.     ByteArrayOutputStream bos = null;  
  125.   
  126.     PDFReportServiceAccess ebr = new PDFReportServiceAccess();  
  127.   
  128.     String filename = "C:/projects/birt/batch_report.rptdesign";  
  129.     try  
  130.     {  
  131.         bos = ( ByteArrayOutputStream ) ebr.call( filename, parameters );  
  132.         OutputStream fis = new FileOutputStream( "c:/test.pdf" );  
  133.         bos.writeTo( fis );  
  134.     }  
  135.     catch ( Exception e )  
  136.     {  
  137.         e.printStackTrace();  
  138.     }  
  139.     }  
  140.   
  141. }  

    本站是提供个人知识管理的网络存储空间,所有内容均由用户发布,不代表本站观点。请注意甄别内容中的联系方式、诱导购买等信息,谨防诈骗。如发现有害或侵权内容,请点击一键举报。
    转藏 分享 献花(0

    0条评论

    发表

    请遵守用户 评论公约

    类似文章 更多