Jasperreport基本介紹(Jasperreport與Ireport介紹)

ireport設(shè)計模板,導(dǎo)入jfreechat對象
JasperReport在用數(shù)據(jù)填充報表時,根據(jù)圖形報表的類型,生成對應(yīng)的JFreeChart的Dataset對象,再調(diào)用org.jfree.chart.ChartFactory產(chǎn)生出對應(yīng)的org.jfree.chart.JFreeChart對象。獲取到該對象后,JasperReport在exporter里建立一個java.awt.image.BufferedImage對象,
BufferedImage返回一個java.awt.Graphics2D對象,再將它傳入給之前JFreeChart對象,最后調(diào)用JFreeChart對象的draw方法將圖形輸出到BufferedImage對象,供給Exporter使用。
在介紹導(dǎo)入jfreechat對象之前,我們現(xiàn)在討論一個東西,這個東西很有用,叫scriptlet---腳本語言,聽過吧,我們把生成jfreechat對象的java代碼放在報表模板的腳本里,在編譯模板時,連同腳本一起編譯進(jìn)去。
jasperReport也是支持scriptlet的哦,先分析一下JasperReport的API吧!在填充報表時scriplet是一個非常有力的工具,
JRAbstractScriptlet.java位于net.sf.jasperreports.engine包下是一個抽象類
beforeReportInit()
afterReportInit()
beforePageInit()
afterPageInit()
beforeColumnInit()
afterColumnInit()
beforeGroupInit(String groujpame)
afterGroupInit(String groujpame)
看看這些名字就知道你能完成那些功能,這幾個方法是要求我們實現(xiàn)的,jasperReport給我們提供了一個實現(xiàn)類JRDefaultScriptlet.java,默認(rèn)的空實現(xiàn)了上面幾個方法,它只是很便利的為我們提供了所需的八個方法的空實現(xiàn)。我們寫自己的scriptlet時需要繼承JRDefaultScriptlet.java這個類實現(xiàn)自己的相應(yīng)的功能即可。
好了,我們現(xiàn)在就來為模板添加scriptlet
1) 在模板中,選中整個模板,如圖:
雙擊右邊的屬性窗口,將其中的內(nèi)容設(shè)置為如圖所示的內(nèi)容:
將“scriptlet class”設(shè)為您即將要制作的java類,這里我的java類名叫scriplet.ScriptletDemo。
其內(nèi)部代碼如下:
package scriplet;
import net.sf.jasperreports.engine.JRDefaultScriptlet;
import net.sf.jasperreports.engine.JRScriptletException;
import net.sf.jasperreports.renderers.JFreeChartRenderer;
import org.jfree.chart.ChartFactory;
import org.jfree.chart.JFreeChart;
import org.jfree.chart.plot.PiePlot;
import org.jfree.chart.plot.PiePlot3D;
import org.jfree.data.general.DefaultPieDataset;
public class ScriptletDemo extends JRDefaultScriptlet {
public void afterColumnInit() throws JRScriptletException {
System.out.println("**************************************afterColumnInit()**************************************");
}
@Override
public void afterDetailEval() throws JRScriptletException {
System.out.println("**************************************afterDetailEval()**************************************");
}
@Override
public void afterGroupInit(String groujpame) throws JRScriptletException {
System.out.println("**************************************afterDetailEval()**************************************");
}
@Override
public void afterPageInit() throws JRScriptletException {
System.out.println("**************************************afterPageInit()**************************************");
}
@Override
public void afterReportInit() throws JRScriptletException {
System.out.println("**************************************afterReportInit() begin**************************************");
//create pie chart dataset
DefaultPieDataset dateset = new DefaultPieDataset();
//set dataset value
dateset.setValue("Chinese", 108);
dateset.setValue("Math", 110);
dateset.setValue("English", 74);
dateset.setValue("Science Department", 226);
/**//*
* create jfreeChart object
* the first parameter is pie chart title
* the secend parameter is dataset of pie chart
* the three parameter is boolean value,create chart note
* the four parameter is boolean value,it's a tooltip of move mouse on
* configure chart to generate URLs,It's get a PiePlot3D object
*
*/
JFreeChart freeChart = ChartFactory.createPieChart3D("Report Pie Chart", dateset, true, false, false);
PiePlot pieplot = (PiePlot) freeChart.getPlot();
pieplot.setNoDataMessage("No data to display");
// set variable "jfreeChart" value
this.setVariableValue("jfreechart", new JFreeChartRenderer(freeChart));
System.out.println("**************************************afterReportInit() end**************************************");
}
@Override
public void beforeColumnInit() throws JRScriptletException {
System.out.println("**************************************beforeColumnInit()**************************************");
}
@Override
public void beforeDetailEval() throws JRScriptletException {
System.out.println("**************************************beforeDetailEval()**************************************");
}
@Override
public void beforeGroupInit(String groujpame) throws JRScriptletException {
System.out.println("**************************************beforeGroupInit()**************************************");
}
@Override
public void beforePageInit() throws JRScriptletException {
System.out.println("**************************************beforePageInit()**************************************");
}
@Override
public void beforeReportInit() throws JRScriptletException {
System.out.println("**************************************beforeReportInit()**************************************");
}
public String showInfor() throws JRScriptletException {
return "the is scriptlet scriptlet scriptlet the,sscriptlet report the is ascriptlet report this is a scriptlet report this is a scriptlet report";
}
}
2) 新建變量variable
如圖在選中“Variable”,右擊,點擊“添加variable”
將新建的variable屬性設(shè)置如下圖所示:
其中variable class設(shè)為“net.sf.jasperreports.engine.JRRenderable”,同志您可能要迷惑了,該選項的下拉菜單中沒有該選項啊,是的,的確沒有,但是你可以粘貼進(jìn)去。
3) 添加圖像,直接將組件中的“image”對象拖拽進(jìn)來,拖拽的時候,會有圖片選擇框,這個沒有關(guān)系,你可以選擇一個您喜歡的圖片,也可以直接取消,只不過是一個標(biāo)志,在模板中出現(xiàn)如下畫面:
是不是很丑呢,嘿嘿,我也覺得丑。
好了,下面來設(shè)置圖片的屬性,這個才是關(guān)鍵的。屬性如下圖:
重要的是image expression以及expression class,分別設(shè)為“$V{jfreechart}”、“net.sf.jasperreports.engine.JRRenderable”
至此模板設(shè)置成功。
4) 代碼測試
將上面設(shè)計好的模板保存為“E:/ireport/jfreechat.jrxml”
寫一段java代碼測試一下:
package test;
import java.io.File;
import java.io.FileInputStream;
import java.io.InputStream;
import java.util.HashMap;
import net.sf.jasperreports.engine.JREmptyDataSource;
import net.sf.jasperreports.engine.JasperCompileManager;
import net.sf.jasperreports.engine.JasperFillManager;
import net.sf.jasperreports.engine.JasperPrint;
import net.sf.jasperreports.engine.JasperReport;
import net.sf.jasperreports.engine.base.JRBaseVariable;
import net.sf.jasperreports.view.JasperViewer;
public class JChartReportMain {
/**
* Method name: main <BR>
* Description: main <BR>
* Remark: <BR>
* @param args void<BR>
*/
public static void main(String[] args) {
String path = "
File file = new File(path);
InputStream in;
try {
HashMap<String, String> parameters = new HashMap<String, String>();
parameters.put("ReportTitle", "LAOSHULIN");
in = new FileInputStream(file);
JasperReport jasperReport = JasperCompileManager.compileReport(in);
for(int i = 0; i<jasperReport.getVariables().length;i++ ){
JRBaseVariable jb = (JRBaseVariable)jasperReport.getVariables()[i];
System.out.println(jb.getValueClassName() + jb.getName());
}
JasperPrint jasperPrint = JasperFillManager.fillReport(jasperReport,
parameters, new JREmptyDataSource());
JasperViewer viewer = new JasperViewer(jasperPrint);
viewer.setVisible(true);
} catch (Exception e) {
e.printStackTrace();
}
}
}
運行結(jié)果如圖:
你看多棒啊,是不是覺得自己很牛叉??!
相關(guān)文章
- 本文檔主要講述的是ireport圖文教程;希望本文檔會給有需要的朋友帶來幫助;感興趣的朋友可以過來看看2017-03-13
- 本文檔主要講述的是iReport模板(Template) ;在iReport 中最有用的工具之一是使用向?qū)Ю胻emplates來創(chuàng)建報表,在本章里我們將解釋如何創(chuàng)建一個自定義的templates,如何把2017-01-13
iReport開發(fā)使用說明 中文WORD版 2.43MB
本文一下主要就ireport模板生成使用char組件和table的生成過程和開發(fā)過程中碰到的問題進(jìn)行說明(以Javabean為數(shù)據(jù)源,以sql為數(shù)據(jù)源的網(wǎng)上資料很多這里不做說明),使用的ire2016-08-26ireport3.7.3快速入門指南 中文PDF版 3.36MB
iReport 是一款開源組織的免費軟件,其主要作用是用來以可視化的方式設(shè)計、生成 JasperReport 所使用的報表格式文件,因為 JasperReport 本身并未提供很好的可視化報表設(shè)2016-08-16JasperReport+iReport報表開發(fā)手冊 中文PDF版 1.7MB
本書主要講解JasperReport+iReport報表開發(fā)手冊;有需要的朋友可以過來看看2016-08-11- 本書主要介紹了iReport是一個能夠創(chuàng)建復(fù)雜報表的開源項目,它100%使用Java語言編寫,是目前全球最為流行的開源報表設(shè)計器之一。 由于它豐富的圖形界面,你能夠很快的創(chuàng)建出2016-07-27