java 复杂报表,Java报表比较之中国式报表(复杂报表)篇

Java报表工具,首先可以分成两大类:纯Java报表工具,和支持Java的报表工具。

支持Java的报表工具

我们所说的”支持”Java的报表工具.其实就是非Java的报表工具,但是可以在Java程序中调用.这样的产品很多,总的讲一大类是采用独立报表服务器的,如Crystal Report,Brio,Cognos,和勤等;另一大类是在前端有控件的,如数巨报表等。

纯Java报表工具

纯Java的报表工具,就是用java语言编写的报表工具,包括报表引擎、内核、设计器界面、操作等。主要的有:Style Report,润乾报表、Jasper Report,Birt,Fine Report,ireport,杰表等。

笔者只针对其中三款纯Java报表的中国式报表的处理做简单比较: 所谓中国式报表或者说复杂报表,其最根本的特征就是其格间关系的复杂度和布局扩展的灵活性,比起传统的以数据分组和聚合为基础的报表来说,中国式报表的布局和格间计算都复杂得多,所以很多传统的报表工具比如最著名的水晶报表在处理起这类复杂报表时就显得比较吃力。

Java报表工具--润乾:类似于Excel的可以支持任意行列扩展的报表处理模式。

优点:灵活性高。用户可以通过对每个单元格的脚本进行简单的计算和数据处理,然后通过单元格之间的关联,进行分组和汇总等工作。但和传统结构化报表设计不同的是报表表格不再有一个固定的格式,最后的结果更是通过单元格的扩展,好像搭积木似的拼接起来。此类处理办法是最完全的处理办法,国内其它厂家纷纷效仿。

缺点:学习和设计的难度和效率。由于这种报表设计方法本身建立在很严谨的数学模型的基础上,所以对于没有很强数学功底或者编程经验的普通人员来说,学习和掌握这种报表扩展和关联技术常常需要很长的时间。第二个难点是在报表设计完成之后,其他人来维护和理解困难也很大,这类报表写起来感觉功能十分强大,但读起来有点像天书。

Java报表工具--杰表:通过拖拽加拼接的操作结合结构化设计的报表处理模式。

优点: 依靠拖放式操作的的报表设计方式,以复杂报表模型,通过嵌入超级表格对象,将复杂报表的多层表头以及分组问题能瞬间解决。相对于润乾报表的学习难度和设计难度就低的多,并且操作过程简便,节约开发时间成本。

缺点:感觉功能限制还是比较大,尤其是对于中国式报表需要打印需求时,需要利用applet打印,需要在客户端安装十几MB 的JRE。当谈杰表提供100k左右的Jatoolsprinter控件,来改进打印,对于用户来说需要另付费。

Java报表工具—Style Report将结构化设计和行列任意扩展相结合的混合型报表处理模式。

优势:易用。用户对于大部分比较规则的传统表格,就可以通过拖拽直接建立报表而不需要学习复杂的脚本编程。而如果表格的复杂程度超过了一般拖拽等结构化设计所能够解决的难度,用户就可以通过与Excel相类似的任意行列扩展的方式来设计表格

缺点:报表表格的设计有两套机制,用户需要学习两种不同的设计方法。根据项目的具体需求和人员配置,这些优缺点哪个更重要就要自己判断了。

当然,对复杂表格的支持只是选择报表软件很多要求中的一点。如果是一次性的使用,我们可以只关注软件和当前需求的匹配,如果是准备长期使用的软件,就需要关注软件总体设计思维和它长期的发展方向。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/426497.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

java学习(61):适配器

定义一个动物的抽象类 public abstract class Animal { //定义一个抽象类的方法 public abstract void run(); //定义一个抽象类的构造器 public Animal(){ System.out.println(“抽象类的构造器”); } } 定义一个哺乳动物的抽象类 package com.zx; abstract class Mammal ext…

9个图片滑块动画

链接:https://www.html5tricks.com/9-jquery-image-slider.html 实例: 该实例下载链接:https://www.html5tricks.com/jquery-drag-image-slider.html 转载于:https://www.cnblogs.com/wanlibingfeng/p/9915376.html

php 02d,邻苯二甲酸二苯酯(DPhP)

邻苯二甲酸二苯酯(DPhP) CAS:84-62-8 规格:5G 货号:N-11798-5G邻苯二甲酸二苯酯(DPhP) CAS:84-62-8规格:10G 货号:N-11798-10G邻苯二甲酸二苯酯(DPhP)相关物质订购信息型号 …

java学习(62):java抽象类

定义一个抽象的食物方法 package com.zx; //定义一个食物的抽象方法 public abstract class Food { public abstract void taste(); } 定义食物面条 package com.zx; public class Flour extends Food{ public void taste() { System.out.println(“我可以做面条”); } } 定义食…

java学习(63):普通内部类

定义一个普通内部类 package com.zx; public class NotebookComputer01{ //定义一个非私有化的变量 public int num; public class CPU{ //类型 public String number; //运行速度 public long speed; public String counter(int num){ return Integer.toBinaryString(num); } …

php与其它语言组合开发,PHP相对于其它语言有哪些魅力?

PHP起源于自由软件,自由软件就是开放源代码软件,使用PHP进行web应用程序的开发具有以下优势。1、安全性高PHP是开源软件,每个人都可以看到所有的PHP源代码,程序代码与Apache编译在一起的方式也可以让它具有灵活的安全设定。PHP具有…

2018.11.6

1,了解HTML5 设计目的是为了在移动设备上支持多媒体相对之前的版本有哪些改进 认识语义元素和非语义元素 2,css:层叠式样式表是用来定义如何显示HTML元素的 写法:有 内联 内嵌 外部引用的方式 格式:样式名…

java学习(64):类访问私有内部内部类方法

package com.zx; public class NotebookComputer01{ //定义一个非私有化的变量 private int num; private CPU cpu; //方法呗私有化 private class CPU{//类型private String number;//运行速度private long speed;public void counter(int num){System.out.println(Integer.t…

Settings中电池选项-Android13

Settings中电池选项-Android13 1、设置中界面2、电池计算2.1 充电时间计算2.1.1 BatteryUsageStats获取2.1.2 BatteryStatsImpl计算 2.2 电池剩余使用时间2.2.1 Estimate获取2.2.2 BatteryStatsImpl计算 3、电池信息来源4、命令模拟* 日志 [电池]Android 9.0 电池未充电与充电字…

matlab如何找出最小的数据,读取数据并找出全部数据的最大值和最小值

各位老大,如何将以下txt文件中的数据比较大小,获得全部数据的最大值和最小值,并且知道是那个发射组("Shot Number"),我现在的问题时这些数据如何赋予数组,"Shot Point MaxNumber",29"Shot Number",…

JS 判断两个时间的大小(可自由选择精确度:天,小时,分钟,秒)

//可自由选择精确度 如:签到时间:2018-11-07 11:00:00 签退时间:2018-11-07 10:59:59 //判断时间先后 //统一格式 var a $("#fdtmInDate").val(); var aa a.split(T); if (aa.lengt…

java学习(65):类访问static修饰的内部类

public class NotebookComputer01{ //定义一个非私有化的变量 private static int num; private CPU cpu; //方法呗私有化 public static class CPU{ //类型 private String number; //运行速度 private long speed; public void counter(int num){ System.out.println(Integer…

php 函数 数组 难学,php 数组的常用函数

函数名功能array_combine()生成一个数组,用一个数组的值作为键名,另一个数组值作为值range()创建并返回一个包含指定范围的元素的数组。compact()创建一个由参数所带变量组成的数组array_fill()用给定的值生成数组array_chunk()把一个数组分割为新的数组块array_merge()把两个或…

iOS录音后播放声音变小的解决方法

目前需求是录音之后再播放出来。经常会出现播放声音变很小的情况。 解决方法: if (recorder.recording){  [recorder stop];} [[AVAudioSession sharedInstance] setCategory:AVAudioSessionCategoryPlayback withOptions:AVAudioSessionCategoryOptionDefaultToS…

java学习(66):局部类内方法访问

定义一个类 package com.zx; public class NotebookComputer {private int num; private CPU cpu;public String fromIntoBit(){ class CPU2{// 局部内部类public String countBit(int num){return Integer.toBinaryString(num);}}return (new CPU2().countBit(num));}/**** 普…

性能与优化的文章

Improving Your App’s Performance with PerfView Tools For Performance Analyzing WPA/WPR 微软WINDOS PERFORMANCE跟踪分析工具包 Windows Sysinternals——system utilities and technical information such as process dump,TCP View and so on 微软内置工具集&…

java学习(67):匿名内部类

package com.zx; /* 2 匿名内部类 3 就是内部类的简化写法。 4 5 前提:存在一个类或者接口 6 这里的类可以是具体类也可以是抽象类。 7 8 格式: 9 new 类名或者接口名(){ 10 重写方法; 11 …

oracle自动备份定时任务,Oracle数据库定时自动备份批处理代码(Windows)

这是最近写的一个Oracle数据库自动备份的批处理,经过测试正常运行,记录如下。包括两部分,逻辑备份和冷备份,如有不完整之处,还往看到本文的高手指导!注:这些内容是本人经过一番学习和多次测试调…

11.8学习笔记

封装一套自己的model类(增 删 查 改) select * from news where 1 :默认子查询查询所有的条件 ,如果有其他的条件可以覆盖默认查询所有的条件 mysqli_insert_id //返回添加的id mysqli_affected_rows();//返回删除的行数 例子: header("…

java学习(68):局部内部类

public class test113 {public void method(){final int age 23;class Localinner{public void method(){System.out.println("歌谣");System.out.println(age);}}new Localinner().method();}public static void main(String[] args) {test113 onew test113();o.met…