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

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

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

    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
    {
       
    /**
         * 針對當(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對象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) 閱讀(6335) 評論(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ù)  更多評論
      
    # re: iReport+jasperReport之BEAN數(shù)據(jù)源
    2008-12-12 12:55 | 凌晨風(fēng)
    哈哈 這個(gè)問題是很多報(bào)表都會出現(xiàn)的問題,那要看你的紙張了,要是紙張不限制的話你可以設(shè)置盡可能的大些防止撐開影響美觀,要是想動(dòng)態(tài)改變也不是很難,jasperReport可以動(dòng)態(tài)的改變你所涉及的任何域的所有屬性,所以你說的那個(gè)就很容易實(shí)現(xiàn),這些東西我都有測試過,之后有空會都寫出來的  回復(fù)  更多評論
      
    # 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)閉后,會把WEB服務(wù)都關(guān)掉呢,怎么解決這個(gè)問題???  回復(fù)  更多評論
      
    # re: iReport+jasperReport之BEAN數(shù)據(jù)源
    2009-01-07 09:03 | 凌晨風(fēng)
    怎么會關(guān)閉web服務(wù)呢?那你要檢查一下你的代碼了,建議你實(shí)現(xiàn)自己的JasperViewer  回復(fù)  更多評論
      
    # re: iReport+jasperReport之BEAN數(shù)據(jù)源[未登錄]
    2009-03-27 17:40 | 西西

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

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

      回復(fù)  更多評論
      
    # re: iReport+jasperReport之BEAN數(shù)據(jù)源[未登錄]
    2009-09-02 11:30 | footprint
    博主能不能提供一下XML文件呀?DETAIL域總是空白  回復(fù)  更多評論
      
    # re: iReport+jasperReport之BEAN數(shù)據(jù)源
    2014-04-19 10:02 | rober
    @footprint
    就是,LZ XML配置給一個(gè)吧,不知道怎么配置啊~~~  回復(fù)  更多評論
      
    # 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文件不會報(bào)錯(cuò),但是沒有了title和Column Header了  回復(fù)  更多評論
      
    # re: iReport+jasperReport之BEAN數(shù)據(jù)源[未登錄]
    2014-11-12 17:17 | hh
    @凌晨風(fēng)
    瞎說,是可以遍歷所有燃素,但不能改變屬性,因?yàn)橐坏┠0灞炯_定,就無法改,只能改變其中的值  回復(fù)  更多評論
      

    <2014年11月>
    2627282930311
    2345678
    9101112131415
    16171819202122
    23242526272829
    30123456

    常用鏈接

    留言簿(11)

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

    隨筆分類

    隨筆檔案

    文章分類

    文章檔案

    新聞分類

    新聞檔案

    收藏夾

    圍脖

    最新隨筆

    搜索

    •  

    最新評論

    閱讀排行榜

    評論排行榜

    主站蜘蛛池模板: 亚洲一区二区三区深夜天堂| 亚洲毛片基地日韩毛片基地| 国产精品亚洲一区二区三区| 午夜免费福利在线| 中文字幕亚洲综合小综合在线| 中文免费观看视频网站| 亚洲综合色7777情网站777| 成年人免费网站在线观看| 亚洲国产精品无码久久| 又粗又大又猛又爽免费视频| 国产黄色免费观看| 亚洲国产综合专区在线电影| 国产成人精品免费视频大| 午夜在线a亚洲v天堂网2019| 国产精品免费小视频| 国产精品免费久久久久久久久| 久久精品国产亚洲一区二区| 啦啦啦完整版免费视频在线观看| 亚洲宅男精品一区在线观看| 国产成人精品免费视频大全五级| 五级黄18以上免费看| 亚洲一区二区影院| 处破痛哭A√18成年片免费| 新最免费影视大全在线播放| 久久亚洲国产精品五月天| 欧美日韩国产免费一区二区三区| 国产99久久亚洲综合精品| 亚洲成av人片在线观看无码不卡| 日韩亚洲国产高清免费视频| 国产一区二区三区亚洲综合| 亚洲成AV人片在| 成年午夜视频免费观看视频 | 综合久久久久久中文字幕亚洲国产国产综合一区首 | 四虎永久免费观看| 在线毛片片免费观看| 亚洲欧美日韩综合久久久久| 中文字幕人成人乱码亚洲电影| 13一14周岁毛片免费| 污视频网站免费在线观看| 91亚洲va在线天线va天堂va国产 | 亚洲国产精品VA在线看黑人|