JasperReport| 关于JasperReport]报表图表高级定制

2024-06-09 12:32

本文主要是介绍JasperReport| 关于JasperReport]报表图表高级定制,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

一.前言

JasperReport是一个强大、灵活的报表生成工具,能够展示丰富的页面内容,并将之转换成PDF,HTML,或者XML格式。该库完全由Java写成,可以用于在各种Java应用程序,包括J2EE,Web应用程序中生成动态内容。


二.图表高级定制介绍

在JasperReport中允许用户实现JRChartCustomizer接口覆写customize方法来扩展对图表显示的高级定制,我将这个功能称之为JasperReport的一个扩展图表显示的插件.
在报表流程中,这个插件运行的时间是在报表填充时,重载的方法customize会被自动调用,用来实现定制报表的显示.

示例代码:

public class BESChartCustomizers extends JRAbstractChartCustomizer {public void customize(JFreeChart chart, JRChart jasperChart) {// TODO Auto-generated method stub}
}

注意:
在报表中,如果报表模板中的”parameter”,” variable”,”field”也需要被定制化,那么开发人员需要编写定制类继承类抽象类JRAbstractChartCustomizer,而不是通过实现接口JRChartCustomizer的方式来定制.因为抽象类JRAbstractChartCustomizer实现了接口JRChartCustomizer而且提供一系列对”parameter”,” variable”,”field”操作的方式.

示例代码:

public class BESChartCustomizers extends JRAbstractChartCustomizer {public void customize(JFreeChart chart, JRChart jasperChart) {Object parameterValue = getParameterValue("ParameterXXX");}
}

三.customize方法

customize方法是接口JRAbstractChartCustomizer 中定义的抽象方法,所有对齐实现的方法结构如下

    public void customize(JFreeChart chart, JRChart jasperChart) {// TODO Auto-generated method stub}

关于参数:
第一个参数是chart,提供所有对JFreeChart功能的支持,我们可以对它进行一些定制的修改达到我们需要现实的效果.运行时的实际类型是org.jfree.chart.JFreeChart

第二个参数是jasperChart,提供图表版本类型和一系列在定制化报表中可能需要的数据比如(TitleExpression,TitleFont),运行时的实际类型是net.sf.jasperreports.engine.fill.JRFillChart

如果只是定制渲染报表的显示效果,更过时候我们更加关注第一个参数,因为它是对图表渲染控制的JFreeChart实例.

方法调用时机:
报表填充的时候,图表被渲染之前调用


四.开发思路

针对不同类型的图表有不同的API,这个应该根据具体的业务需求来进行开发.首先我们通过判断运行时实际图表的类型来过滤出设计图表的类型,然后进行强转成实际Plot对象,然后再进行报表功能的自定义.

public class YvesChartCustomizer implements JRChartCustomizer {public void customize(JFreeChart chart, JRChart jasperChart) {if (chart.getPlot() instanceof CategoryPlot) {CategoryPlot plot = (CategoryPlot) chart.getPlot();if (plot != null) {if (plot.getRenderer() instanceof BarRenderer) {BarRenderer renderer = (BarRenderer) plot.getRenderer();renderer.setDrawBarOutline(true);for (int i = 0; i < plot.getDataset().getRowKeys().size(); i++) {renderer.setSeriesOutlinePaint(i, Color.BLACK);renderer.setSeriesOutlineStroke(i, new BasicStroke(3.0f));}}}}}}

效果图
clipboardpng


五.常用开发功能

1.获取模板中定义的parameter,variable,field

JRAbstractChartCustomizer中提供了一系列protected修饰的方法用于获取parameter,variable,field的值.

这里选取getParameterValue方法来举例说明,variable和field使用方法使用类似.

public class BESChartCustomizers extends JRAbstractChartCustomizer {public void customize(JFreeChart chart, JRChart jasperChart) {// 在设置报表参数时候,知道参数的类型,这里可以进行强制转换Object parameterValue = getParameterValue("ParameterName");}}

关于重载的方法getParameterValue的使用规则:
我们可以看到如下源码:

    protected final Object getParameterValue(String parameterName){return getParameterValue(parameterName, false);}protected final Object getParameterValue(String parameterName, boolean fromInputDataset){return (fromInputDataset ? chartDataset.getInputDataset() : filler.getMainDataset()).getParameterValue(parameterName);}

解释说明:
参数fromInputDataset 是设置参数是从输入的数据集中获取还是从报表数据集中获取.
fromInputDataset 为false也就是getParameterValue(String parameterName)的情况,参数是从报表数据集中获取参数.

仅仅当一个图表设计成使用子数据集作为数据输入的时候才需要使用方法getParameterValue(String parameterName, boolean fromInputDataset)通过参数fromInputDataset来指定获取参数的数据集具体是哪一个.fromInputDataset为true的时代表从子数据集中获取参数.

2.判断运行时实际图表的类型

方式一: 通过第二个参数JRChart jasperChart来判断
byte chartType = jasperChart.getChartType();

    public static final byte CHART_TYPE_AREA = 1;public static final byte CHART_TYPE_BAR3D = 2;public static final byte CHART_TYPE_BAR = 3;public static final byte CHART_TYPE_BUBBLE = 4;public static final byte CHART_TYPE_CANDLESTICK = 5;public static final byte CHART_TYPE_HIGHLOW = 6;public static final byte CHART_TYPE_LINE = 7;public static final byte CHART_TYPE_PIE3D = 8;public static final byte CHART_TYPE_PIE = 9;public static final byte CHART_TYPE_SCATTER = 10;public static final byte CHART_TYPE_STACKEDBAR3D = 11;public static final byte CHART_TYPE_STACKEDBAR = 12;public static final byte CHART_TYPE_XYAREA = 13;public static final byte CHART_TYPE_XYBAR = 14;public static final byte CHART_TYPE_XYLINE = 15;public static final byte CHART_TYPE_TIMESERIES = 16;public static final byte CHART_TYPE_METER = 17;public static final byte CHART_TYPE_THERMOMETER = 18;public static final byte CHART_TYPE_MULTI_AXIS = 19;public static final byte CHART_TYPE_STACKEDAREA = 20;public static final byte CHART_TYPE_GANTT = 21;

方式二: 通过第一个参数JFreeChart chart来判断(原理是根据JFreeChart里面的Plot实例类型来判断)
Plot plot = chart.getPlot();

CategoryPlot|_CombinedDomainCategoryPlot|_CombinedRangeCategoryPlot
CompassPlot
ContourPlot
DialPlot
FastScatterPlot
MeterPlot
MultiplePiePlot
PiePlot|_PiePlot3D|_RingPlot
PolarPlot  
SpiderWebPlot
ThermometerPlot
WaferMapPlot
XYPlot |_CombinedDomainXYPlot |_CombinedRangeXYPlot

这篇关于JasperReport| 关于JasperReport]报表图表高级定制的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/1045186

相关文章

Python中列表的高级索引技巧分享

《Python中列表的高级索引技巧分享》列表是Python中最常用的数据结构之一,它允许你存储多个元素,并且可以通过索引来访问这些元素,本文将带你深入了解Python列表的高级索引技巧,希望对... 目录1.基本索引2.切片3.负数索引切片4.步长5.多维列表6.列表解析7.切片赋值8.删除元素9.反转列表

正则表达式高级应用与性能优化记录

《正则表达式高级应用与性能优化记录》本文介绍了正则表达式的高级应用和性能优化技巧,包括文本拆分、合并、XML/HTML解析、数据分析、以及性能优化方法,通过这些技巧,可以更高效地利用正则表达式进行复杂... 目录第6章:正则表达式的高级应用6.1 模式匹配与文本处理6.1.1 文本拆分6.1.2 文本合并6

C#图表开发之Chart详解

《C#图表开发之Chart详解》C#中的Chart控件用于开发图表功能,具有Series和ChartArea两个重要属性,Series属性是SeriesCollection类型,包含多个Series对... 目录OverviChina编程ewSeries类总结OverviewC#中,开发图表功能的控件是Char

系统架构师考试学习笔记第三篇——架构设计高级知识(20)通信系统架构设计理论与实践

本章知识考点:         第20课时主要学习通信系统架构设计的理论和工作中的实践。根据新版考试大纲,本课时知识点会涉及案例分析题(25分),而在历年考试中,案例题对该部分内容的考查并不多,虽在综合知识选择题目中经常考查,但分值也不高。本课时内容侧重于对知识点的记忆和理解,按照以往的出题规律,通信系统架构设计基础知识点多来源于教材内的基础网络设备、网络架构和教材外最新时事热点技术。本课时知识

多线程解析报表

假如有这样一个需求,当我们需要解析一个Excel里多个sheet的数据时,可以考虑使用多线程,每个线程解析一个sheet里的数据,等到所有的sheet都解析完之后,程序需要提示解析完成。 Way1 join import java.time.LocalTime;public class Main {public static void main(String[] args) thro

Java基础回顾系列-第七天-高级编程之IO

Java基础回顾系列-第七天-高级编程之IO 文件操作字节流与字符流OutputStream字节输出流FileOutputStream InputStream字节输入流FileInputStream Writer字符输出流FileWriter Reader字符输入流字节流与字符流的区别转换流InputStreamReaderOutputStreamWriter 文件复制 字符编码内存操作流(

Java基础回顾系列-第五天-高级编程之API类库

Java基础回顾系列-第五天-高级编程之API类库 Java基础类库StringBufferStringBuilderStringCharSequence接口AutoCloseable接口RuntimeSystemCleaner对象克隆 数字操作类Math数学计算类Random随机数生成类BigInteger/BigDecimal大数字操作类 日期操作类DateSimpleDateForma

PDFQFZ高效定制:印章位置、大小随心所欲

前言 在科技编织的快节奏时代,我们不仅追求速度,更追求质量,让每一分努力都转化为生活的甜蜜果实——正是在这样的背景下,一款名为PDFQFZ-PDF的实用软件应运而生,它以其独特的功能和高效的处理能力,在PDF文档处理领域脱颖而出。 它的开发,源自于对现代办公效率提升的迫切需求。在数字化办公日益普及的今天,PDF作为一种跨平台、不易被篡改的文档格式,被广泛应用于合同签署、报告提交、证书打印等各个

Mysql高级篇(中)——索引介绍

Mysql高级篇(中)——索引介绍 一、索引本质二、索引优缺点三、索引分类(1)按数据结构分类(2)按功能分类(3) 按存储引擎分类(4) 按存储方式分类(5) 按使用方式分类 四、 索引基本语法(1)创建索引(2)查看索引(3)删除索引(4)ALTER 关键字创建/删除索引 五、适合创建索引的情况思考题 六、不适合创建索引的情况 一、索引本质 索引本质 是 一种数据结构,它用

BIRT报表script

1.隔行高亮显示 1. 在布局(Layout)中,选择Table-Detail的行。如下图:   2. 然后选择Script,打开脚本窗口顶部的方法列表并选择onPrepare,如图所示。 var count=0;   3. 最后打开脚本窗口顶部的方法列表并选择 onCreate,如图所示: count++; if (count % 2 != 0) {   style.se