iReport+jasperReport之JFreeChart(图表报表)

系统 1628 0

 说完 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进去我们定义的那个变量即可:

public   void  afterReportInit()  throws  JRScriptletException  {
        
        
// 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 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;

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.view.JasperViewer;

/**
 * 
@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 " ;

        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();
        }

    }

}

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

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

iReport+jasperReport之JFreeChart(图表报表)
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定制复杂报表等。

iReport+jasperReport之JFreeChart(图表报表)


更多文章、技术交流、商务合作、联系博主

微信扫码或搜索:z360901061

微信扫一扫加我为好友

QQ号联系: 360901061

您的支持是博主写作最大的动力,如果您喜欢我的文章,感觉我的文章对您有帮助,请用微信扫描下面二维码支持博主2元、5元、10元、20元等您想捐的金额吧,狠狠点击下面给点支持吧,站长非常感激您!手机微信长按不能支付解决办法:请将微信支付二维码保存到相册,切换到微信,然后点击微信右上角扫一扫功能,选择支付二维码完成支付。

【本文对您有帮助就好】

您的支持是博主写作最大的动力,如果您喜欢我的文章,感觉我的文章对您有帮助,请用微信扫描上面二维码支持博主2元、5元、10元、自定义金额等您想捐的金额吧,站长会非常 感谢您的哦!!!

发表我的评论
最新评论 总共0条评论