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
    歡迎走進有風(fēng)的地方~~
    posts - 63,  comments - 279,  trackbacks - 0

    jasperReport支持多種格式的數(shù)據(jù)源,CSV(Comma Separated values),是一種用來存儲數(shù)據(jù)的純文本,文件格式,通常用于電子表格或數(shù)據(jù)庫軟件。

    規(guī)則

    0 開頭是不留空,以行為單位。
    1 可含或不含列名,含列名則居文件第一行。
    2 一行數(shù)據(jù)不垮行,無空行。
    3 以半角符號,作分隔符,列為空也要表達其存在。
    4 列內(nèi)容如存在,,則用“”包含起來。
    5 列內(nèi)容如存在“”則用“”“”包含。
    6 文件讀寫時引號,逗號操作規(guī)則互逆。
    7 內(nèi)碼格式不限,可為ASCII、Unicode或者其他。

    jasper文件和前面幾篇用到的是一樣的(person.jasper),準備數(shù)據(jù)的文本文件Person.txt其中文件的格式對應(yīng)模板文件的字段【 "pid", "name", "sex", "age", "password", "department"】。

    "20000000001","bulktree1","man","21","1111111111","pcisv61"
    "20000000002","bulktree2","man","22","2222222222","pcisv62"
    "20000000003","bulktree3","man","23","3333333333","pcisv63"
    "20000000004","bulktree4","man","24","4444444444","pcisv64"
    "20000000005","bulktree5","man","25","5555555555","pcisv65"
    "20000000006","bulktree6","man","26","6666666666","pcisv66"
    "20000000007","bulktree7","man","27","7777777777","pcisv67"
    "20000000008","bulktree8","man","28","8888888888","pcisv68"
    "20000000009","bulktree9","man","29","9999999999","pcisv69"
    下來我們看看jasperReport的API是怎么識別這些數(shù)據(jù)的,但是做這個之前我們還要指定數(shù)據(jù)到底是怎么對應(yīng)的,定義String類型數(shù)組存放模板對應(yīng)的列名和文本數(shù)據(jù)對應(yīng)
    String[] columNames = new String[] "pid""name""sex""age""password",
                    
    "department" }
    ;
    識別這些數(shù)據(jù)并不難,下面這一句就可以搞定:
    JRCsvDataSource jrcsvDataScource = new JRCsvDataSource(JRLoader
                    .getLocationInputStream(
    "D:\\workspace\\Person.txt"));
    我們怎么才能讓它識別對應(yīng)的列呢?查看API看看對應(yīng)的set方法吧!
    // set record delimiter
            jrcsvDataScource.setRecordDelimiter("\r\n");
            
    // set columnName
            jrcsvDataScource.setColumnNames(columNames);
    至此數(shù)據(jù)源就準備完了,jasperReport封裝了底層的實現(xiàn),簡單吧!下來看看完整的代碼:
    package org.bulktree.ireport.csvdata;

    import java.util.HashMap;

    import net.sf.jasperreports.engine.JasperFillManager;
    import net.sf.jasperreports.engine.JasperPrint;
    import net.sf.jasperreports.engine.JasperReport;
    import net.sf.jasperreports.engine.data.JRCsvDataSource;
    import net.sf.jasperreports.engine.util.JRLoader;

    import org.bulktree.ireport.ViewReport;

    public class CSVDataSource {
        
        
    public static void main(String[] args) {
            
    try {
                
    new CSVDataSource().reportView();
            }
     catch (Exception e) {
                
    // TODO Auto-generated catch block
                e.printStackTrace();
            }

        }


        
    private void reportView() throws Exception {
            JasperReport jasperReport 
    = (JasperReport) JRLoader
                    .loadObject(
    "D:\\workspace\\Person.jasper");

            JasperPrint jasperPrint 
    = JasperFillManager.fillReport(jasperReport,
                    getReportParameter(), getDateSource());
            
            
    new ViewReport().viewer(jasperPrint);
        }


        
    private HashMap getReportParameter() {
            HashMap parameters 
    = new HashMap();
            parameters.put(
    "reportTitle""laoshulin");
            
    return parameters;
        }


        
    private JRCsvDataSource getDateSource() throws Exception {
            String[] columNames 
    = new String[] "pid""name""sex""age""password",
                    
    "department" }
    ;
            
    // get csvdata
            JRCsvDataSource jrcsvDataScource = new JRCsvDataSource(JRLoader
                    .getLocationInputStream(
    "D:\\workspace\\test\\src\\org\\bulktree\\ireport\\csvdata\\Person.txt"));
            
    // set record delimiter
            jrcsvDataScource.setRecordDelimiter("\r\n");
            
    // set columnName
            jrcsvDataScource.setColumnNames(columNames);

            
    return jrcsvDataScource;
        }

    }

    還是這樣的效果吧!^_^



            至于XML數(shù)據(jù)源也是很簡單,通過讀取xml文件獲得數(shù)據(jù)
    Document document = JRXmlUtils.parse(JRLoader.getLocationInputStream(xmlFileName));
    不同的是document會作為一個參數(shù)傳遞給報表,fillReport方法就不會出現(xiàn)第三個參數(shù),完整代碼如下:
    package org.bulktree.ireport.xmldata;

    import java.util.HashMap;
    import java.util.Locale;

    import net.sf.jasperreports.engine.JRException;
    import net.sf.jasperreports.engine.JRParameter;
    import net.sf.jasperreports.engine.JasperFillManager;
    import net.sf.jasperreports.engine.JasperPrint;
    import net.sf.jasperreports.engine.JasperReport;
    import net.sf.jasperreports.engine.query.JRXPathQueryExecuterFactory;
    import net.sf.jasperreports.engine.util.JRLoader;
    import net.sf.jasperreports.engine.util.JRXmlUtils;

    import org.bulktree.ireport.ViewReport;
    import org.w3c.dom.Document;

    public class XMLDataSource {

        
    private static final String JASPER_FILE_NAME = "D:\\workspace\\Person.jasper";
        
    private static final String XML_FILE_NAME = "D:\\workspace\\person.xml";

        
    private void viewerReport() throws JRException {
            JasperReport jasperReport 
    = (JasperReport) JRLoader.loadObject(JASPER_FILE_NAME);

            JasperPrint jasperPrint 
    = JasperFillManager.fillReport(jasperReport,
                    getReportParameter(XML_FILE_NAME));

            
    new ViewReport().viewer(jasperPrint);
        }


        
    private HashMap getReportParameter(String xmlFileName) {
            HashMap parameters 
    = new HashMap();
            
    try {
                parameters.put(
    "reportTitle""laoshulin");
                Document document 
    = JRXmlUtils.parse(JRLoader.getLocationInputStream(xmlFileName));

                parameters.put(JRXPathQueryExecuterFactory.PARAMETER_XML_DATA_DOCUMENT,
                        document);
                parameters.put(JRXPathQueryExecuterFactory.XML_DATE_PATTERN, 
    "yyyy-MM-dd");
                parameters.put(JRXPathQueryExecuterFactory.XML_NUMBER_PATTERN, 
    "#,##0.##");
                parameters.put(JRXPathQueryExecuterFactory.XML_LOCALE, Locale.CHINESE);
                parameters.put(JRParameter.REPORT_LOCALE, Locale.CHINA);

            }
     catch (JRException e) {
                
    // TODO Auto-generated catch block
                e.printStackTrace();
            }


            
    return parameters;
        }


        
    public static void main(String[] args) throws Exception {
            
    new XMLDataSource().viewerReport();
        }

    }

            預(yù)覽效果就不看了吧!哈哈 都是一樣的道理,現(xiàn)在看看jasperReport的API有多強大了吧!

    posted on 2008-12-15 10:08 凌晨風(fēng) 閱讀(4400) 評論(19)  編輯  收藏 所屬分類: iReport + JasperReport 系列

    FeedBack:
    # re: iReport+jasperReport之CSV、XML數(shù)據(jù)源
    2008-12-15 11:55 | 飄流甁
    不錯!  回復(fù)  更多評論
      
    # re: iReport+jasperReport之CSV、XML數(shù)據(jù)源
    2009-01-14 18:40 | 夢想在這里起飛
    都是api級別的研究,不錯啊~

    iReport中文網(wǎng)
    http://ireport.cubebi.com

      回復(fù)  更多評論
      
    # re: iReport+jasperReport之CSV、XML數(shù)據(jù)源[未登錄]
    2009-06-15 20:43 | 菜鳥
    寫得很好,小弟現(xiàn)在有個問題想請教,CSV如果里面有個字段是int型的不是String類型的怎樣轉(zhuǎn)換?如果不轉(zhuǎn)換會報一個找不到該字段的錯誤。。。。。急急。。。請教各位大哥,如果看到此消息,請告訴小弟,小弟感激不盡,小弟的郵箱xiongshunhong@purple-river.com  回復(fù)  更多評論
      
    # re: iReport+jasperReport之CSV、XML數(shù)據(jù)源
    2009-06-16 08:54 | 凌晨風(fēng)
    這個問題很好處理,查一下api,對這類型轉(zhuǎn)化有說明的  回復(fù)  更多評論
      
    # re: iReport+jasperReport之CSV、XML數(shù)據(jù)源[未登錄]
    2010-01-12 11:28 | max
    小弟有個問題,大蝦能不能幫我解答下啊,xml數(shù)據(jù)源的 xml中的標簽,元素有沒有規(guī)定要如何寫啊?  回復(fù)  更多評論
      
    # re: iReport+jasperReport之CSV、XML數(shù)據(jù)源
    2010-01-12 12:32 | 凌晨風(fēng)
    @max
    標準的xml文件即可  回復(fù)  更多評論
      
    # re: iReport+jasperReport之CSV、XML數(shù)據(jù)源
    2014-07-30 10:30 | 李巖風(fēng)
    @飄流甁
    new ViewReport().viewer(jasperPrint); 這個沒找到 在哪  回復(fù)  更多評論
      
    # re: iReport+jasperReport之CSV、XML數(shù)據(jù)源
    2014-07-30 10:34 | 李巖風(fēng)
    new ViewReport().viewer(jasperPrint); 能告訴我這個在哪嗎,為什么我導(dǎo)步進去  回復(fù)  更多評論
      
    # re: iReport+jasperReport之CSV、XML數(shù)據(jù)源
    2014-07-30 10:36 | 凌晨風(fēng)
    @李巖風(fēng)
    這個是客戶端的applet類,你需要繼續(xù)看客戶端打印  回復(fù)  更多評論
      
    # re: iReport+jasperReport之CSV、XML數(shù)據(jù)源
    2014-07-30 10:55 | 李巖風(fēng)
    @凌晨風(fēng)
    在下一篇中嗎?這個是加載那個xml文件的嗎  回復(fù)  更多評論
      
    # re: iReport+jasperReport之CSV、XML數(shù)據(jù)源
    2014-07-30 10:58 | 李巖風(fēng)
    @凌晨風(fēng)
    我沒找到關(guān)于new ViewReport().viewer(jasperPrint) 的啊 這個ViewReport是不是一個類  回復(fù)  更多評論
      
    # re: iReport+jasperReport之CSV、XML數(shù)據(jù)源
    2014-07-30 11:03 | 李巖風(fēng)

    @凌晨風(fēng)
    風(fēng)哥,你有一套ireport 導(dǎo)出pdf用xml作為數(shù)據(jù)源的案例嗎?   回復(fù)  更多評論
      
    # re: iReport+jasperReport之CSV、XML數(shù)據(jù)源
    2014-07-30 11:20 | 凌晨風(fēng)
    @李巖風(fēng)
    http://jutleo.github.io/ireport/2013/05/07/iReport-jasperReport-13.html

    這個是好幾年的代碼了,我手頭沒有現(xiàn)成的,我的blog已經(jīng)遷移到以上地址,思路和關(guān)鍵代碼都在。  回復(fù)  更多評論
      
    # re: iReport+jasperReport之CSV、XML數(shù)據(jù)源
    2014-07-30 11:24 | 李巖風(fēng)

    @凌晨風(fēng)
    new ViewReport().viewer(jasperPrint) 這個我始終找不到 不然我沒法加載xml文件 new的這個ViewReport() 找不到啊!  回復(fù)  更多評論
      
    # re: iReport+jasperReport之CSV、XML數(shù)據(jù)源
    2014-07-30 11:26 | 李巖風(fēng)
    @凌晨風(fēng)
    xml作為數(shù)據(jù)源 應(yīng)該是寫一個類 然后運行就行了 獲取節(jié)點放到ireport里 運行類 應(yīng)該就能出來pdf了啊  回復(fù)  更多評論
      
    # re: iReport+jasperReport之CSV、XML數(shù)據(jù)源
    2014-07-30 11:27 | 李巖風(fēng)
    @凌晨風(fēng)
    public class XMLDataSource {

    private static final String JASPER_FILE_NAME = "D:\\workspace\\Person.jasper";
    private static final String XML_FILE_NAME = "D:\\workspace\\person.xml";

    private void viewerReport() throws JRException {
    JasperReport jasperReport = (JasperReport) JRLoader.loadObject(JASPER_FILE_NAME);

    JasperPrint jasperPrint = JasperFillManager.fillReport(jasperReport,
    getReportParameter(XML_FILE_NAME));

    new ViewReport().viewer(jasperPrint);
    }

    private HashMap getReportParameter(String xmlFileName) {
    HashMap parameters = new HashMap();
    try {
    parameters.put("reportTitle", "laoshulin");
    Document document = JRXmlUtils.parse(JRLoader.getLocationInputStream(xmlFileName));

    parameters.put(JRXPathQueryExecuterFactory.PARAMETER_XML_DATA_DOCUMENT,
    document);
    parameters.put(JRXPathQueryExecuterFactory.XML_DATE_PATTERN, "yyyy-MM-dd");
    parameters.put(JRXPathQueryExecuterFactory.XML_NUMBER_PATTERN, "#,##0.##");
    parameters.put(JRXPathQueryExecuterFactory.XML_LOCALE, Locale.CHINESE);
    parameters.put(JRParameter.REPORT_LOCALE, Locale.CHINA);

    } catch (JRException e) {
    // TODO Auto-generated catch block
    e.printStackTrace();
    }

    return parameters;
    }

    public static void main(String[] args) throws Exception {
    new XMLDataSource().viewerReport();
    }
    }

    就是這個類 里面有個new ViewReport().viewer(jasperPrint);   回復(fù)  更多評論
      
    # re: iReport+jasperReport之CSV、XML數(shù)據(jù)源
    2014-07-30 11:28 | 凌晨風(fēng)
    @李巖風(fēng)
    建議你看一下jasperReport自帶的例子  回復(fù)  更多評論
      
    # re: iReport+jasperReport之CSV、XML數(shù)據(jù)源
    2014-07-30 11:30 | 李巖風(fēng)
    @凌晨風(fēng)
    能給個地址嗎  回復(fù)  更多評論
      
    # re: iReport+jasperReport之CSV、XML數(shù)據(jù)源
    2014-07-30 11:44 | 凌晨風(fēng)
    @李巖風(fēng)
    我這里也沒有 好多年前的事情了,QQ:jutleo@gmail.com,可以私聊。  回復(fù)  更多評論
      

    <2014年7月>
    293012345
    6789101112
    13141516171819
    20212223242526
    272829303112
    3456789

    常用鏈接

    留言簿(11)

    我參與的團隊

    隨筆分類

    隨筆檔案

    文章分類

    文章檔案

    新聞分類

    新聞檔案

    收藏夾

    圍脖

    最新隨筆

    搜索

    •  

    最新評論

    閱讀排行榜

    評論排行榜

    主站蜘蛛池模板: 亚洲hairy多毛pics大全| 91免费资源网站入口| 小说专区亚洲春色校园| 亚洲欧洲免费视频| 亚洲免费在线观看| 日韩免费视频播放| 在线观看免费人成视频| 亚洲午夜免费视频| 中文精品人人永久免费| 日韩一级片免费观看| 亚洲AV无码一区二区三区网址| 亚洲最大视频网站| 久久噜噜噜久久亚洲va久| 国产亚洲美女精品久久久| www国产亚洲精品久久久| 日韩免费无码一区二区视频| 午夜宅男在线永久免费观看网| 免费无码成人AV在线播放不卡| 国产在线精品一区免费香蕉| 一个人看的www视频免费在线观看| 国产尤物在线视精品在亚洲| 亚洲人成色777777精品| 亚洲中文字幕无码av永久| 亚洲一级黄色大片| 亚洲六月丁香六月婷婷色伊人| 亚洲精品在线网站| 亚洲成年人电影在线观看| 亚洲电影免费观看| 亚洲欧洲精品一区二区三区| 337p日本欧洲亚洲大胆艺术| 亚洲国产精品热久久| 亚洲AV日韩AV天堂一区二区三区| 亚洲丁香色婷婷综合欲色啪| 久热综合在线亚洲精品| 亚洲国产综合专区电影在线 | 亚洲成年网站在线观看| 亚洲春黄在线观看| 国产精品亚洲片夜色在线| 亚洲欧洲日本在线观看| 亚洲精华液一二三产区| 国产亚洲欧美在线观看|