嘰哩咕嚕

          君子如玉,上善若水

          從零開始認(rèn)識(shí) JasperReport + IReport (JasperReport部分)

          因參與公司南非的項(xiàng)目,需要應(yīng)用在Linux平臺(tái),所以報(bào)表改用JasperReport.國內(nèi)的項(xiàng)目報(bào)表還是用FastReport(看來還是結(jié)晶啊).

          廢話少說,我從delphi平臺(tái)轉(zhuǎn)到RCP開發(fā)才不過兩月時(shí)間,以前從未接觸過JasperReport.(簡稱為JR)
          今天上級(jí)要求熟悉JR,為節(jié)后國際化報(bào)表做準(zhǔn)備.以下為我從0開始的一些記錄.
          目的: 力求理解JasterReport的各個(gè)概念及之間的關(guān)系.熟悉打印報(bào)表流程的來龍去脈,主要的調(diào)用方法(如加載報(bào)表,打印,預(yù)覽).       
                  報(bào)表設(shè)計(jì)器的使用.

          1. IReport 設(shè)計(jì)器,就像FastReport一樣有這樣的設(shè)計(jì)器.但名字叫IReprot,為安裝文件,我安裝的版本為
              iReport-3.0.0-windows-installer.exe,同事傳我的,下載地址百度下下就有了.
          2. JasperReport為一個(gè)開發(fā)Jar包,就是相當(dāng)于FastReport的報(bào)表控件.
          3. 初始化JasterReport
          private static JasperPrint initJasperReport(String fileName,
                      Map<String, Object> paramMap, List data) throws IOException,
                      MalformedURLException, JRException {
                  ...
                  InputStream is = fullPathString.toURL().openStream();  //這句以上代碼都是處理報(bào)表文件路徑
                  JasperReport jasperReport = (JasperReport) JRLoader.loadObject(is);       
                  Object[] objArray = data.toArray();
                  //JasperReport對(duì)象  + Map對(duì)象 + List 對(duì)象 =JasperPrint對(duì)象
                  final JasperPrint jasperPrint = JasperFillManager.fillReport(
                          jasperReport, paramMap, new JRBeanArrayDataSource(objArray));
                  return jasperPrint;
              }

          4.查找默認(rèn)打印機(jī)(打印服務(wù)).
          public static boolean directPrintByPrintName(final JasperPrint jasperPrint) {
                  if (jasperPrint != null) {
                      try {
                          PrintService[] PSs = PrinterJob.lookupPrintServices(); //java.awt.*包.查找所有打印服務(wù).
                          PrintService ps = null;
                          if (PSs != null && PSs.length > 1&& !Assert.isNull(MzTransParam.PrinterOfSyddyj)) {
                              for (int i = 0; i < PSs.length; i++) {
                                  String sps = PSs[i].toString();
                                  sps = sps.replace("Win32 Printer : ", ""); //$NON-NLS-1$ //$NON-NLS-2$
                                  //MzTransParam.PrinterOfSyddyj 我們系統(tǒng)設(shè)置的默認(rèn)打印機(jī)名稱.
                                  if (sps.equalsIgnoreCase(MzTransParam.PrinterOfSyddyj)) { 
                                      ps = PSs[i];//得到打印服務(wù)對(duì)象
                                      break;
                                  }
                              }
                          }
          5.設(shè)置打印參數(shù),好多個(gè)參數(shù)
                          if (ps != null) {
                              long start = System.currentTimeMillis();
                              PrintRequestAttributeSet printRequestAttributeSet = new HashPrintRequestAttributeSet();
                              printRequestAttributeSet.add(MediaSizeName.ISO_A5);// 處方模板是A5紙  第一個(gè)參數(shù)對(duì)象   

                              PrintServiceAttributeSet printServiceAttributeSet = new HashPrintServiceAttributeSet();
                              printServiceAttributeSet.add(new PrinterName(ps.getName(),null)); //第二個(gè)參數(shù)對(duì)象

                              final JRPrintServiceExporter exporter = new JRPrintServiceExporter(); //關(guān)鍵的對(duì)象,其它的對(duì)象都是為他服務(wù)的
                              //以下為設(shè)置參數(shù)
                              exporter.setParameter(JRExporterParameter.JASPER_PRINT,jasperPrint);
                              exporter.setParameter(JRPrintServiceExporterParameter.PRINT_REQUEST_ATTRIBUTE_SET,
                                              printRequestAttributeSet);
                              exporter.setParameter(JRPrintServiceExporterParameter.PRINT_SERVICE_ATTRIBUTE_SET,
                                              printServiceAttributeSet);
                              exporter.setParameter(JRPrintServiceExporterParameter.DISPLAY_PAGE_DIALOG,
                                              Boolean.FALSE);
                              exporter.setParameter(JRPrintServiceExporterParameter.DISPLAY_PRINT_DIALOG,
                                              Boolean.FALSE);
          6.關(guān)鍵的出場,在線程里導(dǎo)出報(bào)表.(打印)
                          Thread thread = new Thread(new Runnable() {
                                  public void run() {
                                      try {
                                          exporter.exportReport(); //就這么一句.exporter對(duì)象導(dǎo)出報(bào)表.
                                      } catch (Exception ex) {
                                          System.err.println(ex.getLocalizedMessage());
                                      }
                                  }
                              });
                              thread.start();
          7.采用默認(rèn)打印.
                          } else { //此處的else接的是5條的if
                              Thread thread = new Thread(new Runnable() {
                                  public void run() {
                                      try {
                                          //jasperPrint 對(duì)象就是JasperPrintManager生成的.參考上面的代碼.
                                          JasperPrintManager.printReport(jasperPrint,false);  //這一句應(yīng)該是默認(rèn)打印.
                                      } catch (Exception ex) {
                                      }
                                  }
                              });
                              thread.start();
                          }
                      } catch (Exception ex) {
                          return false;
                      }

                  }
                  return true;}
          未完.


             

          posted on 2011-09-09 07:49 嘰哩咕嚕 閱讀(3995) 評(píng)論(3)  編輯  收藏

          評(píng)論

          # re: 從零開始認(rèn)識(shí) JasperReport + IReport[未登錄] 2011-09-09 08:08 kevin

          建議你使用ireport 4.1.1功能上比3.0要強(qiáng)大得多。  回復(fù)  更多評(píng)論   

          # re: 從零開始認(rèn)識(shí) JasperReport + IReport (JasperReport部分) 2011-09-11 04:36 wangxunhua

          @kevin
          感謝Kevin兄指點(diǎn),因我現(xiàn)在的主要的工作不參與開發(fā),只參與報(bào)表設(shè)計(jì),但現(xiàn)在對(duì)jasperreport 還沒有一個(gè)整體的概念.3.0,4.1.1強(qiáng)大之處自是無從談起.不知可不可以指點(diǎn)下3.0 和4.1.1的區(qū)別.4.1.1的新特性.或是推薦一下文章.  回復(fù)  更多評(píng)論   

          # re: 從零開始認(rèn)識(shí) JasperReport + IReport (JasperReport部分)[未登錄] 2011-09-13 08:37 kevin

          @wangxunhua
          4.1.1的話,支持新的html組件以及google map,以及修正了若干的導(dǎo)出報(bào)表excel 和word的bug,采用了新的生成器。目前最新的版本是4.1.2,開發(fā)的話,使用3.7的這個(gè)版本的應(yīng)該很多。供您參考。謝謝。  回復(fù)  更多評(píng)論   


          只有注冊用戶登錄后才能發(fā)表評(píng)論。


          網(wǎng)站導(dǎo)航:
           

          公告

          瘋狂

          導(dǎo)航

          <2011年9月>
          28293031123
          45678910
          11121314151617
          18192021222324
          2526272829301
          2345678

          統(tǒng)計(jì)

          常用鏈接

          留言簿

          隨筆分類(17)

          隨筆檔案(22)

          文章分類(1)

          文章檔案(1)

          工程教程

          牛人BLOG

          搜索

          最新評(píng)論

          閱讀排行榜

          評(píng)論排行榜

          主站蜘蛛池模板: 周口市| 漳浦县| 乌兰察布市| 乌鲁木齐县| 卢湾区| 徐水县| 瑞丽市| 梧州市| 南雄市| 台东市| 连江县| 新邵县| 本溪市| 瓦房店市| 文昌市| 天柱县| 遵义县| 普定县| 安岳县| 林芝县| 凤冈县| 南溪县| 德兴市| 东台市| 法库县| 昭苏县| 新密市| 涞源县| 云龙县| 武鸣县| 平陆县| 彭山县| 鸡泽县| 申扎县| 万荣县| 宿州市| 深圳市| 雷波县| 康定县| 且末县| 清河县|