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中你不知道的gzip高级用法分享

《Python中你不知道的gzip高级用法分享》在当今大数据时代,数据存储和传输成本已成为每个开发者必须考虑的问题,Python内置的gzip模块提供了一种简单高效的解决方案,下面小编就来和大家详细讲... 目录前言:为什么数据压缩如此重要1. gzip 模块基础介绍2. 基本压缩与解压缩操作2.1 压缩文

Java中的for循环高级用法

《Java中的for循环高级用法》本文系统解析Java中传统、增强型for循环、StreamAPI及并行流的实现原理与性能差异,并通过大量代码示例展示实际开发中的最佳实践,感兴趣的朋友一起看看吧... 目录前言一、基础篇:传统for循环1.1 标准语法结构1.2 典型应用场景二、进阶篇:增强型for循环2.

使用Python进行GRPC和Dubbo协议的高级测试

《使用Python进行GRPC和Dubbo协议的高级测试》GRPC(GoogleRemoteProcedureCall)是一种高性能、开源的远程过程调用(RPC)框架,Dubbo是一种高性能的分布式服... 目录01 GRPC测试安装gRPC编写.proto文件实现服务02 Dubbo测试1. 安装Dubb

苹果macOS 26 Tahoe主题功能大升级:可定制图标/高亮文本/文件夹颜色

《苹果macOS26Tahoe主题功能大升级:可定制图标/高亮文本/文件夹颜色》在整体系统设计方面,macOS26采用了全新的玻璃质感视觉风格,应用于Dock栏、应用图标以及桌面小部件等多个界面... 科技媒体 MACRumors 昨日(6 月 13 日)发布博文,报道称在 macOS 26 Tahoe 中

Python数据分析与可视化的全面指南(从数据清洗到图表呈现)

《Python数据分析与可视化的全面指南(从数据清洗到图表呈现)》Python是数据分析与可视化领域中最受欢迎的编程语言之一,凭借其丰富的库和工具,Python能够帮助我们快速处理、分析数据并生成高质... 目录一、数据采集与初步探索二、数据清洗的七种武器1. 缺失值处理策略2. 异常值检测与修正3. 数据

Apache 高级配置实战之从连接保持到日志分析的完整指南

《Apache高级配置实战之从连接保持到日志分析的完整指南》本文带你从连接保持优化开始,一路走到访问控制和日志管理,最后用AWStats来分析网站数据,对Apache配置日志分析相关知识感兴趣的朋友... 目录Apache 高级配置实战:从连接保持到日志分析的完整指南前言 一、Apache 连接保持 - 性

mysql中的group by高级用法详解

《mysql中的groupby高级用法详解》MySQL中的GROUPBY是数据聚合分析的核心功能,主要用于将结果集按指定列分组,并结合聚合函数进行统计计算,本文给大家介绍mysql中的groupby... 目录一、基本语法与核心功能二、基础用法示例1. 单列分组统计2. 多列组合分组3. 与WHERE结合使

使用Vue-ECharts实现数据可视化图表功能

《使用Vue-ECharts实现数据可视化图表功能》在前端开发中,经常会遇到需要展示数据可视化的需求,比如柱状图、折线图、饼图等,这类需求不仅要求我们准确地将数据呈现出来,还需要兼顾美观与交互体验,所... 目录前言为什么选择 vue-ECharts?1. 基于 ECharts,功能强大2. 更符合 Vue

PyTorch高级特性与性能优化方式

《PyTorch高级特性与性能优化方式》:本文主要介绍PyTorch高级特性与性能优化方式,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录一、自动化机制1.自动微分机制2.动态计算图二、性能优化1.内存管理2.GPU加速3.多GPU训练三、分布式训练1.分布式数据

Spring Boot集成SLF4j从基础到高级实践(最新推荐)

《SpringBoot集成SLF4j从基础到高级实践(最新推荐)》SLF4j(SimpleLoggingFacadeforJava)是一个日志门面(Facade),不是具体的日志实现,这篇文章主要介... 目录一、日志框架概述与SLF4j简介1.1 为什么需要日志框架1.2 主流日志框架对比1.3 SLF4