iReport 是爲JasperReports Library和JasperReports Server設計的報表可視化設計器,而JasperReports是用來開發動態報表,基於java的一個開源庫。也就是說ireport只是輔助jasperReport開發的一個可視化工具而已。ireport製做出以.xml或者.jrxml爲後綴的模板文件,jasperReport就把這類模板編譯成.jasper爲後綴的文檔,而後JasperReports就能夠查看、打印或導出在多種文檔格式,包括HTML、PDF、Excel、OpenOffice和doc。html
我是在2015年用的ireport作報表開發,當時用的版本是5.6.0,這個算是我當時找到的最新的版本了,我以爲當時之因此用這個來作報表開發可能有很大部分緣由是領導的情懷問題。我以前用過國內的潤乾報表和快逸報表工具來作報表開發,我以爲做爲可視化工具,它們要比ireport好用,何況如今國內還有FineReport、水晶報表這麼多報表工具,怎麼就選中了ireport。說實在的,我感受這個報表不少東西幾近失傳了,網上一些資料都是很早之前的,最後只能靠着本身的摸索和領導的帶領才勉強完成了任務。閒話不提了,我當時針對ireport使用中出現的問題,總結了一些解決方法,若是能給開發同仁們提供一些幫助,那就算是積福報了。java
一、ireport各個部分表示的含義spring
<1>title:title段只在整個報表的第一頁的最上面部分顯示,除了第一頁之外,無論報表中共有多少個頁面也不會再出現title段中的內容。express
<2>pageHeader:pageHeader段中的內容將會在整個報表中的每個頁面中都會出現,顯示位置在頁面上部,若是是報表的第一頁,pageHeader 中 的內容將顯示在title段下面,除了第一頁之外的其餘全部頁面中,pageHeader中內容將顯示在頁面的最上端jsp
<3>columnHeader:針對detail段的表頭段,通常狀況下在這個段中畫報表中列的列標題,每頁均會出現一次。工具
<4>detail:報表內容段,在這個段中設計報表中須要重複出現的內容,detail段中的內容每頁均會出現。字體
<5>columnFooter:針對detail段的表尾段,每頁均會出現一次。url
<6>pageFooter:顯示在所在頁面的最下端,每頁都會顯示,最後一頁由lastPageFooter替代。spa
<7>lastPageFooter:最後一頁頁尾段內容,只在最後一頁出現一次。.net
<8>summary:表格的合計段,出如今整個報表的最後一頁中的detail端的後面,通常用來統計報表中某一個或幾個字段的合計值。
二、ireport安裝時不支持java8
ireport不支持java8,不論是下載的什麼版本的ireport,就是打不開,閃退。網上查了說不支持java8,卸載jdk1.8,換上1.7就行了。
三、ireport在pdf預覽時沒法顯示中文,如下是從網上找到的解決方法
<1> 首先設置報表對象有關字體屬性:
Font name:宋體(中文字體)
PDF font name:STSong-light
PDF Embeded:true(打鉤)
PDF Encoding:UniGB-UCS2-H(Chinese Siplified)
<2> 再加入iTextAsian.jar 包:
工具->選項->iReport->Classpath->Add JAR->「安裝目錄」\ireport\modules\ext\iTextAsian.jar->重啓ireport(必須重啓)
[參考:http://bolg.sina.com.cn/s/blog_8e6f1b330100ymmk.html]
四、ireport經常使用控件及其釋義
text field:放變量和表達式
static text:靜態文本
line:線條
Rectangle:矩形
Crosstab:交叉表
基本上這幾個控件就能夠作普通的報表了,在剛開始使用的時候還鬧了不少笑話,好比把靜態的中文放進了text field中,可是一直預覽不出來,後來才知道這種靜態文字就直接放在static text中就行了。
五、ireport經過html顯示圖片
顯示圖片的時候在Image Expression中加圖片Url路徑,Expression Class選擇java.net.Url,Is Lazy複選框選中。
六、ireport經過pdf顯示圖片
在pdf中顯示也須要加上IsLazy屬性,可是在jsp中顯示不能直接使用iframe獲取報表內容,這樣會報image read field異常,能夠嵌入一個jsp,而後在這個jsp中指向一個url,生成報表。
七、ireport以適應A4紙打印的極限大小(針對html解析在網頁上的字體太小的問題)
因爲html解析在網頁上的字體偏小,爲了儘量讓報表字體能在html頁面上正常顯示,就須要儘量能改變報表模板的頁面大小,設置方式:報表文件->屬性->大小:報表模板大小740*1400 ,jsp中對應iframe大小爲:760px*1080px。
八、ireport有效的表達式(舉幾個示例):
<1> "This is an expression"
<2> new Boolean(true)
<3> new Integer(3)
<4>(($P{myParam}.equals("S"))?"Yes":"No")
九、ireport交叉報表
數據若是稍微複雜一點,頗有可能就要用到交叉報表了,這裏列舉幾個交叉報表常用到的功能點
<1>求和,在measures中添加measure並編輯,以下圖
<2>表達式:$V{cnt1Measure}.equals( new BigDecimal(0))&&$V{symptomName}!=null&&$V{groupName}!=null
<3>運算:$V{cntMeasure}.subtract($V{cnt1Measure})
<4>百分比:new Double($V{cntMeasure}.doubleValue()/$V{cnt1Measure}.doubleValue()*100),也能夠不乘一百,但要在pattern中選擇百分比格式
<5>重要屬性:measure中的這個屬性,勾選上表示沒有值的顯示爲0,不然顯示空
十、若是在集成spring和ireport以後,出現java.lang.NullPointerException異常,則極可能是傳入到ireport的參數爲空,須要檢查參數。
11.如何動態設置band的高度
例如:在Pagefooter中添加了一些內容,這些內容只須要在第一頁顯示,其餘頁面不顯示,而且在其它頁面不能佔用空間,因此想在其它頁面時調整pagefooter的高度爲0.
解決辦法:
點擊Pagefooter,在屬性欄中有一個print when Expression屬性,在這個裏邊加上判斷就能夠了,若是沒記錯的話是$V{PAGE_NUMBER == 1},該屬性表示知足添加的時候,纔打印,不然隱藏