亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb

首頁 > 學院 > 開發設計 > 正文

JasperReport經驗談

2019-11-18 11:26:01
字體:
來源:轉載
供稿:網友

JasperReport和iReport是不錯的java報表工具. 在實際項目中, 本人用它們開發了20個Report, 涉及SubReport, Image, Graph, 積累了一些經驗. 尤其是關于EXPort到Excel方面, 文檔上也很少提及, 純粹是摸索出來的, 有的問題還是通過讀源代碼才解決的. 此貼并非入門教程, 差不多算是筆記吧, 以問答形式記錄. 

  1. iReport
  2. 安裝
    1. 下載,解壓iReport 0.4.0 (推薦src版本)
    2. 確認JDK是1.4以上
    3. 把JDK /lib下的tools.jar拷貝到{ireport_home}/lib目錄中
  3. 運行
    1. 對于下載的Binary版本,只能運行/bin/startup.bat
    2. 對于下載的Src版本,可以通過ant iReport運行(先安裝ant)
    3. 假如運行startup.bat,出現java.lang.NoSUChMethodError錯誤,一般是JDK版本太低。假如確認已安裝了1.4或以上,檢查path系統變量,看看有1.3的JRE是不是排在前面(比如安裝了Oracle的客戶端,往往有1.3的JRE),假如出現Class Not Found,檢查classpath。對于通過ant的方式運行,一般都沒什么問題,所以推薦下載src版本
  4. JasperReport 常見問題
    1. .jrxml vs .jasper
      • 假如在運行時載入.jrxml, 那么每次調用還得編譯, 不如預先編譯成.jasper.不過預先編譯的jasper,必須用同樣版本的JasperReport載入,而且靈活性差些. 不過對于大部分報表,還是預先編譯成jasper方便
    2. 假如批量編譯jrxml
      • 用Ant很輕易解決

         

        .....

         

    3. 如何使用圖片?
      • 很輕易,用Image控件就可以了. 在Image ExPRess里面可以用String來表示圖片的路徑, 或者用InputStream, File對象.不過不管用File還是String對象, 都不得不用絕對路徑, 這顯然很不靈活. 解決辦法是,穿入一個$P的參數,表示圖片所在的目錄,然后用$P和文件名拼接出完整的絕對路徑. 更好的方法是用InputStream, 例如this.getClass().getResourceAsStream("logo.jpg") ,這時只要把圖片放在當前.jasper所在的目錄就可以了,不必考慮什么參數,什么路徑了
    4. 顯示非數據庫字段變量
      • 顯示如運行日期等,可以直接在Text Field里面輸入new java.util.Date(), 然后把Pattern設成如mm/dd/yyyy.
    5. 動態控制某些Field是否顯示
      • 每個Static Text, Text Field甚至整個Band的屬性里面都有Print When Expression, 比如設成new Boolean(!$P{isDisplay}.equalsIgnoreCase("yes")), 那么只有當參數display的值為yes的時候才顯示
    6. 使用Sub Report, 如何使用相對路徑
      • 見1.3, 和使用圖片類似, 用InputStream或者傳入參數
    7. Query里面如何使用參數
      • $P!{xxx} 或者 $P{xxx} 后者只能用于類似PreparedStatement參數綁定, 而前者可替換Sql的任意部分. 在需要動態排序的時候, 前者非凡有用. 比如 select a,b,c from t order by $P!{orderClause}   不管用$P還是$P!, SQL最終是以PreparedStatement方式執行的, 不必太擔心性能問題   注重:參數是不能嵌套的, 比如$P{a} =''$P''   , $P=''value'', 不要指望$P{a}能被替換成''value''
    8. 如何使用圖表(Graph)
      • JasperReport本身沒有圖表功能, 只有顯示Image的功能(見4.3). iReport里有個Graph向導, 其實質是通過jFreeChart生成Image. 更另外, 更直接的做法是放一個Image控件, Image Express Class設置成java.awt.Image, 在Image Expression里通過自定義的類返回java.awt.Image對象. 例如''Graphprovider.getImage($P{REPORT_DATASOURCE},title, suBTitle.....)''.  GraphProvider是自己的類, public static Image getImage(JRDataSource, ....)
    9. 假如顯示多個圖表
      • 在一張報表上顯示一個圖表和顯示多個圖表是不同的. 假設Query是select name,price,qty from xxx, 第一張圖顯示name-price, 第二張圖顯示name-qty, 假如還是按3.8的方法, 第二張圖根本顯示不出來! 為什么  因為傳入的是JRDataSource, 而JRDataSource僅僅是對ResultSet的簡單封裝, 在第一張圖處理完后, 游標已經到了eof位置了, 在開始處理第二張圖的時候,就必然拋出游標耗盡的異常! 怎么辦   自己寫個JRDataSourceAdapter, 把JRDataSource對象里面的值預先保存到一個Collection (相當于一個Offline的數據集), 然后把這個Collection傳個getImage方法. 具體是, 建一個Variable  mydate, 類型是java.util.Map, Calculation Type- System, Initial Value Expression是JRDataSourceAdapter.JRDataSource2Map($P{REPORT_DATA_SOURCE},new String[]{"NAME","PRICE","QTY"},new Class[]{java.lang.String.class,java.lang.Double.class,java.lang.Double.class}), JRDataSource2Map是自己寫的一個Adapter. 然后在Image的Expression里面換成如''GraphProvider.getImage(mydata,title, other params...), 當然得修改getImage方法
  5. Export到Excel的問題
    1. 如何去掉報表頭等
      • 直接把不需要的Band刪除(把其高度設為0). 假如僅僅是export到Excel的時候不需要報表頭, 而輸出到PDF等仍然需要保留, 那么使用print when expression, 見4.4
    2. 假如讓Excel看起來整潔
      • 不要有空白地方! 首先把所有的Field設成一樣高, 對齊! 把所在Band的高度也設成和Field一樣高, 讓Field正好放入Band. 然后調整Field的寬度, 讓每個Field都相鄰,沒有空隙. 最后,記得設置參數: exporter.setParameter(JRXlsExporterParameter.IS_REMOVE_EMPTY_SPACE_BETWEEN_ROWS,


發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb
国产精品久久久久久久久久新婚| 成人中文字幕+乱码+中文字幕| 6080yy精品一区二区三区| 亚洲国产精品视频在线观看| 亚洲另类激情图| 亚洲欧美日韩久久久久久| 成人444kkkk在线观看| 欧美色道久久88综合亚洲精品| 亚洲国产成人爱av在线播放| 91精品视频免费| 欧美黄色片免费观看| 亚洲欧美日韩精品久久奇米色影视| 亚洲欧美一区二区三区在线| 国产一区二区三区在线免费观看| 亚洲精品视频播放| 日韩欧美在线一区| 日韩二区三区在线| 国产亚洲精品va在线观看| 粉嫩老牛aⅴ一区二区三区| 日韩中文字幕在线视频播放| 91av免费观看91av精品在线| 国产欧美久久久久久| 国产v综合ⅴ日韩v欧美大片| 欧美激情一区二区三区久久久| 日本伊人精品一区二区三区介绍| 久久精品亚洲热| 国产精品一区二区久久久久| 国产成人精品午夜| 精品国内亚洲在观看18黄| 亚洲男人第一网站| 亚洲国产精品女人久久久| 最近2019年好看中文字幕视频| 欧美在线观看日本一区| 国产精品久久久久久av下载红粉| 日韩在线免费视频| 亚洲天堂av在线免费| 亚洲国产另类久久精品| 久久久97精品| 亚洲小视频在线| 91av免费观看91av精品在线| 国产精品入口免费视| 亚洲品质视频自拍网| 久久国产视频网站| 精品视频一区在线视频| 伊人精品在线观看| 91精品久久久久久久久久久| 久久精彩免费视频| 在线播放日韩av| 国产精品香蕉av| 国产一区二区三区三区在线观看| 成人午夜一级二级三级| 国产精国产精品| 亚洲中国色老太| 欧美专区在线视频| 久久激情五月丁香伊人| 亚洲天堂久久av| 国产一区二区黄| 97色伦亚洲国产| 久久久久久国产三级电影| 亚洲欧美中文日韩v在线观看| 国产精品视频公开费视频| 国产香蕉97碰碰久久人人| 国产精品高清网站| 亚洲美女免费精品视频在线观看| 久久久久久久成人| 欧美在线视频一区二区| 国产精品海角社区在线观看| 高清欧美性猛交xxxx黑人猛交| 91久久精品视频| 欧美激情久久久久久| 国产91在线播放九色快色| 欧美人与性动交| 国产精品亚洲网站| 97在线免费观看| 久久99国产综合精品女同| 成人福利免费观看| 成人中文字幕在线观看| 茄子视频成人在线| 国产啪精品视频| 亚洲精品videossex少妇| 亚洲电影免费观看高清完整版| 精品伊人久久97| 国产精品久久久久7777婷婷| 色多多国产成人永久免费网站| 国产高清视频一区三区| 国产欧美日韩免费看aⅴ视频| 欧美一区二区.| 国产欧美最新羞羞视频在线观看| 欧美午夜激情在线| 亚洲精美色品网站| 亚洲精品免费av| xxxxx91麻豆| 91热福利电影| 亚洲电影中文字幕| 久久视频这里只有精品| 亚洲wwwav| 久久精品视频导航| 91精品国产99| 久久综合久久八八| 国内精品在线一区| 精品国产一区av| 亚洲开心激情网| 国产精品久久久久免费a∨大胸| 人体精品一二三区| 久久久91精品| 欧美激情久久久久| 亚洲欧美在线第一页| 日韩亚洲欧美中文高清在线| 国产成人在线精品| 亚洲片国产一区一级在线观看| 九色精品免费永久在线| 国产91精品高潮白浆喷水| 欧美另类高清videos| 自拍偷拍亚洲一区| 久久国产精品亚洲| 91九色国产在线| 97免费中文视频在线观看| 欧美日韩中文字幕在线| 亚洲日本欧美日韩高观看| 中文字幕一区二区三区电影| 国产精品日本精品| 欧美激情第1页| 国产精品偷伦免费视频观看的| 亚洲精品电影久久久| 色综合视频网站| 欧美夫妻性视频| 欧美午夜激情小视频| 亚洲qvod图片区电影| 国模精品一区二区三区色天香| 91综合免费在线| 亚洲已满18点击进入在线看片| 中文字幕av一区中文字幕天堂| 日韩电影免费观看在线观看| 欧美在线免费视频| 欧美黄网免费在线观看| 欧美精品一区三区| 欧美大人香蕉在线| 韩国一区二区电影| 亚洲va码欧洲m码| 国产日韩在线免费| 97超级碰在线看视频免费在线看| 久久的精品视频| 狠狠操狠狠色综合网| 精品美女永久免费视频| 一区二区在线视频| 欧美肥老太性生活视频| 日韩在线播放一区| 欧美激情精品久久久久久大尺度| 亚洲人成网7777777国产| 亚洲欧洲美洲在线综合| 国产精彩精品视频| 日韩美女免费视频| 欧美综合一区第一页| 91在线精品视频| 欧美成在线观看| 91av在线视频观看| 欧美疯狂xxxx大交乱88av| 在线丨暗呦小u女国产精品| 中文字幕日韩精品有码视频| 亚洲第一视频网站| 国产91对白在线播放| 91在线观看免费网站| 日本精品久久中文字幕佐佐木| 国产精品你懂得|