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

          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 凌晨風 閱讀(4404) 評論(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)

          我參與的團隊

          隨筆分類

          隨筆檔案

          文章分類

          文章檔案

          新聞分類

          新聞檔案

          收藏夾

          圍脖

          最新隨筆

          搜索

          •  

          最新評論

          閱讀排行榜

          評論排行榜

          主站蜘蛛池模板: 高州市| 苗栗县| 微山县| 新和县| 罗田县| 商丘市| 工布江达县| 保康县| 偃师市| 宝坻区| 塔城市| 木里| 宜君县| 县级市| 上林县| 平原县| 莎车县| 商丘市| 满城县| 潜江市| 高陵县| 霍林郭勒市| 独山县| 抚宁县| 蓬莱市| 晴隆县| 彭阳县| 建湖县| 郯城县| 田林县| 雷州市| 县级市| 揭东县| 六枝特区| 南宫市| 中西区| 资阳市| 南雄市| 上栗县| 昌江| 珠海市|