xhchc

          危波帆墻,笑談只在桃花上;與誰共尚,風吹萬里浪; 相依相偎,不做黃泉想;莫惆悵,碧波潮生,一蕭自狂放……

           

          BIRT部署并利用API生成PDF

          注:本文轉自 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格式的報表結果,代碼片段如下:

          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.<SPAN class=hilite1>birt</SPAN>.core.framework.Platform;   
          9. import org.eclipse.<SPAN class=hilite1>birt</SPAN>.report.engine.api.EngineConfig;   
          10. import org.eclipse.<SPAN class=hilite1>birt</SPAN>.report.engine.api.EngineConstants;   
          11. import org.eclipse.<SPAN class=hilite1>birt</SPAN>.report.engine.api.EngineException;   
          12. import org.eclipse.<SPAN class=hilite1>birt</SPAN>.report.engine.api.IReportEngine;   
          13. import org.eclipse.<SPAN class=hilite1>birt</SPAN>.report.engine.api.IReportEngineFactory;   
          14. import org.eclipse.<SPAN class=hilite1>birt</SPAN>.report.engine.api.IReportRunnable;   
          15. import org.eclipse.<SPAN class=hilite1>birt</SPAN>.report.engine.api.IRunAndRenderTask;   
          16. import org.eclipse.<SPAN class=hilite1>birt</SPAN>.report.engine.api.<SPAN class=hilite2>PDF</SPAN>RenderOption;   
          17.   
          18. public class <SPAN class=hilite2>PDF</SPAN>ReportServiceAccess   
          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 <SPAN class=hilite2>PDF</SPAN>RenderOption 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/<SPAN class=hilite1>birt</SPAN>/WEB-INF/platform" );  //<SPAN class=hilite1>birt</SPAN> runtime web應用中的報表引擎目錄   
          41.         config.setLogConfig( "C:/projects/<SPAN class=hilite1>birt</SPAN>/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 <SPAN class=hilite2>PDF</SPAN>RenderOption();   
          50.       //  ro.setBaseURL( "http://localhost:8080/<SPAN class=hilite1>birt</SPAN>" ); //<SPAN class=hilite1>birt</SPAN> runtime web應用   
          51.         config.getEmitterConfigs().put( "<SPAN class=hilite2>pdf</SPAN>", ro ); //生成<SPAN class=hilite2>pdf</SPAN>格式   
          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_<SPAN class=hilite2>PDF</SPAN>_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( "<SPAN class=hilite2>pdf</SPAN>" );   
          87.     task.setRenderOption( ro );   
          88.   
          89.     task.run();   
          90.     task.close();   
          91.   
          92.     return os;   
          93.     }   
          94.   
          95.     /** *//**  
          96.          * 生成<SPAN class=hilite2>PDF</SPAN>格式報表,以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.     <SPAN class=hilite2>PDF</SPAN>ReportServiceAccess ebr = new <SPAN class=hilite2>PDF</SPAN>ReportServiceAccess();   
          127.   
          128.     String filename = "C:/projects/<SPAN class=hilite1>birt</SPAN>/batch_report.rptdesign";   
          129.     try  
          130.     {   
          131.         bos = ( ByteArrayOutputStream ) ebr.call( filename, parameters );   
          132.         OutputStream fis = new FileOutputStream( "c:/test.<SPAN class=hilite2>pdf</SPAN>" );   
          133.         bos.writeTo( fis );   
          134.     }   
          135.     catch ( Exception e )   
          136.     {   
          137.         e.printStackTrace();   
          138.     }   
          139.     }   
          140.   
          141. }  

          posted on 2008-08-12 15:20 chu 閱讀(1020) 評論(0)  編輯  收藏


          只有注冊用戶登錄后才能發表評論。


          網站導航:
           

          導航

          統計

          常用鏈接

          留言簿(2)

          隨筆檔案

          我的鏈接

          搜索

          最新評論

          閱讀排行榜

          評論排行榜

          主站蜘蛛池模板: 文水县| 鸡泽县| 伊金霍洛旗| 兴业县| 罗城| 房产| 华亭县| 谢通门县| 浪卡子县| 玉龙| 甘孜| 开封市| 肥西县| 怀来县| 出国| 咸丰县| 巴彦淖尔市| 克东县| 剑阁县| 岳西县| 梓潼县| 阳城县| 云和县| 三门峡市| 苗栗县| 尚志市| 集贤县| 长汀县| 察隅县| 米林县| 斗六市| 舟曲县| 军事| 定兴县| 遵化市| 富宁县| 雷州市| 阿拉善左旗| 滦平县| 平乐县| 呼玛县|