<rt id="bn8ez"></rt>
<label id="bn8ez"></label>

  • <span id="bn8ez"></span>

    <label id="bn8ez"><meter id="bn8ez"></meter></label>

    xhchc

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

     

    BIRT部署并利用API生成PDF

    注:本文轉(zhuǎn)自 http://blog.csdn.net/xujiaqiang/archive/2008/01/19/2052789.aspx

    感謝作者分享。

     

    Birt報表設(shè)計步驟:

    1、下載birt all in one 2.2.1.1,包含eclipse,解開下載文件
          啟動eclipse,必須使用JDK1.5啟動eclipse,否則新建工程對話框中沒有birt的相關(guān)選項


    2、新建report project和report
          打開data explorer視圖,新建一個data sources,定義數(shù)據(jù)庫連接driver/url/用戶名/密碼,在"Manage Drivers..."中把jdbc的jar加進(jìn)來


    3、新建Report Parameter,設(shè)置參數(shù)名稱、類型,參數(shù)值將來通過url傳遞或使用程序方式賦值


    4、新建data sets,設(shè)置Query,即preparedStatement語句,設(shè)置data set的Pameters,即reparedStatement中的“?”,使之和report parameter關(guān)聯(lián); 如果data set的Parameter的值不是來自于Report Parameter,例如來自另外一個data set, 可不設(shè)置關(guān)聯(lián),而在報表內(nèi)容中設(shè)置和其它data set字段的關(guān)聯(lián)(見步驟8)

    5、如果data set對應(yīng)的sql是動態(tài)生成的,可以設(shè)置“property Binding”,在Query Text中輸入sql和表達(dá)式,其中可以使用Report Parameter和javascript語句,運行時將執(zhí)行Property Binding中的Query Text,而不執(zhí)行Query中的preparedStatement,但是Query中的preparedStatement在設(shè)計報表時還是有用的,因為可以看到運行結(jié)果的字段列表,只要preparedStatement和Query Text返回相同的字段即可

    6、將定義好的data set拖動到設(shè)計界面上,會自動在報表放置一個Table

    7、如要對table的某列合計,從Palette視圖中拖一個“Aggregation”到設(shè)計界面

    8、如要Master-Sleve報表,則在Table中再放置一個Table。例如一個data set是客戶基本信息,每個客戶一條記錄,另一個data set是客戶交易明細(xì),每個客戶可能有多條記錄,則先將客戶基本信息的data set拖置設(shè)計界面,會自動放置一個Table,然后將客戶交易明細(xì)的data set拖置前一個Table中適當(dāng)位置,即生成一個Table中的Table。選中交易明細(xì)的Table,打開Property Editor視圖,在binding欄中,選擇交易明細(xì)的data set,按“Dataset Parameter Binding...”,選擇“CUST_ID"字段,將其和客戶基本信息data set的CUST_ID關(guān)聯(lián)起來(row["CUST_ID"])

    9、按需要調(diào)整報表的樣式,從eclipse工具欄中選擇“view report in web viewer”,如果設(shè)置了Report Parameter,會出現(xiàn)一個對話框,要求輸入Report Parameter的值,按確定后生成報表內(nèi)容

    10、在web viewer中,鼠標(biāo)右建點按生成的報表,選“屬性”,獲取url,開一個空白IE,復(fù)制url到地址欄,在url最后用“&參數(shù)名=參數(shù)值”方式,把Report Parameter加進(jìn)url,按回車,直接出現(xiàn)報表結(jié)果,不再出現(xiàn)報表參數(shù)輸入對話框。還可以pdf/doc/html等格式預(yù)覽生成的報表

    Birt報表部署步驟:

    部署設(shè)計好的報表很簡單,只需要下載Birt runtime,將Birt runtime部署為一個web應(yīng)用,報表設(shè)計文件復(fù)制到該應(yīng)用的根目錄即可。為方便起見,以下將Birt runtime部屬為一個獨立的應(yīng)用,當(dāng)然也可以將Birt runtime整合到你的web應(yīng)用中

    1、下載birt runtime 2.2.1.1,解開下載文件
    2、將birt rumtime解開后的目錄下的部署為一個web應(yīng)用,使用JDK1.4.2或以上版本
    3、將報表設(shè)計步驟中生成的設(shè)計文件(*.retdesing文件)復(fù)制到web應(yīng)用所在目錄
    4、確保以下文件在WEB-INF/lib目錄下存在,如果沒有,從all in one中搜索復(fù)制過來
           com.ibm.icu_3.6.1.v20070906.jar
           coreapi.jar
           engineapi.jar
           scriptapi.jar
    5、將jdbc的jar或zip文件復(fù)制到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目錄(示例數(shù)據(jù)庫,沒什么用處),否則生成報表時有不必要的警告信息出現(xiàn)
    7、啟動web server,修改設(shè)計步驟第10步獲得的url,使IP/端口/web應(yīng)用名稱符合你的Birt runtime部署,在IE中可以查看報表內(nèi)容 

    使用Birt提供API以程序方式生成報表結(jié)果,例如生成PDF格式的報表結(jié)果,代碼片段如下:

    Java代碼 復(fù)制代碼
    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.     /** *//** 初始化的狀態(tài) */  
    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應(yīng)用中的報表引擎目錄   
    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應(yīng)用   
    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>格式報表,以O(shè)utputStream格式返回  
    97.          *   
    98.          * @param filename 報表設(shè)計文件名全路徑  
    99.          * @param parameters  
    100.          *                報表參數(shù)  
    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,名稱必須在報表設(shè)計文件中預(yù)先定義好   
    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 閱讀(1019) 評論(0)  編輯  收藏


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


    網(wǎng)站導(dǎo)航:
     

    導(dǎo)航

    統(tǒng)計

    常用鏈接

    留言簿(2)

    隨筆檔案

    我的鏈接

    搜索

    最新評論

    閱讀排行榜

    評論排行榜

    主站蜘蛛池模板: 曰批全过程免费视频在线观看 | 婷婷综合缴情亚洲狠狠尤物| 久久久久精品国产亚洲AV无码| 男女作爱在线播放免费网站| 在线A亚洲老鸭窝天堂| 国产精品免费大片一区二区| 亚洲国产三级在线观看| 在线观看肉片AV网站免费| 国产AV无码专区亚洲Av| 蜜桃成人无码区免费视频网站| 亚洲白色白色在线播放| 国产啪精品视频网免费| 亚洲va精品中文字幕| 亚洲精品国产精品国自产观看| 在线免费视频你懂的| 国精无码欧精品亚洲一区| 久久精品女人天堂AV免费观看| 亚洲AV网一区二区三区| 亚洲色偷偷综合亚洲AV伊人| 美女视频黄a视频全免费网站色窝 美女被cao网站免费看在线看 | 国产一区二区免费在线| a免费毛片在线播放| 亚洲一区精品视频在线| 亚洲精品无码高潮喷水在线| 欧洲美熟女乱又伦免费视频| 一级做a爰片久久毛片免费陪 | a高清免费毛片久久| 亚洲中文字幕乱码AV波多JI| 亚洲&#228;v永久无码精品天堂久久 | 国产精品极品美女免费观看| 一级人做人爰a全过程免费视频| 久久久久无码精品亚洲日韩 | 精品无码免费专区毛片| 亚洲av无码兔费综合| 综合亚洲伊人午夜网| 日本视频免费在线| 无码av免费一区二区三区| 亚洲欧美综合精品成人导航| 亚洲国产精品尤物YW在线观看| 久久久国产精品无码免费专区| 日韩在线观看视频免费|