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

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

    規則

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

    jasper文件和前面幾篇用到的是一樣的(person.jasper),準備數據的文本文件Person.txt其中文件的格式對應模板文件的字段【 "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是怎么識別這些數據的,但是做這個之前我們還要指定數據到底是怎么對應的,定義String類型數組存放模板對應的列名和文本數據對應
    String[] columNames = new String[] "pid""name""sex""age""password",
                    
    "department" }
    ;
    識別這些數據并不難,下面這一句就可以搞定:
    JRCsvDataSource jrcsvDataScource = new JRCsvDataSource(JRLoader
                    .getLocationInputStream(
    "D:\\workspace\\Person.txt"));
    我們怎么才能讓它識別對應的列呢?查看API看看對應的set方法吧!
    // set record delimiter
            jrcsvDataScource.setRecordDelimiter("\r\n");
            
    // set columnName
            jrcsvDataScource.setColumnNames(columNames);
    至此數據源就準備完了,jasperReport封裝了底層的實現,簡單吧!下來看看完整的代碼:
    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數據源也是很簡單,通過讀取xml文件獲得數據
    Document document = JRXmlUtils.parse(JRLoader.getLocationInputStream(xmlFileName));
    不同的是document會作為一個參數傳遞給報表,fillReport方法就不會出現第三個參數,完整代碼如下:
    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();
        }

    }

            預覽效果就不看了吧!哈哈 都是一樣的道理,現在看看jasperReport的API有多強大了吧!

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

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

    iReport中文網
    http://ireport.cubebi.com

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

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

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

    @凌晨風
    new ViewReport().viewer(jasperPrint) 這個我始終找不到 不然我沒法加載xml文件 new的這個ViewReport() 找不到啊!  回復  更多評論
      
    # re: iReport+jasperReport之CSV、XML數據源
    2014-07-30 11:26 | 李巖風
    @凌晨風
    xml作為數據源 應該是寫一個類 然后運行就行了 獲取節點放到ireport里 運行類 應該就能出來pdf了啊  回復  更多評論
      
    # re: iReport+jasperReport之CSV、XML數據源
    2014-07-30 11:27 | 李巖風
    @凌晨風
    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);   回復  更多評論
      
    # re: iReport+jasperReport之CSV、XML數據源
    2014-07-30 11:28 | 凌晨風
    @李巖風
    建議你看一下jasperReport自帶的例子  回復  更多評論
      
    # re: iReport+jasperReport之CSV、XML數據源
    2014-07-30 11:30 | 李巖風
    @凌晨風
    能給個地址嗎  回復  更多評論
      
    # re: iReport+jasperReport之CSV、XML數據源
    2014-07-30 11:44 | 凌晨風
    @李巖風
    我這里也沒有 好多年前的事情了,QQ:jutleo@gmail.com,可以私聊。  回復  更多評論
      

    <2008年12月>
    30123456
    78910111213
    14151617181920
    21222324252627
    28293031123
    45678910

    常用鏈接

    留言簿(11)

    我參與的團隊

    隨筆分類

    隨筆檔案

    文章分類

    文章檔案

    新聞分類

    新聞檔案

    收藏夾

    圍脖

    最新隨筆

    搜索

    •  

    最新評論

    閱讀排行榜

    評論排行榜

    主站蜘蛛池模板: 亚洲色欲啪啪久久WWW综合网| 久久精品国产精品亚洲色婷婷| 免费观看的毛片手机视频| 啦啦啦www免费视频| 99精品视频在线观看免费专区| 最近2019中文字幕免费直播 | 国产免费内射又粗又爽密桃视频 | 国产无遮挡又黄又爽免费视频| 亚洲 综合 国产 欧洲 丝袜 | 亚洲美女免费视频| 国产婷婷综合丁香亚洲欧洲| 亚洲国产第一页www| 亚洲一区二区三区无码国产| 亚洲综合在线视频| 亚洲色偷偷偷综合网| 成人午夜影视全部免费看| 日韩精品无码专区免费播放| 毛片a级毛片免费观看免下载| 亚洲国产精品一区二区三区久久| 久久久影院亚洲精品| 久久精品视频亚洲| 中文字幕无码精品亚洲资源网久久 | 好吊妞998视频免费观看在线| 亚洲欧洲国产成人综合在线观看| 亚洲人成网站在线播放影院在线| 亚洲色中文字幕在线播放| 成年女人A毛片免费视频| 免费在线视频你懂的| 亚洲成A人片77777国产| 亚洲久本草在线中文字幕| 亚洲aⅴ天堂av天堂无码麻豆| 亚洲国产成人久久精品大牛影视| 亚洲精品动漫免费二区| 成在线人视频免费视频 | 日本在线看片免费| 9420免费高清在线视频| 四虎永久在线免费观看| 亚洲精品国产自在久久| 亚洲国产成人在线视频| 亚洲国产日韩a在线播放| 日本免费污片中国特一级|