var _gaq = _gaq || []; _gaq.push(['_setAccount', 'UA-20738293-1']); _gaq.push(['_trackPageview']); (function() { var ga = document.createElement('script')"/>

          jutleo
          歡迎走進(jìn)有風(fēng)的地方~~
          posts - 63,  comments - 279,  trackbacks - 0
           JasperFillManager.fillReport()這個(gè)方法在使用JDBC數(shù)據(jù)源時(shí)采用一個(gè)打開的數(shù)據(jù)庫連接(getConn),除此之外jasperReport給我們提供了一個(gè)JRDataSource接口,用以實(shí)現(xiàn)我們自己的數(shù)據(jù)源
          JRDataSource接口只有兩個(gè)方法
          public interface JRDataSource
          {
             
          /**
               * 針對(duì)當(dāng)前的數(shù)據(jù)源返回游標(biāo)指向的下一個(gè)
          元素的值,
               *

               
          */
              
          public boolean next() throws JRException;
            
          /**
               * 返回游標(biāo)指向的當(dāng)前值
               *

               
          */
              
          public Object getFieldValue(JRField jrField) throws JRException;
          }
          JRBeanCollectionDataSource
          此種方式是最簡單的一種,查看API我們就可以發(fā)現(xiàn),JRBeanCollectionDataSource繼承JRAbstractBeanDataSource類,而JRAbstractBeanDataSource是一個(gè)抽象類它間接的實(shí)現(xiàn)了JRDataSource這個(gè)接口,所以我們就可以不用自己去實(shí)現(xiàn)next()/getFieldValue()這兩個(gè)方法了。
                  看到JRBeanCollectionDataSource這個(gè)類名大概就知道怎么用了吧!
                  我們的模板文件還是上篇的JDBC數(shù)據(jù)源的模板,只是沒有了查詢語句,手工建立所需的幾個(gè)字段(域)
          新建一vo對(duì)象Person.java,最基本的getter、setter方法
          package org.bulktree.ireport.customdata;

          /**
           * custom data
           * 
           * 
          @author bulktree Email: laoshulin@gmail.com @ Nov 7, 2008
           
          */

          public class Person {
              
          private String pid;
              
          private String name;
              
          private String sex;
              
          private String age;
              
          private String password;
              
          private String department;

              
          public Person(String pid, String name, String sex, String age, String password,
                      String department) 
          {
                  
          this.pid = pid;
                  
          this.name = name;
                  
          this.sex = sex;
                  
          this.age = age;
                  
          this.password = password;
                  
          this.department = department;
              }


              
          public Person() {

              }


              
          }


          下來準(zhǔn)備數(shù)據(jù)
          Person p1 = new Person();
                  p1.setAge(
          "23");
                  p1.setDepartment(
          "ISoftStone");
                  p1.setName(
          "LAOSHULIN");
                  p1.setPassword(
          "123456789");
                  p1.setPid(
          "2008040516058772hj");
                  p1.setSex(
          "man");
          既然它是一個(gè)BeanCollection我們 就來一個(gè)從conllection吧!
          List<Person> list = new ArrayList<Person>();
                  list.add(p1);
          查看API,JRBeanCollectionDataSource的構(gòu)造函數(shù)
          public JRBeanCollectionDataSource(Collection beanCollection)
              
          {
                  
          this(beanCollection, true);
              }

              
          /**
               *
               
          */

              
          public JRBeanCollectionDataSource(Collection beanCollection, boolean isUseFieldDescription)
              
          {
                  
          super(isUseFieldDescription);
                  
                  
          this.data = beanCollection;

                  
          if (this.data != null)
                  
          {
                      
          this.iterator = this.data.iterator();
                  }

              }
          看看描述我們使用第一個(gè)
          JRDataSource datesource = new JRBeanCollectionDataSource(list);
          這個(gè)數(shù)據(jù)源就構(gòu)造完畢了,很簡單吧!這樣報(bào)表就可以預(yù)覽了,完整的代碼如下:
          package org.bulktree.ireport.customdata;

          import java.io.File;
          import java.io.FileInputStream;
          import java.io.FileNotFoundException;
          import java.io.InputStream;
          import java.sql.Connection;
          import java.sql.DriverManager;
          import java.sql.ResultSet;
          import java.sql.Statement;
          import java.util.ArrayList;
          import java.util.HashMap;
          import java.util.List;
          import java.util.Map;

          import net.sf.jasperreports.engine.JRDataSource;
          import net.sf.jasperreports.engine.JRException;
          import net.sf.jasperreports.engine.JasperCompileManager;
          import net.sf.jasperreports.engine.JasperExportManager;
          import net.sf.jasperreports.engine.JasperFillManager;
          import net.sf.jasperreports.engine.JasperPrint;
          import net.sf.jasperreports.engine.JasperReport;
          import net.sf.jasperreports.engine.data.JRBeanCollectionDataSource;
          import net.sf.jasperreports.engine.util.JRLoader;
          import net.sf.jasperreports.view.JRViewer;
          import net.sf.jasperreports.view.JasperViewer;

          public class JasperReportDemo {
              
          public static void main(String[] args) throws Exception {
                  JasperReportDemo jrd 
          = new JasperReportDemo();
                  jrd.reportMethod(jrd.getMap());
              }


              
          public void reportMethod(Map map) throws Exception {
                  JasperReport jasperReport 
          = null;
                  JasperPrint jasperPrint 
          = null;

                  
          try {
                      
          /*
                       * File file = new File("Person.jrxml"); InputStream in = new
                       * FileInputStream(file); // 編譯報(bào)表 jasperReport =
                       * JasperCompileManager.compileReport(in);
                       
          */

                      
          // 實(shí)際中編譯報(bào)表很耗時(shí),采用Ireport編譯好的報(bào)表
                      jasperReport = (JasperReport) JRLoader
                              .loadObject(
          "D:\\workspace\\Person.jasper");
                      
          // 填充報(bào)表
                      jasperPrint = JasperFillManager
                              .fillReport(jasperReport, map, getDataSource());
                      
          // JasperExportManager.exportReportToHtmlFile(jasperPrint,
                      
          // "test.html");
                      JasperViewer jasperViewer = new JasperViewer(jasperPrint);
                      jasperViewer.setVisible(
          true);
                  }
           catch (JRException e) {
                      e.printStackTrace();
                  }
           catch (FileNotFoundException e) {
                      e.printStackTrace();
                  }

              }


              
          public Map getMap() {

                  Map map 
          = new HashMap();
                  map.put(
          "reportTitle""laoshulin");
                  
          return map;
              }


              
          public JRDataSource getDataSource() throws Exception {

                  
          // 自定義數(shù)據(jù)源
                  Person p1 = new Person();
                  p1.setAge(
          "23");
                  p1.setDepartment(
          "ISoftStone");
                  p1.setName(
          "LAOSHULIN");
                  p1.setPassword(
          "123456789");
                  p1.setPid(
          "2008040516058772hj");
                  p1.setSex(
          "man");
                  List
          <Person> list = new ArrayList<Person>();
                  list.add(p1);

                  JRDataSource datesource 
          = new JRBeanCollectionDataSource(list);

                  
          return datesource;
              }

          }

          看看效果吧!
          簡簡單單的幾行代碼就可以完成一個(gè)簡單的報(bào)表,我們看到的這些工具欄圖表還有窗口的一些標(biāo)題啊等等都可以自己的定制哦,下來慢慢介紹!
          posted on 2008-12-12 09:56 凌晨風(fēng) 閱讀(6339) 評(píng)論(10)  編輯  收藏 所屬分類: iReport + JasperReport 系列

          FeedBack:
          # re: iReport+jasperReport之BEAN數(shù)據(jù)源
          2008-12-12 11:38 | 楊愛友
          如果某列顯示的是公司地址,有的公司地址“變態(tài)”,多大200個(gè)漢字,有的只有十幾個(gè),那你能動(dòng)態(tài)設(shè)定這一列的寬度和高度嗎?
          以前我沒有做到,只能設(shè)定足夠的寬度和高度來顯示這個(gè)地址。  回復(fù)  更多評(píng)論
            
          # re: iReport+jasperReport之BEAN數(shù)據(jù)源
          2008-12-12 12:55 | 凌晨風(fēng)
          哈哈 這個(gè)問題是很多報(bào)表都會(huì)出現(xiàn)的問題,那要看你的紙張了,要是紙張不限制的話你可以設(shè)置盡可能的大些防止撐開影響美觀,要是想動(dòng)態(tài)改變也不是很難,jasperReport可以動(dòng)態(tài)的改變你所涉及的任何域的所有屬性,所以你說的那個(gè)就很容易實(shí)現(xiàn),這些東西我都有測試過,之后有空會(huì)都寫出來的  回復(fù)  更多評(píng)論
            
          # re: iReport+jasperReport之BEAN數(shù)據(jù)源
          2009-01-06 16:05 | zsyzk@qq.com
          JasperViewer jasperViewer = new JasperViewer(jasperPrint);
          jasperViewer.setVisible(true);

          直接這樣打開預(yù)覽,關(guān)閉后,會(huì)把WEB服務(wù)都關(guān)掉呢,怎么解決這個(gè)問題???  回復(fù)  更多評(píng)論
            
          # re: iReport+jasperReport之BEAN數(shù)據(jù)源
          2009-01-07 09:03 | 凌晨風(fēng)
          怎么會(huì)關(guān)閉web服務(wù)呢?那你要檢查一下你的代碼了,建議你實(shí)現(xiàn)自己的JasperViewer  回復(fù)  更多評(píng)論
            
          # re: iReport+jasperReport之BEAN數(shù)據(jù)源[未登錄]
          2009-03-27 17:40 | 西西

          這樣寫就不會(huì)關(guān)掉了
          JasperViewer jasperViewer = new JasperViewer(jasperPrint,false);   回復(fù)  更多評(píng)論
            
          # re: iReport+jasperReport之BEAN數(shù)據(jù)源
          2009-08-26 11:03 | 痞子

          JasperViewer jrview=new JasperViewer(jasperPrint,false);
          就不會(huì)關(guān)閉服務(wù)了

            回復(fù)  更多評(píng)論
            
          # re: iReport+jasperReport之BEAN數(shù)據(jù)源[未登錄]
          2009-09-02 11:30 | footprint
          博主能不能提供一下XML文件呀?DETAIL域總是空白  回復(fù)  更多評(píng)論
            
          # re: iReport+jasperReport之BEAN數(shù)據(jù)源
          2014-04-19 10:02 | rober
          @footprint
          就是,LZ XML配置給一個(gè)吧,不知道怎么配置啊~~~  回復(fù)  更多評(píng)論
            
          # re: iReport+jasperReport之BEAN數(shù)據(jù)源
          2014-05-15 14:09 | 周研
          List<OauthApi> list = reportService.getApiList();
          JRBeanCollectionDataSource dataSource = new JRBeanCollectionDataSource(
          list);

          當(dāng)list為空時(shí),生成的pdf或者excel文件不會(huì)報(bào)錯(cuò),但是沒有了title和Column Header了  回復(fù)  更多評(píng)論
            
          # re: iReport+jasperReport之BEAN數(shù)據(jù)源[未登錄]
          2014-11-12 17:17 | hh
          @凌晨風(fēng)
          瞎說,是可以遍歷所有燃素,但不能改變屬性,因?yàn)橐坏┠0灞炯_定,就無法改,只能改變其中的值  回復(fù)  更多評(píng)論
            

          <2009年1月>
          28293031123
          45678910
          11121314151617
          18192021222324
          25262728293031
          1234567

          常用鏈接

          留言簿(11)

          我參與的團(tuán)隊(duì)

          隨筆分類

          隨筆檔案

          文章分類

          文章檔案

          新聞分類

          新聞檔案

          收藏夾

          圍脖

          最新隨筆

          搜索

          •  

          最新評(píng)論

          閱讀排行榜

          評(píng)論排行榜

          主站蜘蛛池模板: 新田县| 磴口县| 西峡县| 商洛市| 建阳市| 南澳县| 兴山县| 平顶山市| 宝鸡市| 务川| 恩平市| 灌云县| 盐山县| 石屏县| 当阳市| 辽宁省| 北宁市| 双桥区| 苏尼特右旗| 龙山县| 阿巴嘎旗| 衡南县| 临猗县| 武义县| 阆中市| 长武县| 黑河市| 张家界市| 革吉县| 乌鲁木齐市| 永州市| 苍梧县| 鄂州市| 凤阳县| 永定县| 大连市| 渭源县| 平江县| 靖安县| 汉沽区| 德钦县|