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

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

          規(guī)則

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

          jasper文件和前面幾篇用到的是一樣的(person.jasper),準(zhǔn)備數(shù)據(jù)的文本文件Person.txt其中文件的格式對(duì)應(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"
          下來(lái)我們看看jasperReport的API是怎么識(shí)別這些數(shù)據(jù)的,但是做這個(gè)之前我們還要指定數(shù)據(jù)到底是怎么對(duì)應(yīng)的,定義String類型數(shù)組存放模板對(duì)應(yīng)的列名和文本數(shù)據(jù)對(duì)應(yīng)
          String[] columNames = new String[] "pid""name""sex""age""password",
                          
          "department" }
          ;
          識(shí)別這些數(shù)據(jù)并不難,下面這一句就可以搞定:
          JRCsvDataSource jrcsvDataScource = new JRCsvDataSource(JRLoader
                          .getLocationInputStream(
          "D:\\workspace\\Person.txt"));
          我們?cè)趺床拍茏屗R(shí)別對(duì)應(yīng)的列呢?查看API看看對(duì)應(yīng)的set方法吧!
          // set record delimiter
                  jrcsvDataScource.setRecordDelimiter("\r\n");
                  
          // set columnName
                  jrcsvDataScource.setColumnNames(columNames);
          至此數(shù)據(jù)源就準(zhǔn)備完了,jasperReport封裝了底層的實(shí)現(xiàn),簡(jiǎn)單吧!下來(lái)看看完整的代碼:
          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ù)源也是很簡(jiǎn)單,通過(guò)讀取xml文件獲得數(shù)據(jù)
          Document document = JRXmlUtils.parse(JRLoader.getLocationInputStream(xmlFileName));
          不同的是document會(huì)作為一個(gè)參數(shù)傳遞給報(bào)表,fillReport方法就不會(huì)出現(xiàn)第三個(gè)參數(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有多強(qiáng)大了吧!

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

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

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

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

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

          @凌晨風(fēng)
          new ViewReport().viewer(jasperPrint) 這個(gè)我始終找不到 不然我沒(méi)法加載xml文件 new的這個(gè)ViewReport() 找不到??!  回復(fù)  更多評(píng)論
            
          # re: iReport+jasperReport之CSV、XML數(shù)據(jù)源
          2014-07-30 11:26 | 李巖風(fēng)
          @凌晨風(fēng)
          xml作為數(shù)據(jù)源 應(yīng)該是寫一個(gè)類 然后運(yùn)行就行了 獲取節(jié)點(diǎn)放到ireport里 運(yùn)行類 應(yīng)該就能出來(lái)pdf了啊  回復(fù)  更多評(píng)論
            
          # 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();
          }
          }

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

          <2009年6月>
          31123456
          78910111213
          14151617181920
          21222324252627
          2829301234
          567891011

          常用鏈接

          留言簿(11)

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

          隨筆分類

          隨筆檔案

          文章分類

          文章檔案

          新聞分類

          新聞檔案

          收藏夾

          圍脖

          最新隨筆

          搜索

          •  

          最新評(píng)論

          閱讀排行榜

          評(píng)論排行榜

          主站蜘蛛池模板: 峨眉山市| 基隆市| 绥阳县| 咸丰县| 台北县| 马关县| 铁岭县| 寻乌县| 兴业县| 安吉县| 龙江县| 班玛县| 瓮安县| 株洲县| 垫江县| 桐城市| 乌海市| 资阳市| 绍兴县| 石阡县| 北京市| 临高县| 黔东| 内黄县| 凤冈县| 南涧| 汕头市| 昌都县| 温宿县| 金华市| 含山县| 忻城县| 兴安县| 巴塘县| 华蓥市| 马尔康县| 大竹县| 琼海市| 金门县| 遂昌县| 宝山区|