说完iReport+jasperReport之scriptlet 下来就得看看图表了,jasperReport的图表完全借助于外部的绘图工具,charts和JFreeChart,其中JFreeChart是目前java最火的一个绘图工具了,还是引用JFreeChart简单使用 来实现我们的图表吧,说到这里澄清一下,本篇写的是jasperReport的图表,下来会专门写一篇关于jasperReport图片报表。
        jasperReport不重复发明车轮,在报表中是以一个变量的方式引入外部图表的,下来我们看看是怎么实现
的,新建一变量jfreeChart 如图:
【转】iReport+jasperReport之JFreeChart(图表报表)
        紧接着我们在报表上放置一图片控件,下来一篇我会详细说说图片问题,右击设置图片控件属性,如图所示:
【转】iReport+jasperReport之JFreeChart(图表报表)
net.sf.jasperreports.engine.JRRenderable为jasperReport一个专门用来处理图表问题公共接口,一切OK,现在就是这个变量怎么才能吧jfreechart传递到报表中呢,还记得上篇的scriptlet吗?
新建一JChartReportDemo.java类,继承自JRDefaultScriptlet,当然要实现那些方法不过大部分我们都是空实现而已,我们只要在afterReportInit方法内绘制图表然后在set进去我们定义的那个变量即可:

【转】iReport+jasperReport之JFreeChart(图表报表)public void afterReportInit() throws JRScriptletException {
【转】iReport+jasperReport之JFreeChart(图表报表)        
【转】iReport+jasperReport之JFreeChart(图表报表)        
//create pie chart dataset
【转】iReport+jasperReport之JFreeChart(图表报表)
        DefaultPieDataset dateset = new DefaultPieDataset();
【转】iReport+jasperReport之JFreeChart(图表报表)
【转】iReport+jasperReport之JFreeChart(图表报表)        
//set dataset value
【转】iReport+jasperReport之JFreeChart(图表报表)
        dateset.setValue("Chinese"108);
【转】iReport+jasperReport之JFreeChart(图表报表)        dateset.setValue(
"Math"110);
【转】iReport+jasperReport之JFreeChart(图表报表)        dateset.setValue(
"English"74);
【转】iReport+jasperReport之JFreeChart(图表报表)        dateset.setValue(
"Science Department"226);
【转】iReport+jasperReport之JFreeChart(图表报表)        
【转】iReport+jasperReport之JFreeChart(图表报表)        
/*
【转】iReport+jasperReport之JFreeChart(图表报表)         * create jfreeChart object
【转】iReport+jasperReport之JFreeChart(图表报表)         * the first parameter is pie chart title
【转】iReport+jasperReport之JFreeChart(图表报表)         * the secend parameter is dataset of pie chart
【转】iReport+jasperReport之JFreeChart(图表报表)         * the three parameter is boolean value,create chart note
【转】iReport+jasperReport之JFreeChart(图表报表)         * the four parameter is boolean value,it's a tooltip of move mouse on
【转】iReport+jasperReport之JFreeChart(图表报表)         * configure chart to generate URLs,It's get a PiePlot3D object
【转】iReport+jasperReport之JFreeChart(图表报表)         * 
【转】iReport+jasperReport之JFreeChart(图表报表)         
*/

【转】iReport+jasperReport之JFreeChart(图表报表)        JFreeChart freeChart 
= ChartFactory.createPieChart3D("Report Pie Chart", dateset, truetruefalse);
【转】iReport+jasperReport之JFreeChart(图表报表)        
【转】iReport+jasperReport之JFreeChart(图表报表)        PiePlot3D plot3D 
= (PiePlot3D) freeChart.getPlot();
【转】iReport+jasperReport之JFreeChart(图表报表)        plot3D.setNoDataMessage(
"No data to display");
【转】iReport+jasperReport之JFreeChart(图表报表)        
【转】iReport+jasperReport之JFreeChart(图表报表)        
// set variable "jfreeChart" value
【转】iReport+jasperReport之JFreeChart(图表报表)
        this.setVariableValue("jfreeChart"new JFreeChartRenderer(freeChart));
【转】iReport+jasperReport之JFreeChart(图表报表)    }

其中plot3D.setNoDataMessage("No data to display");这一句的意思是当没有显示出图表或是图表没有数据不显示时会显示我们定义的这些信息。

【转】iReport+jasperReport之JFreeChart(图表报表)this.setVariableValue("jfreeChart"new JFreeChartRenderer(freeChart));

这一句当然是set数据了,JFreeChartRenderer这个类是JRRenderable接口的间接实现,从API上看jasperReport已不推荐我们使用了。
    OK,我们test一下吧!JChartReportMain.java

【转】iReport+jasperReport之JFreeChart(图表报表)package org.bulktree.ireport.chart;
【转】iReport+jasperReport之JFreeChart(图表报表)
【转】iReport+jasperReport之JFreeChart(图表报表)
import java.io.File;
【转】iReport+jasperReport之JFreeChart(图表报表)
import java.io.FileInputStream;
【转】iReport+jasperReport之JFreeChart(图表报表)
import java.io.InputStream;
【转】iReport+jasperReport之JFreeChart(图表报表)
import java.util.HashMap;
【转】iReport+jasperReport之JFreeChart(图表报表)
【转】iReport+jasperReport之JFreeChart(图表报表)
import net.sf.jasperreports.engine.JREmptyDataSource;
【转】iReport+jasperReport之JFreeChart(图表报表)
import net.sf.jasperreports.engine.JasperCompileManager;
【转】iReport+jasperReport之JFreeChart(图表报表)
import net.sf.jasperreports.engine.JasperFillManager;
【转】iReport+jasperReport之JFreeChart(图表报表)
import net.sf.jasperreports.engine.JasperPrint;
【转】iReport+jasperReport之JFreeChart(图表报表)
import net.sf.jasperreports.engine.JasperReport;
【转】iReport+jasperReport之JFreeChart(图表报表)
import net.sf.jasperreports.view.JasperViewer;
【转】iReport+jasperReport之JFreeChart(图表报表)
【转】iReport+jasperReport之JFreeChart(图表报表)
/**
【转】iReport+jasperReport之JFreeChart(图表报表) * 
@author bulktree Email: [email protected]
【转】iReport+jasperReport之JFreeChart(图表报表) * @date Nov 28, 2008
【转】iReport+jasperReport之JFreeChart(图表报表) 
*/

【转】iReport+jasperReport之JFreeChart(图表报表)
public class JChartReportMain {
【转】iReport+jasperReport之JFreeChart(图表报表)    
public static void main(String[] args) {
【转】iReport+jasperReport之JFreeChart(图表报表)        String path 
= "D:/workspace/JFreeChartReportDemo.jrxml";
【转】iReport+jasperReport之JFreeChart(图表报表)
【转】iReport+jasperReport之JFreeChart(图表报表)        File file 
= new File(path);
【转】iReport+jasperReport之JFreeChart(图表报表)        InputStream in;
【转】iReport+jasperReport之JFreeChart(图表报表)        
try {
【转】iReport+jasperReport之JFreeChart(图表报表)            HashMap parameters 
= new HashMap();
【转】iReport+jasperReport之JFreeChart(图表报表)            parameters.put(
"ReportTitle""LAOSHULIN");
【转】iReport+jasperReport之JFreeChart(图表报表)            in 
= new FileInputStream(file);
【转】iReport+jasperReport之JFreeChart(图表报表)            JasperReport jasperReport 
= JasperCompileManager.compileReport(in);
【转】iReport+jasperReport之JFreeChart(图表报表)            JasperPrint jasperPrint 
= JasperFillManager.fillReport(jasperReport,
【转】iReport+jasperReport之JFreeChart(图表报表)                    parameters, 
new JREmptyDataSource());
【转】iReport+jasperReport之JFreeChart(图表报表)            JasperViewer viewer 
= new JasperViewer(jasperPrint);
【转】iReport+jasperReport之JFreeChart(图表报表)            viewer.setVisible(
true);
【转】iReport+jasperReport之JFreeChart(图表报表)        }
 catch (Exception e) {
【转】iReport+jasperReport之JFreeChart(图表报表)            e.printStackTrace();
【转】iReport+jasperReport之JFreeChart(图表报表)        }

【转】iReport+jasperReport之JFreeChart(图表报表)    }

【转】iReport+jasperReport之JFreeChart(图表报表)}

【转】iReport+jasperReport之JFreeChart(图表报表)

看过前面几篇应该对这个相当熟悉了吧!【转】iReport+jasperReport之JFreeChart(图表报表)

    iReport+jasperReport之JFreeChart(图表报表) 中提到图片控件,下面就看看jasperReport怎样处理图片吧!
新建一空白报表,分别画两个静态文本字段和图像控件上去
【转】iReport+jasperReport之JFreeChart(图表报表)
        新建两个参数分别为:imageParam和isShowImage,其中imageParam用来指定图片路径,isShowImage用来指定是否显示图片的。
    右击查看图片控件属性:分别设置图片参数和控制打印的表达式:
【转】iReport+jasperReport之JFreeChart(图表报表)

【转】iReport+jasperReport之JFreeChart(图表报表)
ok!这个就不用解释了吧!试试就知道啦

【转】iReport+jasperReport之JFreeChart(图表报表)JasperReport jasperReport = (JasperReport) JRLoader
【转】iReport+jasperReport之JFreeChart(图表报表)                    .loadObject(
"D:\\workspace\\AppletTest.jasper");
【转】iReport+jasperReport之JFreeChart(图表报表)            HashMap mapParam 
= new HashMap();
【转】iReport+jasperReport之JFreeChart(图表报表)            mapParam.put(
"imageParam""D:\\workspace\\eg_smile.gif");
【转】iReport+jasperReport之JFreeChart(图表报表)            
/*
【转】iReport+jasperReport之JFreeChart(图表报表)             * 此参数用来控制是否显示图片
【转】iReport+jasperReport之JFreeChart(图表报表)             * 第二个参数在报表中设置为String类型
【转】iReport+jasperReport之JFreeChart(图表报表)             
*/

【转】iReport+jasperReport之JFreeChart(图表报表)            mapParam.put(
"isShowImage""true");
【转】iReport+jasperReport之JFreeChart(图表报表)            
// 生成jasperPrint对象
【转】iReport+jasperReport之JFreeChart(图表报表)
            JasperPrint jasperPrint = JasperFillManager.fillReport(jasperReport,
【转】iReport+jasperReport之JFreeChart(图表报表)                    mapParam, 
new JREmptyDataSource());

    关于jasperReport图片处理很简单google一下很多啊,最近又开始忙了突然想起上篇遗留这个问题,所以抽空写下来,算是对上篇的一个补充吧!以后有时间会继续写下去,国际化、corsstab、web端打印、纯java定制复杂报表等。

相关文章:

  • 2021-06-05
  • 2021-11-07
  • 2021-06-20
  • 2021-05-26
  • 2021-09-12
  • 2021-08-22
  • 2022-01-10
  • 2022-12-23
猜你喜欢
  • 2021-09-03
  • 2022-01-05
  • 2022-12-23
  • 2022-12-23
  • 2021-06-11
  • 2021-07-21
  • 2022-12-23
相关资源
相似解决方案