说完iReport+jasperReport之scriptlet 下来就得看看图表了,jasperReport的图表完全借助于外部的绘图工具,charts和JFreeChart,其中JFreeChart是目前java最火的一个绘图工具了,还是引用JFreeChart简单使用 来实现我们的图表吧,说到这里澄清一下,本篇写的是jasperReport的图表,下来会专门写一篇关于jasperReport图片报表。
jasperReport不重复发明车轮,在报表中是以一个变量的方式引入外部图表的,下来我们看看是怎么实现
的,新建一变量jfreeChart 如图:
![](https://i-blog.csdnimg.cn/blog_migrate/21de82a574adea25275638347468e8f1.jpeg)
紧接着我们在报表上放置一图片控件,下来一篇我会详细说说图片问题,右击设置图片控件属性,如图所示:
![](https://i-blog.csdnimg.cn/blog_migrate/cdf580dc50c43b1c1a7c79672f2a7a13.jpeg)
net.sf.jasperreports.engine.JRRenderable为jasperReport一个专门用来处理图表问题公共接口,一切OK,现在就是这个变量怎么才能吧jfreechart传递到报表中呢,还记得上篇的scriptlet吗?
新建一JChartReportDemo.java类,继承自JRDefaultScriptlet,当然要实现那些方法不过大部分我们都是空实现而已,我们只要在afterReportInit方法内绘制图表然后在set进去我们定义的那个变量即可:
public
void
afterReportInit()
throws
JRScriptletException
{
//create pie chart dataset
DefaultPieDataset dateset = new DefaultPieDataset();
![](https://i-blog.csdnimg.cn/blog_migrate/d18c02628675d0a2c816449d98bda930.gif)
//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, true, false);
PiePlot3D plot3D = (PiePlot3D) freeChart.getPlot();
plot3D.setNoDataMessage("No data to display");
// set variable "jfreeChart" value
this.setVariableValue("jfreeChart", new JFreeChartRenderer(freeChart));
}
其中plot3D.setNoDataMessage("No data to display");这一句的意思是当没有显示出图表或是图表没有数据不显示时会显示我们定义的这些信息。
this
.setVariableValue(
"
jfreeChart
"
,
new
JFreeChartRenderer(freeChart));
这一句当然是set数据了,JFreeChartRenderer这个类是JRRenderable接口的间接实现,从API上看jasperReport已不推荐我们使用了。
OK,我们test一下吧!JChartReportMain.java
package
org.bulktree.ireport.chart;
![](https://i-blog.csdnimg.cn/blog_migrate/4f1150b881333f12a311ae9ef34da474.gif)
import
java.io.File;
import
java.io.FileInputStream;
import
java.io.InputStream;
import
java.util.HashMap;
![](https://i-blog.csdnimg.cn/blog_migrate/4f1150b881333f12a311ae9ef34da474.gif)
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.view.JasperViewer;
![](https://i-blog.csdnimg.cn/blog_migrate/4f1150b881333f12a311ae9ef34da474.gif)
/**
* @author bulktree Email: laoshulin@gmail.com
* @date Nov 28, 2008
*/
public
class
JChartReportMain
{
public static void main(String[] args) {
String path = "D:/workspace/JFreeChartReportDemo.jrxml";
![](https://i-blog.csdnimg.cn/blog_migrate/d18c02628675d0a2c816449d98bda930.gif)
File file = new File(path);
InputStream in;
try {
HashMap parameters = new HashMap();
parameters.put("ReportTitle", "LAOSHULIN");
in = new FileInputStream(file);
JasperReport jasperReport = JasperCompileManager.compileReport(in);
JasperPrint jasperPrint = JasperFillManager.fillReport(jasperReport,
parameters, new JREmptyDataSource());
JasperViewer viewer = new JasperViewer(jasperPrint);
viewer.setVisible(true);
} catch (Exception e) {
e.printStackTrace();
}
}
}
看过前面几篇应该对这个相当熟悉了吧!![](https://i-blog.csdnimg.cn/blog_migrate/75545fffa645ab7a7caf0b774671ce7b.jpeg)
iReport+jasperReport之JFreeChart(图表报表) 中提到图片控件,下面就看看jasperReport怎样处理图片吧!
新建一空白报表,分别画两个静态文本字段和图像控件上去
![](https://i-blog.csdnimg.cn/blog_migrate/dbfdc353075c12dde76fa1879d4179cf.jpeg)
新建两个参数分别为:imageParam和isShowImage,其中imageParam用来指定图片路径,isShowImage用来指定是否显示图片的。
右击查看图片控件属性:分别设置图片参数和控制打印的表达式:
![](https://i-blog.csdnimg.cn/blog_migrate/8e2184dffb781666b9c230f65f7f0384.jpeg)
![](https://i-blog.csdnimg.cn/blog_migrate/e9e71b5bd9c8eaa76278d62b6764dda9.jpeg)
ok!这个就不用解释了吧!试试就知道啦
JasperReport jasperReport
=
(JasperReport) JRLoader
.loadObject(
"
D:\\workspace\\AppletTest.jasper
"
);
HashMap mapParam
=
new
HashMap();
mapParam.put(
"
imageParam
"
,
"
D:\\workspace\\eg_smile.gif
"
);
/*
* 此参数用来控制是否显示图片
* 第二个参数在报表中设置为String类型
*/
mapParam.put(
"
isShowImage
"
,
"
true
"
);
//
生成jasperPrint对象
JasperPrint jasperPrint
=
JasperFillManager.fillReport(jasperReport,
mapParam,
new
JREmptyDataSource());
关于jasperReport图片处理很简单google一下很多啊,最近又开始忙了突然想起上篇遗留这个问题,所以抽空写下来,算是对上篇的一个补充吧!以后有时间会继续写下去,国际化、corsstab、web端打印、纯java定制复杂报表等。