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),是一種用來存儲數(shù)據(jù)的純文本,文件格式,通常用于電子表格或數(shù)據(jù)庫軟件。

          規(guī)則

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

          jasper文件和前面幾篇用到的是一樣的(person.jasper),準(zhǔn)備數(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ù)的,但是做這個(gè)之前我們還要指定數(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ù)源就準(zhǔn)備完了,jasperReport封裝了底層的實(shí)現(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會作為一個(gè)參數(shù)傳遞給報(bào)表,fillReport方法就不會出現(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) 評論(19)  編輯  收藏 所屬分類: iReport + JasperReport 系列

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

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

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

          這個(gè)是好幾年的代碼了,我手頭沒有現(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) 這個(gè)我始終找不到 不然我沒法加載xml文件 new的這個(gè)ViewReport() 找不到啊!  回復(fù)  更多評論
            
          # 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)該就能出來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();
          }
          }

          就是這個(gè)類 里面有個(gè)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)
          能給個(gè)地址嗎  回復(fù)  更多評論
            
          # re: iReport+jasperReport之CSV、XML數(shù)據(jù)源
          2014-07-30 11:44 | 凌晨風(fēng)
          @李巖風(fēng)
          我這里也沒有 好多年前的事情了,QQ:jutleo@gmail.com,可以私聊。  回復(fù)  更多評論
            

          <2010年1月>
          272829303112
          3456789
          10111213141516
          17181920212223
          24252627282930
          31123456

          常用鏈接

          留言簿(11)

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

          隨筆分類

          隨筆檔案

          文章分類

          文章檔案

          新聞分類

          新聞檔案

          收藏夾

          圍脖

          最新隨筆

          搜索

          •  

          最新評論

          閱讀排行榜

          評論排行榜

          主站蜘蛛池模板: 辽阳市| 汉阴县| 揭东县| 平顺县| 磐石市| 呈贡县| 保康县| 揭西县| 旌德县| 木兰县| 赣州市| 和龙市| 茶陵县| 安丘市| 富锦市| 遂昌县| 颍上县| 虹口区| 兴海县| 隆昌县| 萍乡市| 寿阳县| 澄迈县| 三明市| 道真| 衡东县| 区。| 琼结县| 杨浦区| 鲁甸县| 饶河县| 鹤山市| 台州市| 泸州市| 元氏县| 广平县| 东辽县| 军事| 襄汾县| 垣曲县| 木里|