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

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

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

    隨筆 - 6  文章 - 129  trackbacks - 0
    <2025年5月>
    27282930123
    45678910
    11121314151617
    18192021222324
    25262728293031
    1234567

    常用鏈接

    留言簿(14)

    隨筆檔案(6)

    文章分類(467)

    文章檔案(423)

    相冊(cè)

    收藏夾(18)

    JAVA

    搜索

    •  

    積分與排名

    • 積分 - 826119
    • 排名 - 49

    最新評(píng)論

    閱讀排行榜

    評(píng)論排行榜

    報(bào)表生成一直是企業(yè)信息化過(guò)程中重要的一環(huán),也是目前比較難于實(shí)現(xiàn)的一環(huán),今天作者給大家介紹一種新的報(bào)表生成組件――JFreeReport。
    JFreeReport是JFreeReport.Org基于LGPL授權(quán)協(xié)議提供的一組Java包,用于生成各類報(bào)表,JFreeReport的數(shù)據(jù)繼續(xù)自Swing組件的TableModel
    接口,使用基于XML的報(bào)表格式定義文件對(duì)報(bào)表進(jìn)行格式化。JFreeReport生成的報(bào)表可以分頁(yè)預(yù)覽、打印,而且支持導(dǎo)出為多種格式的文件
    如pdf、Excel、CSV、Html等。更重要的是,JFreeReport不僅支持基于C/S結(jié)構(gòu)的系統(tǒng),而且支持基于B/S結(jié)構(gòu)的系統(tǒng)中的在線報(bào)表顯示。
    更具體的關(guān)于JFreeReport的介紹請(qǐng)大家訪問(wèn)JFreeReport的官方網(wǎng)站JFree.org。
      
      1 環(huán)境預(yù)備
      1.1 JFreeReport組件
      
      請(qǐng)大家到http://prdownloads.sourceforge.net/jfreereport/jfreereport-0.8.4_7.zip?download下載JFreeReport組件,
     下載的是一個(gè)ZIP文件,然后將ZIP文件解壓縮到c:\jfreereport(后面的章節(jié)中將使用%jfreereport_home%表示這個(gè)目錄)目錄下。
      
      1.2 JFreeReport擴(kuò)展組件
      
      請(qǐng)大家到http://www.jfree.org/jfreereport/jfreereport-ext-0.8.4_7.zip下載JFreeReport擴(kuò)展組件,他用于支持JFreeReport組件生
     成的報(bào)表的在線顯示。請(qǐng)大載后解壓縮到c:\jfreereport-ext目錄下(后面的章節(jié)中將使用%jfreereport_ext_home%表示這個(gè)目錄)
      
      1.3 Ant工具
      
      Apache公司提供的一個(gè)基于JAVA的自動(dòng)化腳本引擎,請(qǐng)大家到http://ant.apache.org/下載ant的可執(zhí)行文件,關(guān)于如何使用ant請(qǐng)大家查
     看ant的幫助文檔或者h(yuǎn)ttp://ant.apache.org/網(wǎng)站上的在線幫助文檔。示例中主要是用ant來(lái)負(fù)責(zé)編譯java代碼。
      
      1.4 作者提供的代碼
      
      為了運(yùn)行本文中作者提到的例子和相關(guān)資源文件,請(qǐng)大家下載作者提供的vivianjDemo.zip文件和中文轉(zhuǎn)換工具gb2unicode.jar。
     然后解壓縮到%jfreereport_home%\vivianjDemo(后面的章節(jié)中將使用%demo _home%表示這個(gè)目錄)目錄下。
      
      2 JFreeReport生成報(bào)表的基本步驟
      我們首先演示一個(gè)簡(jiǎn)單的例子,說(shuō)明使用JFreeReport生成報(bào)表的一些必要的步驟。
      
      2.1 實(shí)例說(shuō)明
      
      在這個(gè)例子中,我們將循環(huán)生成100條數(shù)據(jù)放入TableModel中,然后使用JFreeReport組件提供的預(yù)覽功能在屏幕上顯示生成的報(bào)表。
      
      [注] 為了簡(jiǎn)化,這里僅僅是逐條顯示數(shù)據(jù),不作任何修飾和統(tǒng)計(jì)工作,所以也不使用報(bào)表格式定義文件。
      
      2.2 代碼編制
      
      整個(gè)演示實(shí)例(HelloWorld.java)的代碼和相關(guān)注釋如下,假如你執(zhí)行了1.3中規(guī)定的步驟,
     你可以在%demo _home%/src/org/vivianj/jfreereport/看到這個(gè)文件。
      
      /**
      * HelloWorld.java
      */
      
      package org.vivianj.jfreereport;
      
      import java.awt.Color;
      import java.awt.event.WindowAdapter;
      import java.awt.event.WindowEvent;
      import java.awt.geom.Point2D;
      import javax.swing.table.DefaultTableModel;
      import javax.swing.table.TableModel;
      
      import org.jfree.report.Boot;
      import org.jfree.report.ElementAlignment;
      import org.jfree.report.JFreeReport;
      import org.jfree.report.ReportProcessingException;
      import org.jfree.report.elementfactory.TextFieldElementFactory;
      import org.jfree.report.modules.gui.base.PreviewDialog;
      import org.jfree.ui.FloatDimension;
      
      /**
      * 使用JFreeReport生成報(bào)表的簡(jiǎn)單例子,用于演示使用JFreeReport生成報(bào)表的一些基本步驟
      *
      * 本例子中,為了簡(jiǎn)化操作,報(bào)表定義是使用java直接編碼
      *
      * @ 作者 : bookman
      */
      public class HelloWorld
      {
      /**
      * 處理窗口關(guān)閉事件
      */
      protected static class CloseHandler extends WindowAdapter
      {
      public void windowClosing(final WindowEvent event)
      {
      System.exit(0);
      }
      }
      
      /**
      * 創(chuàng)建和顯示簡(jiǎn)單的報(bào)表
      */
      public HelloWorld()
      {
      // 獲得創(chuàng)建報(bào)表需要用到的數(shù)據(jù)
      final TableModel data = createData();
      //獲得報(bào)表要用到的報(bào)表定義內(nèi)容
      final JFreeReport report = createReportDefinition();
      //將報(bào)表定義和數(shù)據(jù)結(jié)合
      report.setData(data);
      try
      {
      //將生成的報(bào)表放到預(yù)覽窗口中
      final PreviewDialog preview = new PreviewDialog(report);
      preview.addWindowListener(new CloseHandler());
      preview.pack();
      //顯示報(bào)表預(yù)覽窗口
      preview.setVisible(true);
      }
      catch (ReportProcessingException e)
      {
      System.out.println(e);
      }
      
      }
      
      /**
      * 創(chuàng)建生成報(bào)表需要用到的數(shù)據(jù)
      *
      * @返回一個(gè)TableModel實(shí)例
      */
      private TableModel createData()
      {
      
      final Object[] columnNames = new String[]{"Column1", "Column2"};
      final DefaultTableModel result = new DefaultTableModel(columnNames, 100);
      int rownum = 0;
      int colnum = 0;
      for (;rownum < 100 ; rownum++)
      {
      result.setValueAt("say Hello " + rownum + "次", rownum, 0);
      result.setValueAt("say World " + rownum + "次" , rownum, 1);
      }
      
      return result;
      
      }
      
      /**
      * 創(chuàng)建一個(gè)報(bào)表定義
      *
      * @返回一個(gè)報(bào)表定義實(shí)例
      */
      private JFreeReport createReportDefinition()
      {
      
      final JFreeReport report = new JFreeReport();
      report.setName("A Very Simple Report");
      /**
      * 定義要顯示報(bào)表第一列的樣式
      */
      TextFieldElementFactory factory = new TextFieldElementFactory();
      factory.setName("T1");
      factory.setAbsolutePosition(new Point2D.Float(0, 0));
      factory.setMinimumSize(new FloatDimension(150, 20));
      factory.setColor(Color.black);
      factory.setHorizontalAlignment(ElementAlignment.LEFT);
      factory.setVerticalAlignment(ElementAlignment.MIDDLE);
      factory.setNullString("-");
      factory.setFieldname("Column1");
      report.getItemBand().addElement(factory.createElement());
      /**
      * 定義要顯示報(bào)表第二列的樣式
      */
      factory = new TextFieldElementFactory();
      factory.setName("T2");
      factory.setAbsolutePosition(new Point2D.Float(200, 0));
      factory.setMinimumSize(new FloatDimension(150, 20));
      factory.setColor(Color.black);
      factory.setHorizontalAlignment(ElementAlignment.LEFT);
      factory.setVerticalAlignment(ElementAlignment.MIDDLE);
      factory.setNullString("-");
      factory.setFieldname("Column2");
      report.getItemBand().addElement(factory.createElement());
      /**
      * 返回一個(gè)報(bào)表定義的實(shí)例
      */
      return report;
      
      }
      
      public static void main(final String[] args)
      {
      // 初始化JFreeReport
      Boot.start();
      
      //調(diào)用演示實(shí)例
      new HelloWorld();
      }
      
      }
      
      2.3 運(yùn)行例子
      
      假如你執(zhí)行了1.3中規(guī)定的步驟,你可以進(jìn)入命令行界面,然后進(jìn)入%demo_home%目錄下,修改setenv.cmd中的相關(guān)設(shè)置,
     執(zhí)行serenv.cmd設(shè)置環(huán)境變量。執(zhí)行java org.vivianj.jfreereport.HelloWorld查看運(yùn)行結(jié)果。下面這個(gè)圖片是
     作者執(zhí)行后結(jié)果的屏幕截圖:
      
      大家可以看到,JFreeReport已經(jīng)自動(dòng)幫我們實(shí)現(xiàn)了分頁(yè)。上面這個(gè)圖片顯示的是第一頁(yè)的數(shù)據(jù),你可以通過(guò)工具欄中的查
     看其它頁(yè)面中的內(nèi)容。
      
      2.4 基本步驟解釋
      
      使用JFreeReport生成報(bào)表通常需要以下三個(gè)基本步驟:
      
      生成可通過(guò)TableModel接口訪問(wèn)的數(shù)據(jù),如本例中的createData方法完成的功能
      生成一個(gè)JFreeReport實(shí)例,他定義了我們?nèi)绾胃袷交@示數(shù)據(jù),如本例中的createReportDefinition方法完成的功能
      將數(shù)據(jù)和JFreeReport實(shí)例連接起來(lái),并且將該JFreeReport實(shí)例傳給PreviewDialog的一個(gè)實(shí)例顯示給用戶
      
      3 使用JFreeReport生成復(fù)雜報(bào)表
      3.1 報(bào)表定義文件
      
      報(bào)表定義文件是JFreeReport生成復(fù)雜報(bào)表的重要文件,他就是一個(gè)XML文檔,主要描述如何使用指定的格式生成復(fù)雜的報(bào)表,
     同時(shí)使用報(bào)表定義文件也可以在報(bào)表格式需要修改時(shí)只需要更新該報(bào)表定義文件,而不需要修改應(yīng)用代碼。
      
      3.1.1 報(bào)表定義文件分類
      
      JFreeReport中使用了兩種基于XML的報(bào)表定義文件來(lái)保存報(bào)表定義信息:簡(jiǎn)單格式和擴(kuò)展格式.很明顯,簡(jiǎn)單格式不能夠完全
     的描述JFreeReport支持的全部報(bào)表定義信息,但是他更易于上手使用。而擴(kuò)展格式則能夠?qū)FreeReport的報(bào)表定義提供
     完整的支持,但是擴(kuò)展格式太具體了,不太輕易使用。
      
      關(guān)于這兩種報(bào)表定義格式文件所

    posted on 2008-04-02 19:32 Ke 閱讀(924) 評(píng)論(0)  編輯  收藏 所屬分類: JFreereport

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


    網(wǎng)站導(dǎo)航:
     
    主站蜘蛛池模板: ww在线观视频免费观看w| 处破女第一次亚洲18分钟| 亚洲中文字幕久久精品蜜桃| 日韩亚洲产在线观看| 国产AV无码专区亚洲AV琪琪| 一级特黄a免费大片| 污污网站免费观看| 99热在线精品免费全部my| 亚洲午夜无码久久| 免费精品视频在线| A级毛片高清免费视频在线播放| 91精品全国免费观看含羞草| 女人18一级毛片免费观看| 亚洲AV无码乱码在线观看牲色| 亚洲国产另类久久久精品黑人 | 午夜dj在线观看免费视频| 亚洲AⅤ无码一区二区三区在线 | 国产亚洲成在线播放va| a级大片免费观看| 免费不卡视频一卡二卡| 国产精品区免费视频| 在线免费观看一级片| 亚洲日韩激情无码一区| 亚洲av乱码一区二区三区香蕉 | 国产免费观看网站| 亚洲AV永久无码区成人网站 | 99热亚洲色精品国产88| 亚洲国产精品久久久久秋霞影院| 亚洲人成人伊人成综合网无码| 亚洲一线产品二线产品| 国产黄在线观看免费观看不卡| 中文字幕版免费电影网站| 100000免费啪啪18免进| 亚洲另类少妇17p| 亚洲中文字幕无码av在线| 一本大道一卡二大卡三卡免费| 波多野结衣免费在线观看| 亚洲精品国产精品乱码不卡√| 亚洲日产乱码一二三区别| 一区二区三区无码视频免费福利 | 在线观看免费亚洲|