report9d

置顶随笔 #

[置顶]特大喜讯: 简表(JOR),国内唯一开源的java报表工具隆重启航!

简表(JOR),是一款开源的报表工具,完全java实现,核心代码来自于国内一线报表工具品牌杰表.2008 。

提起开源的报表工具,不能不说说jaspereport,jasperreport作为著名的开源报表工具,在java程序员中一直享有盛名。但由于其设计主要是针对西式的简单报表,设计起复杂的中式报表来,有点力不从心,所以,在国内的项目中能成功应用的例子并不多。JOR,作为能做复杂报表的开源报表工具,可以弥补jasperreport的不足。

下载地址:

http://www.jatools.com/jor

posted @ 2009-10-15 16:09 report9d 阅读(330) | 评论 (0)编辑 收藏

[置顶]原创olap引擎,纯java实现的

java实现的olap服务器,完全自主产权,纯java实现. cube架构,性能优,占用空间小.


 

分析模型设计器

 


posted @ 2009-09-25 18:47 report9d 阅读(359) | 评论 (0)编辑 收藏

[置顶]java报表图例大全

通过图片介绍java报表开发过程中,经常遇到的一些报表类型,统计图,及可视化的设计等.下面以 杰表.2008 为例介绍之.

 

一、支持报表类型

主从报表

套打报表

标签报表

分栏报表

计算比去年增长数

计算比去年同期增长数

补足空行的表格报表

多表合并.不同的数据集,做成一个相连的报表.

公式分组报表.按字段值,进行分类,分级

排行榜(Top N)报表

按汇总值大小排序的分组

多级分组

计算占比

显示排名

交叉表折页处理



层次不等的交叉表

行列并行分组的交叉表

多数据集的交叉表

静态表格中的公式计算

 

二、javabean数据源

使用java数组

假设项目组其他成员已经编写了一个Student类,如下图(a),该类定义四个方法,分别获取其姓名,年龄,性别,分数。由脚本构造一个包含三个Student对象的数组,如图(b),要求你做成下图(c)所示报表。

嵌套的java对象数据源

假设你有下图(a)所示的两个类Student和Person,你可以使用Student的getMembers()方法,取得该学生的家庭成员列表,每个家庭成员用一个Person对象表示,该对象包含与该学生的关系、姓名、性别等信息。

ResultSet数据源

指定sql查询一个报表


三、统计图与条码

插入统计图对象

设置统计图背景及立体效果

设置统计图输出格式为Flash

从统计图钻取另一个明细报表

你可以在统计图的某一个数据区放置一个超链接,使用户双击该区时,跳转到另一个子报表或网页,如,有一个柱形图,显示各产品的库存量,点击某个产品的柱面,就可以打开该产品相关的销售记录。

饼图

以时间为横轴的统计图

混合类型统计图

双轴统计图

创建甘特图

特殊统计图








创建条形码对象

日常生活中条形码随处可见,条形码用几何图形表示数据,并可以被专门设备识别。杰表可支持的13种条形码,分别是codabar、code39、code128、2of5、postnet、ean-128、ean-13、ean-8、upc-a、upc-e、royal-mail-cbc、pdf417、datamatrix,其中最后两种是二维条形码。

一维码   二维码  

设置图片背景

显示数据库字段上的图片


三、特殊的报表效果

冻结窗口效果

点击表头排序

使用超链接子报表

当你浏览报表时,可能需要了解更详细的信息,比如,我们在浏览一个订单列表时,希望了解该订单中各货物的销售数量。这时,你可以在订单列表中,加一个超链接,使用户在点击该链接后,可以跳转到显示该订单明细的一个报表。
你可以在主表中,点击订单ID,即可浏览该订单出售的所有货物明细,如下图所示:

热点提示

复杂汇总

颜色警告

斑马条

创建页小计、页累计报表

 

四、可视化设计器

设计参数表单

杰表.2008配备了一个可视化参数表单设计器,使用这个设计器,你可以不离开报表设计器环境,轻松制作查询表单。表单设计器有丰富的web控件,检验,事件侦听,css样式机制,你也可以使用javascript脚本扩展表单功能,同时,也实现了常用的多个下拉框联动功能。

可视化的报表设计器

报表预览面板

 

posted @ 2009-03-04 17:58 report9d 阅读(5822) | 评论 (5)编辑 收藏

[置顶]Java报表工具打印方案集锦

本文试图对市面上流行的纯java实现的web报表工具,jasperreport 、 stylereport 、杰表、润乾报表、快逸、finererport为例,分析各报表工具采用的web打印技术的异同、优劣、及对用户需求的适应性,供大家参考。

打印是报表工具的基本功能之一,有些报表工具就是从一个专门的打印程序中发展而来,如用友华表。因为想当然地简单,所以,在报表工具选型时用户常常忽略这个问题,特别是有些报表工具厂商,明知自己的打印方案在满足某些需求时,存在缺陷,但没有尽明确告知义务,而故意事先做好花里胡哨的有关打印方面的文档,欺骗客户。我曾不至一次地听说,有些开发商选用的报表工具,其打印功能不能满足需求,不得不另外找打印工具的事情,实在是吃尽苦头。

报表打印在c/s时代,确实非常简单,vb,vc,Delphi,pb,都有很好用的打印api,有的甚至用报表控件方式,搞定打印更是分分秒的事情,但今天是b/s的天下,报表都是在网页浏览器中显示,但当今的浏览器打印功能一般非常弱(谁让你叫他“浏览”器呢?“浏览”就是让你用眼睛看,“打印”属于兼职),要做到精确分页打印,几乎不可能,所以当前的报表工具,一般不会让你使用浏览器的打印菜单来打印报表,都有自己的解决方案,这下可好,各报表工具厂商由是乎,八仙过海,各显神通,各家都说自己的好,对于web打印了解不深的客户,总有雾里看花的感觉。

归纳来说,当今java报表工具采用的打印技术不外乎三类:Applet打印、导出成pdf/excel打印、控件打印。用户选用的重点是:尽量选择插件小的打印软件,因为文件小意味着安装迅速,启动速度快。插件大小除了插件本身的大小外,还需要考虑支持软件的大小,如有些插件很小,支持软件却很大。

Applet打印

本文开始处提及的报表工具,除finereport外都支持Applet打印。之所以多数厂商支持Applet方式打印,因为Appletjava实现,与java后台、java报表设计器的兼容性较好,代码容易维护,实现也方便。然而,厂商省事,用户就得多事。Applet方式打印,用户最多的抱怨是需要安装jre(而当前的操作系统,一般不是默认安装的),虽然说,多数厂商已经做到可以自动安装jre,但对于10M(JRE1.415MJRE1.516M))的安装,这意味着用户需要较长时间的等待。

另一个问题是Applet配置复杂,使用不稳定。1995年,正是因为给人们无穷的视觉和脑力震荡的Applet ,使人们认识了java,认识了Games Gosling。所以在b/s早期,人们为了展现html的富客户效果,Applet是唯一之选。但现如今,Applet已经是昨日黄花,早已被ajaxflex取代,是什么原因?战略层面的东西,我也不太说得清楚,但作为程序员,经过几番折腾后,也不会愿意再用Applet了。如经常莫名其妙地出现“小应用程序,… notinited”的错误,还得清理ie缓存,对于Applet打印,还需要设置jre的安全策略等等。不是靠终端用户能完成的,这就必须额外地增加开发商的服务成本。

Applet打印,启动速度慢。Applet打印原理是,当你点击打印按钮时,浏览器启动AppletApplet根据参数访问后台页面信息,后台返回页面,Applet加载页面后,调用jre的打印服务进行打印。这就意味着,每次打印都需要调用后台服务程序,就必然影响打印的响应速度。

Applet打印很安全,言下之意是ActiveX打印不安全,这是采用Applet打印的厂商津津乐道的,实际上,这是一个伪命题。AppletActiveX都是浏览器的插件,我们当然不希望下载插件后,该插件可以为所欲为,比如,删除你磁盘里的文件,或启动一个木马,从这点来说,Applet确实比ActiveX安全,因为Applet是在一个受限的环境里运行,而ActiveX是不受限的。所以,当你访问一个陌生的网站时,出于安全考虑,你可能会允许下载运行Applet,而阻止ActiveX。但当用户访问自己的网站系统,时,这种担心就没必要,这好比,当你与陌生人打交道时,很自然地会问自己,这人可信嘛?但如果你与家里人打交道,这个问题就不成其为问题了。

Applet打印,除了可以设置打印机,设置纸张页面大小等常规打印功能外,往往也集成与打印不相关的功能,比如,打印前修改(有人说,是为了做假帐方便,中国特色,国产报表工具一般都具备,jasperreport,stylereport不支持),按行分页,自由定位,这些本来由设计器完成的功能,挪到打印功能上来,来掩盖上面指出的Applet的种种不足。实际上,Applet功能强弱完全取决于Applet的大小,有些报表厂商甚至用Appletweb start 的方式,提供所谓的基于web的报表设计,前提是下载 40Mjar包,实际上,这种方案远非一般意义上的纯web 的报表设计,完全是混淆概念。作为用户最希望常规的,他们熟悉的打印功能,不需要不相关的,理解困难的打印功能。

PDF/EXCEL打印

Pdf打印方式,就是用户点击打印后,浏览器会自动弹出adobe reader,再利用adobe的打印按钮进行打印,由于国外adobe reader安装非常普及,国外的java报表工具多提供这种打印方案,比如 stylereportjasperreport,国内报表工具finereport也采用这种方式(让人不解)pdf方式打印的好处是能做到精确打印,而且报表预览与打印一气呵成。但不足是需要在客户的机子里,事先安装有adobe reader,作为程序员,一般不太会有问题,因为程序员可能经常要浏览一些pdf文档,多数已经装了adobe reader,但国内的终端用户,大多不知pdf是何物,更谈不上安装。

Pdf打印的另一个问题是必须弹出adobe reader,不能做到无预览打印,这可能由于pdf缺少相应api的缘故吧。

轻量级的ActiveX打印

这里之所以强调“轻量级”,目的是与传统意义上的ActiveX报表相区别。ActiveX技术可以说是报表工具家族里的没落贵族,c/s时代,报表工具一般都被做成控件形式,水晶报表就是如此,在b/s时代,报表工具里仍然能看到ActiveX的身影,但风光大不如从前,如数巨,明宇,用友华表,inforeport。用ActiveX实现报表的不足,在网上你能轻易找到,在此不再详述。ActiveX 报表虽深受诟责,但从打印功能来说,却都是近乎完美,处理得却非常好,非常稳定。

既然,ActiveX打印是长处,能不能扬长避短地使用ActiveX技术?有人提出这样的问题。于是,有些厂商,比如杰表,采用了浏览时用html,打印时用插件的方式。这种方案的需要解决的问题是,ActiveX打印控件,不能太大,否则报表工具成了ActiveX报表了。

Applet相比,轻量级ActiveX打印具有以下优势:

1.       下载时间短,(大小是Applet1/250);

2.       本地打印,打印时,不需要访问后台服务程序,不占用服务器资源;

3.       启动速度快,由于控件小,且本地打印,所以打印速度是优于以上两中打印方案,打印速度与你点击浏览器打印菜单相差无几。

采用轻量级的ActiveX打印的不足是,只有ie 5.5 及以上版本支持,其他版本的浏览器不支持。好在ie5.5浏览器已非常普及,在用户那里应该不是大问题。

杰表采用的打印方案,用一个jatoolsPrinter的控件,大小是60k,是经过数字签名的。这个打印控件采用ie特有的打印技术(templateprinter)实现打印功能,支持打印,预览,边距设置,重复打印,批量打印功能。

目前,jatoolsPrinter已经从杰表中独立出来,任何报表工具或第三方软件都利用该控件,实现web打印,推出至今,免费加收费用户上万。

下表总结三种方式的采用者及优劣对比,对于ie5.5客户来说,我们推荐使用ActiveX打印方案.

报表厂商列表

jasperreport 
 

Stylereport 

杰表 

润乾 

快逸 

finererport 

posted @ 2008-08-08 15:52 report9d 阅读(4514) | 评论 (0)编辑 收藏

[置顶]java报表工具中,如何可视化地设计报表参数表单

当我们使用报表工具,设计完一张报表时,我们同时必须为该报表设计一个查询条件表单,使得用户在浏览报表时,可以在网页中选取查询条件。在过去,设计表单是件令人沮丧的事情,这不仅要求你在报表设计器与开发环境之间来回切换,而且在设计表单时,还需要考虑系统的其他布局元素的关系,苦燥,繁琐,没有挑战性。更进一步,如果项目要求最终用户能够自己设计报表,天呐,他们可能喜欢用报表设计工具来设计报表,但绝对不愿意用网页设计工具来设计表单。

当然,也有一些报表工具,实现了参数表单的自动化,比如,按一定规则顺序排列参数项,但这种自动化,用户很难按其需求进行排版布局,所以不能彻底解决用户的问题。

现在,杰表.2008配备了一个可视化参数表单设计器,使用这个设计器,你可以不离开报表设计器环境,轻松制作查询表单。表单设计器有丰富的web控件,检验,事件侦听,css样式机制,你也可以使用javascript脚本扩展表单功能,同时,也实现了常用的多个下拉框联动功能。

杰表.2008表单设计器不仅是表单设计工具的替代品,更重要的是表单设计器解决了报表设计容易,部署难的问题。我们希望,利用集成的表单设计器,你只要在设计器中设计好参数表单,并将报表模板文件和表单模板文件置于某个位置,你的用户就可以在浏览器中,按条件浏览这张报表了,这中间不需要你再做任何其他事情。

有关表单设计的更多内容,点击这里



posted @ 2008-07-29 12:09 report9d 阅读(563) | 评论 (0)编辑 收藏

[置顶]java复杂报表模型与实现方法

作为java程序员,大家可能都听说过,或用过birt, 据说,现在birt的东家actual,正式入驻中国市场,联想到前些天杰表.2008的推出,今年,注定是国内的报表软件市场不平静的一年。

birt的最大好处是开源,不足是水土不服,做起复杂报表来不方便,复杂报表主要说的是行上,列上有多个并列分组的交叉报表,国产报表工具大都关注复杂报表需求,而洋品牌的报表软件工具,如jasperreport,crystalreport,这方面关注不够,所以做起复杂报表来很吃力。

做什么事情必须先有观念,然后,付诸实现,做软件则更进一步,必须将这些观念结构化,即模型化。对复杂报表需求的处理,国内报表软件厂商时下,用得最多的是类excel报表模型,即以单元格为中心报表模型,最早产品化的,是用友华表,当然它不属于java阵营的,java阵营的现在有润乾,finereport,杰表4.0,类excel报表模型大家都觉得,功能很强,但最大问题是,学习起来不方便,不知道你在大学里,微积分考多少,如果你90分以下,那你最好别碰那东西。

杰表.2008采用的复杂报表模型,相对来说,比excel模型容易得多,比如下图是一个典型的复杂报表,该报表用于按不同分类方法统计培训学员人数,该表列上存在多个分组(培训类型、累计培训时间、参加培训总人数、培训内容、渠道类型),分组之间不存在嵌套关系的,即分组是并列的。行上存在一个按学员行政级别为依据的分组。


复杂报表的复杂性在于结构复杂,比如上图报表列上存在多个并列分组,不仅如此,行上也可能存在多个并行分组;不仅有多个并列分组,也可能各并列分组的嵌套数不一样;不仅各个分组来源于同一个数据集,也可能来自多个不同的数据集。

尽管如此,我们仍然可以把复杂的交叉报表,看作下图所示的结构,表格包括A,B,C,D四部分,其中B,C是两个表格,决定了交叉表的结构。B表格非常特殊,第一,该表格向右生长的,而一般我们常见向下生长,如C 表格。第二,该表格有多个并列分组,而一般报表工具中,表格对象最外围只能有一个分组,尽管其嵌套数是可以多重的。


杰表.2008以上述结构分析为基础,引入了超级表格对象,该对象就是通过嵌入两个扩展方向不同的子表格,行头表和列头表,来完成交叉报表的结构性问题。两表均可以有任意多的并列分组,每个分组可以有层次不同的嵌套。下图(a)是设计面板中的超级表格对象,下图(b)是该对象子部件的层次关系,其中对象3就是行头表,对象4就是列头表。


杰表的超级表格对象结合杰表的DOM报表数据模型,可以演化出任意复杂的多源,多组交叉表,下面试举几例说明之。(点击进入查看)

列上并行分组交叉表
  层次不等的交叉表
  行列并行分组的交叉表
  多数据集的交叉表
  计算比去年增长数
  计算比去年同期增长数
  计算占比
  显示排名
  按照汇总值排序的交叉报表
  交叉表折页处理
  交叉表居中

posted @ 2008-06-10 16:15 report9d 阅读(2999) | 评论 (0)编辑 收藏

[置顶]使用java对象作报表数据源

一般java报表工具,允许用户使用java类来作动态数据来源,但这个类必须符合工具要求的接口,如JasperReport的JRDataSource接口,杰表的BeanDataset接口。这种方式确实为用户提供了一种在报表工具中使用java对象的途径,但同时,因为需要实现特定接口,额外地增加了编码工作。

有没有一种不需要实现接口直接使用java对象的办法呢?杰表.2008提供了这样的方法。

假设你有下图(a)所示的两个类Student和Person,你可以使用Student的getMembers()方法,取得该学生的家庭成员列表,每个家庭成员用一个Person对象表示,该对象包含与该学生的关系,姓名,性别等信息。注意,这两个类没有实现任何额外的接口。


如果你有一个Student对象,那么,在杰表.2008中,你就可以做成如上图(b)所示报表,上半部分列出该学生的本人信息,下面显示该学生的家庭成员表。更多内容请参照:

使用java对象作数据源 
使用java数组 
java数组节点访问 
List,iterator数据源 
嵌套的java对象数据源 
ResultSet数据源 
TableModel数据源
 

posted @ 2008-05-29 10:07 report9d 阅读(318) | 评论 (0)编辑 收藏

[置顶]多动鼠标少动脑,java报表工具的简约之美

近年来,纯java的类excel报表工具异军突起,在国内报表工具市场中取得了初步成功。目前市场上主流的纯javaexcel的报表工具有润乾、杰表4.0finereport等。


excel报表工具之所以受国人追捧,一方面是契合了国内用户喜欢用格子做报表的习惯,另一方面,由于扩展的类excel报表模型的推出,比如润乾的非线性多源分片模型,杰表4.0的超级cell模型,满足了用户编制复杂报表的需求。


然而,通过这几年的应用,类
excel报表工具的问题也大量暴露出来,主要集中在易用性和性能两方面,根本原因在于类excel报表工具模型本身的不合理。用类excel报表模型去解决复杂报表需求,就像用十字锣丝刀去开启一字锣丝一样,虽然勉强能用,但终归不是问题的正解。


现在,因为复杂报表需求概念被炒得火热,几乎每一个报表工具厂商都声称自己能做中国式的复杂报表,但你若追问一句,你们的报表工具好使嘛?需要多长时间能掌握?我估计百分之百哑口。


选用报表工具的目的是为了提高开发报表模块的效率,如果报表工具学习起来困难,不易掌握,那么,虽然报表工具给你带来了设计报表的便利,但也同时给你制造了不必要的学习障碍。在
it企业人才流动频繁的背景下,降低报表工具的学习难度,就等于降低项目的人工成本和风险,所以报表工具易用性是考量报表工具的一个重要指标。往极端了说,如果一个报表工具,需要有一个爱因斯坦的大脑才能使用,这样的报表工具不用也罢。


用户是上帝,当用户有很多报表工具产品可供选择之时,用户对我们报表厂商提出了更高的要求,他们不会再满足于问你能不能做,还会问你上手够不够快。面对如此新的市场要求,有些报表工具厂商没有引起足够重视,仍然延续着营销亢奋,研发萎靡的做法,一个概念卖到低,不能不令人忧虑。杰表团队坚信,一个好的产品只有持续地倾听市场的声音,并体现在我们提供的产品与服务上,才能取得持续的成功。


2003年,融合类excel模型的杰表推出市场,到2006年春,决定全面重写杰表框架,停止一切主动的市场营销活动。为什么要重写框架呢?我们需要找到一种更易使用的报表模型。因为经过多年的市场检验,我们意识到类excel报表报表模型,不管是杰表4.0的超级cell模型还是润乾的多源分片模型,都不能很好解决复杂报表问题。


excel模型不易学习的根本原因是,没有一个可视化的数据模型。所以你需要在非线性、多源分片、轴这些豪华概念的面前,费尽脑力。另外,采用单元格即数据的做法,完全违反了MVC的软件哲学,使之报表工具的灵活性大受限制。总之,非线性多源分片技术确实很数学,但很不哲学。


20085月,经过持续两年的潜心研发,杰表.2008正式面市。杰表.2008采用可视化的dom驱动报表模型,采用MVC架构,从根本上解决复杂报表工具学习难的问题。下图是杰表.2008设计器中展现的可视化报表模型。更多内容参见 www.jatools.com

 

posted @ 2008-05-20 09:17 report9d 阅读(1912) | 评论 (5)编辑 收藏

2009年10月15日 #

特大喜讯: 简表(JOR),国内唯一开源的java报表工具隆重启航!

简表(JOR),是一款开源的报表工具,完全java实现,核心代码来自于国内一线报表工具品牌杰表.2008 。

提起开源的报表工具,不能不说说jaspereport,jasperreport作为著名的开源报表工具,在java程序员中一直享有盛名。但由于其设计主要是针对西式的简单报表,设计起复杂的中式报表来,有点力不从心,所以,在国内的项目中能成功应用的例子并不多。JOR,作为能做复杂报表的开源报表工具,可以弥补jasperreport的不足。

下载地址:

http://www.jatools.com/jor

posted @ 2009-10-15 16:09 report9d 阅读(330) | 评论 (0)编辑 收藏

2009年9月25日 #

原创olap引擎,纯java实现的

java实现的olap服务器,完全自主产权,纯java实现. cube架构,性能优,占用空间小.


 

分析模型设计器

 


posted @ 2009-09-25 18:47 report9d 阅读(359) | 评论 (0)编辑 收藏

2009年9月2日 #

换个角度来晒晒杰表.2008

闲话少说,晒几个杰表.2008的ppt截图,希望有助于大家对报表工具的选择.













 


posted @ 2009-09-02 13:02 report9d 阅读(939) | 评论 (0)编辑 收藏

2009年6月22日 #

jni 学习笔记一(原创)

jni 类型

简单类型 primitive type

jni有8大基本类型, jboolean,jbyte,jchar,jshort,jint,jfloat,jlong,,jdouble
8位,16位,32位,64位,各两个(在win32平台中,其他平台不一定)

java类型与c++数据类型的映射关系是如下:
jboolean <--> unsigned char
jchar   <--> unsigned short
jshort  <--> short
jfloat  <-->  float
jdouble <--> double

这是在 jni.h里定义的,为啥缺了jbyte,jint,jlong的映射呢?
答案是:sun在实现java虚拟机时,考虑到虚拟机可能运行在不同的操作系统和不同的硬件平台上,比如,硬件平台有8位,16位,32位,64位的区别,为了更好地与硬件平台匹配,发挥最好的性能,将一些类型抽取出来,允许在不同的平台上有不同的表示(位数),我们姑且称之为硬件相关类型,jbyte,jint,jlong就属于硬件相关类型。

举列来说,如果你在32位机上,jint表示的是32bit的,而在64位机上,一般是64位即8个字节表示,也就是说,jbyte,jint,jlong在sun的虚拟机上,位数是不定的。

那位数不一定,怎么编译?   sun的方法是增加一个机器相关的jni_md.h文件,这里的md是machine dependent(机器相关)的意思。在win32平台中,这三个类型的定义如下:

typedef long jint;
typedef __int64 jlong;
typedef signed char jbyte;

由此可见,在win32平台中,jint是32位的,jlong是64位,jbyte是8位的.

指针类型  reference type
reference 准确的译法,应该是引用,但引用实际上就是指针的一种伪装,只不过更接近人的思维罢了。如果说,"爸爸的爸爸"是一种指针概念,那"爷爷"就是一种引用概念。

jni把类型分为两大类,一个是简单类型,一个是引用类型,下面是引用类型



从上图似乎可以看出,所有引用类型,都从jobject 继承,jarray又被几个简单类型的数组继承.
但实际上这个对象层次,是一种假象,跟我们c++与java中看到的对象层次是有区别的,jobject与LPSTR(字符串指针),本质上没有区别:
1.  jobject, jclass,jstring,...等,所有对象,是指针,不是对象本身,而指针是不存在继承关系的,“小狗”的指针,从“动物”的指针继承,这种说法不成立。
2. jobject,jclass,jstring 是一种指针,不存在任何操作方法,好比你不能 LPCSTR->strlen(),在jni中,也没有提供任何  jobject->something() 这种调用。
3. 对这些对象的操作必须依赖于 env对象的操作方法.

看一下,jni.h中对 这些引用对象的定义

class _jobject {};
class _jclass : public _jobject {};
class _jstring : public _jobject {};
...
typedef _jobject *jobject;     //_jobject才是类定义,jobject 是否_jobject的指针
typedef _jclass *jclass;
typedef _jstring *jstring;
...

在这些下划线对象中,有什么成员变量,成员函数呢? 答案是你什么也不能得到,比如,你想知道,_jstring对象的字符串长度,你不能 _jstring.length(),得到,而必须env->GetStringLength(jstring) 来得到.

只给你一个对象的指针,不告诉你里面有什么,这样做的好处是实现与接口分离。

jvalue 这个类型,是一个union ,感觉很想com里的variant对象,不过没有指明类型的field
 typedef union jvalue {
    jboolean z;
    jbyte    b;
    jchar    c;
    jshort   s;
    jint     i;
    jlong    j;
    jfloat   f;
    jdouble  d;
    jobject  l;
} jvalue;
我现在还不知道,这个数据类型,什么时候用.

jfieldID是一个java类成员变量的id,这个id在c++中,实际是一个指向结构的一个指针, jmethodID  是成员方法的id,  不管是成员变量还是方法的id,在java类被加载进虚拟机后,是保持不变的。所以从考虑性能计,可以使用静态缓存的方法,先取出来,后面会讲到

字符串类型
这里说的字符串类型,是jni中char * 的格式,不是指 jstring/_jstring,jni也使用 char * 字符串指针,
好下所示:
    jmethodID GetMethodID (JNIEnv *env, jclass clazz, const char *name, const char *sig);

但需要注意的是,这里的name,必须是UTF-8的编码,utf-8对于ascii字符,只占一个字节,最多不超过3个字节

posted @ 2009-06-22 10:12 report9d 阅读(2259) | 评论 (1)编辑 收藏

2009年3月4日 #

java报表图例大全

通过图片介绍java报表开发过程中,经常遇到的一些报表类型,统计图,及可视化的设计等.下面以 杰表.2008 为例介绍之.

 

一、支持报表类型

主从报表

套打报表

标签报表

分栏报表

计算比去年增长数

计算比去年同期增长数

补足空行的表格报表

多表合并.不同的数据集,做成一个相连的报表.

公式分组报表.按字段值,进行分类,分级

排行榜(Top N)报表

按汇总值大小排序的分组

多级分组

计算占比

显示排名

交叉表折页处理



层次不等的交叉表

行列并行分组的交叉表

多数据集的交叉表

静态表格中的公式计算

 

二、javabean数据源

使用java数组

假设项目组其他成员已经编写了一个Student类,如下图(a),该类定义四个方法,分别获取其姓名,年龄,性别,分数。由脚本构造一个包含三个Student对象的数组,如图(b),要求你做成下图(c)所示报表。

嵌套的java对象数据源

假设你有下图(a)所示的两个类Student和Person,你可以使用Student的getMembers()方法,取得该学生的家庭成员列表,每个家庭成员用一个Person对象表示,该对象包含与该学生的关系、姓名、性别等信息。

ResultSet数据源

指定sql查询一个报表


三、统计图与条码

插入统计图对象

设置统计图背景及立体效果

设置统计图输出格式为Flash

从统计图钻取另一个明细报表

你可以在统计图的某一个数据区放置一个超链接,使用户双击该区时,跳转到另一个子报表或网页,如,有一个柱形图,显示各产品的库存量,点击某个产品的柱面,就可以打开该产品相关的销售记录。

饼图

以时间为横轴的统计图

混合类型统计图

双轴统计图

创建甘特图

特殊统计图








创建条形码对象

日常生活中条形码随处可见,条形码用几何图形表示数据,并可以被专门设备识别。杰表可支持的13种条形码,分别是codabar、code39、code128、2of5、postnet、ean-128、ean-13、ean-8、upc-a、upc-e、royal-mail-cbc、pdf417、datamatrix,其中最后两种是二维条形码。

一维码   二维码  

设置图片背景

显示数据库字段上的图片


三、特殊的报表效果

冻结窗口效果

点击表头排序

使用超链接子报表

当你浏览报表时,可能需要了解更详细的信息,比如,我们在浏览一个订单列表时,希望了解该订单中各货物的销售数量。这时,你可以在订单列表中,加一个超链接,使用户在点击该链接后,可以跳转到显示该订单明细的一个报表。
你可以在主表中,点击订单ID,即可浏览该订单出售的所有货物明细,如下图所示:

热点提示

复杂汇总

颜色警告

斑马条

创建页小计、页累计报表

 

四、可视化设计器

设计参数表单

杰表.2008配备了一个可视化参数表单设计器,使用这个设计器,你可以不离开报表设计器环境,轻松制作查询表单。表单设计器有丰富的web控件,检验,事件侦听,css样式机制,你也可以使用javascript脚本扩展表单功能,同时,也实现了常用的多个下拉框联动功能。

可视化的报表设计器

报表预览面板

 

posted @ 2009-03-04 17:58 report9d 阅读(5822) | 评论 (5)编辑 收藏

2008年8月8日 #

Java报表工具打印方案集锦

本文试图对市面上流行的纯java实现的web报表工具,jasperreport 、 stylereport 、杰表、润乾报表、快逸、finererport为例,分析各报表工具采用的web打印技术的异同、优劣、及对用户需求的适应性,供大家参考。

打印是报表工具的基本功能之一,有些报表工具就是从一个专门的打印程序中发展而来,如用友华表。因为想当然地简单,所以,在报表工具选型时用户常常忽略这个问题,特别是有些报表工具厂商,明知自己的打印方案在满足某些需求时,存在缺陷,但没有尽明确告知义务,而故意事先做好花里胡哨的有关打印方面的文档,欺骗客户。我曾不至一次地听说,有些开发商选用的报表工具,其打印功能不能满足需求,不得不另外找打印工具的事情,实在是吃尽苦头。

报表打印在c/s时代,确实非常简单,vb,vc,Delphi,pb,都有很好用的打印api,有的甚至用报表控件方式,搞定打印更是分分秒的事情,但今天是b/s的天下,报表都是在网页浏览器中显示,但当今的浏览器打印功能一般非常弱(谁让你叫他“浏览”器呢?“浏览”就是让你用眼睛看,“打印”属于兼职),要做到精确分页打印,几乎不可能,所以当前的报表工具,一般不会让你使用浏览器的打印菜单来打印报表,都有自己的解决方案,这下可好,各报表工具厂商由是乎,八仙过海,各显神通,各家都说自己的好,对于web打印了解不深的客户,总有雾里看花的感觉。

归纳来说,当今java报表工具采用的打印技术不外乎三类:Applet打印、导出成pdf/excel打印、控件打印。用户选用的重点是:尽量选择插件小的打印软件,因为文件小意味着安装迅速,启动速度快。插件大小除了插件本身的大小外,还需要考虑支持软件的大小,如有些插件很小,支持软件却很大。

Applet打印

本文开始处提及的报表工具,除finereport外都支持Applet打印。之所以多数厂商支持Applet方式打印,因为Appletjava实现,与java后台、java报表设计器的兼容性较好,代码容易维护,实现也方便。然而,厂商省事,用户就得多事。Applet方式打印,用户最多的抱怨是需要安装jre(而当前的操作系统,一般不是默认安装的),虽然说,多数厂商已经做到可以自动安装jre,但对于10M(JRE1.415MJRE1.516M))的安装,这意味着用户需要较长时间的等待。

另一个问题是Applet配置复杂,使用不稳定。1995年,正是因为给人们无穷的视觉和脑力震荡的Applet ,使人们认识了java,认识了Games Gosling。所以在b/s早期,人们为了展现html的富客户效果,Applet是唯一之选。但现如今,Applet已经是昨日黄花,早已被ajaxflex取代,是什么原因?战略层面的东西,我也不太说得清楚,但作为程序员,经过几番折腾后,也不会愿意再用Applet了。如经常莫名其妙地出现“小应用程序,… notinited”的错误,还得清理ie缓存,对于Applet打印,还需要设置jre的安全策略等等。不是靠终端用户能完成的,这就必须额外地增加开发商的服务成本。

Applet打印,启动速度慢。Applet打印原理是,当你点击打印按钮时,浏览器启动AppletApplet根据参数访问后台页面信息,后台返回页面,Applet加载页面后,调用jre的打印服务进行打印。这就意味着,每次打印都需要调用后台服务程序,就必然影响打印的响应速度。

Applet打印很安全,言下之意是ActiveX打印不安全,这是采用Applet打印的厂商津津乐道的,实际上,这是一个伪命题。AppletActiveX都是浏览器的插件,我们当然不希望下载插件后,该插件可以为所欲为,比如,删除你磁盘里的文件,或启动一个木马,从这点来说,Applet确实比ActiveX安全,因为Applet是在一个受限的环境里运行,而ActiveX是不受限的。所以,当你访问一个陌生的网站时,出于安全考虑,你可能会允许下载运行Applet,而阻止ActiveX。但当用户访问自己的网站系统,时,这种担心就没必要,这好比,当你与陌生人打交道时,很自然地会问自己,这人可信嘛?但如果你与家里人打交道,这个问题就不成其为问题了。

Applet打印,除了可以设置打印机,设置纸张页面大小等常规打印功能外,往往也集成与打印不相关的功能,比如,打印前修改(有人说,是为了做假帐方便,中国特色,国产报表工具一般都具备,jasperreport,stylereport不支持),按行分页,自由定位,这些本来由设计器完成的功能,挪到打印功能上来,来掩盖上面指出的Applet的种种不足。实际上,Applet功能强弱完全取决于Applet的大小,有些报表厂商甚至用Appletweb start 的方式,提供所谓的基于web的报表设计,前提是下载 40Mjar包,实际上,这种方案远非一般意义上的纯web 的报表设计,完全是混淆概念。作为用户最希望常规的,他们熟悉的打印功能,不需要不相关的,理解困难的打印功能。

PDF/EXCEL打印

Pdf打印方式,就是用户点击打印后,浏览器会自动弹出adobe reader,再利用adobe的打印按钮进行打印,由于国外adobe reader安装非常普及,国外的java报表工具多提供这种打印方案,比如 stylereportjasperreport,国内报表工具finereport也采用这种方式(让人不解)pdf方式打印的好处是能做到精确打印,而且报表预览与打印一气呵成。但不足是需要在客户的机子里,事先安装有adobe reader,作为程序员,一般不太会有问题,因为程序员可能经常要浏览一些pdf文档,多数已经装了adobe reader,但国内的终端用户,大多不知pdf是何物,更谈不上安装。

Pdf打印的另一个问题是必须弹出adobe reader,不能做到无预览打印,这可能由于pdf缺少相应api的缘故吧。

轻量级的ActiveX打印

这里之所以强调“轻量级”,目的是与传统意义上的ActiveX报表相区别。ActiveX技术可以说是报表工具家族里的没落贵族,c/s时代,报表工具一般都被做成控件形式,水晶报表就是如此,在b/s时代,报表工具里仍然能看到ActiveX的身影,但风光大不如从前,如数巨,明宇,用友华表,inforeport。用ActiveX实现报表的不足,在网上你能轻易找到,在此不再详述。ActiveX 报表虽深受诟责,但从打印功能来说,却都是近乎完美,处理得却非常好,非常稳定。

既然,ActiveX打印是长处,能不能扬长避短地使用ActiveX技术?有人提出这样的问题。于是,有些厂商,比如杰表,采用了浏览时用html,打印时用插件的方式。这种方案的需要解决的问题是,ActiveX打印控件,不能太大,否则报表工具成了ActiveX报表了。

Applet相比,轻量级ActiveX打印具有以下优势:

1.       下载时间短,(大小是Applet1/250);

2.       本地打印,打印时,不需要访问后台服务程序,不占用服务器资源;

3.       启动速度快,由于控件小,且本地打印,所以打印速度是优于以上两中打印方案,打印速度与你点击浏览器打印菜单相差无几。

采用轻量级的ActiveX打印的不足是,只有ie 5.5 及以上版本支持,其他版本的浏览器不支持。好在ie5.5浏览器已非常普及,在用户那里应该不是大问题。

杰表采用的打印方案,用一个jatoolsPrinter的控件,大小是60k,是经过数字签名的。这个打印控件采用ie特有的打印技术(templateprinter)实现打印功能,支持打印,预览,边距设置,重复打印,批量打印功能。

目前,jatoolsPrinter已经从杰表中独立出来,任何报表工具或第三方软件都利用该控件,实现web打印,推出至今,免费加收费用户上万。

下表总结三种方式的采用者及优劣对比,对于ie5.5客户来说,我们推荐使用ActiveX打印方案.

报表厂商列表

jasperreport 
 

Stylereport 

杰表 

润乾 

快逸 

finererport 

posted @ 2008-08-08 15:52 report9d 阅读(4514) | 评论 (0)编辑 收藏

2008年7月29日 #

java报表工具中,如何可视化地设计报表参数表单

当我们使用报表工具,设计完一张报表时,我们同时必须为该报表设计一个查询条件表单,使得用户在浏览报表时,可以在网页中选取查询条件。在过去,设计表单是件令人沮丧的事情,这不仅要求你在报表设计器与开发环境之间来回切换,而且在设计表单时,还需要考虑系统的其他布局元素的关系,苦燥,繁琐,没有挑战性。更进一步,如果项目要求最终用户能够自己设计报表,天呐,他们可能喜欢用报表设计工具来设计报表,但绝对不愿意用网页设计工具来设计表单。

当然,也有一些报表工具,实现了参数表单的自动化,比如,按一定规则顺序排列参数项,但这种自动化,用户很难按其需求进行排版布局,所以不能彻底解决用户的问题。

现在,杰表.2008配备了一个可视化参数表单设计器,使用这个设计器,你可以不离开报表设计器环境,轻松制作查询表单。表单设计器有丰富的web控件,检验,事件侦听,css样式机制,你也可以使用javascript脚本扩展表单功能,同时,也实现了常用的多个下拉框联动功能。

杰表.2008表单设计器不仅是表单设计工具的替代品,更重要的是表单设计器解决了报表设计容易,部署难的问题。我们希望,利用集成的表单设计器,你只要在设计器中设计好参数表单,并将报表模板文件和表单模板文件置于某个位置,你的用户就可以在浏览器中,按条件浏览这张报表了,这中间不需要你再做任何其他事情。

有关表单设计的更多内容,点击这里



posted @ 2008-07-29 12:09 report9d 阅读(563) | 评论 (0)编辑 收藏

2008年6月10日 #

java复杂报表模型与实现方法

作为java程序员,大家可能都听说过,或用过birt, 据说,现在birt的东家actual,正式入驻中国市场,联想到前些天杰表.2008的推出,今年,注定是国内的报表软件市场不平静的一年。

birt的最大好处是开源,不足是水土不服,做起复杂报表来不方便,复杂报表主要说的是行上,列上有多个并列分组的交叉报表,国产报表工具大都关注复杂报表需求,而洋品牌的报表软件工具,如jasperreport,crystalreport,这方面关注不够,所以做起复杂报表来很吃力。

做什么事情必须先有观念,然后,付诸实现,做软件则更进一步,必须将这些观念结构化,即模型化。对复杂报表需求的处理,国内报表软件厂商时下,用得最多的是类excel报表模型,即以单元格为中心报表模型,最早产品化的,是用友华表,当然它不属于java阵营的,java阵营的现在有润乾,finereport,杰表4.0,类excel报表模型大家都觉得,功能很强,但最大问题是,学习起来不方便,不知道你在大学里,微积分考多少,如果你90分以下,那你最好别碰那东西。

杰表.2008采用的复杂报表模型,相对来说,比excel模型容易得多,比如下图是一个典型的复杂报表,该报表用于按不同分类方法统计培训学员人数,该表列上存在多个分组(培训类型、累计培训时间、参加培训总人数、培训内容、渠道类型),分组之间不存在嵌套关系的,即分组是并列的。行上存在一个按学员行政级别为依据的分组。


复杂报表的复杂性在于结构复杂,比如上图报表列上存在多个并列分组,不仅如此,行上也可能存在多个并行分组;不仅有多个并列分组,也可能各并列分组的嵌套数不一样;不仅各个分组来源于同一个数据集,也可能来自多个不同的数据集。

尽管如此,我们仍然可以把复杂的交叉报表,看作下图所示的结构,表格包括A,B,C,D四部分,其中B,C是两个表格,决定了交叉表的结构。B表格非常特殊,第一,该表格向右生长的,而一般我们常见向下生长,如C 表格。第二,该表格有多个并列分组,而一般报表工具中,表格对象最外围只能有一个分组,尽管其嵌套数是可以多重的。


杰表.2008以上述结构分析为基础,引入了超级表格对象,该对象就是通过嵌入两个扩展方向不同的子表格,行头表和列头表,来完成交叉报表的结构性问题。两表均可以有任意多的并列分组,每个分组可以有层次不同的嵌套。下图(a)是设计面板中的超级表格对象,下图(b)是该对象子部件的层次关系,其中对象3就是行头表,对象4就是列头表。


杰表的超级表格对象结合杰表的DOM报表数据模型,可以演化出任意复杂的多源,多组交叉表,下面试举几例说明之。(点击进入查看)

列上并行分组交叉表
  层次不等的交叉表
  行列并行分组的交叉表
  多数据集的交叉表
  计算比去年增长数
  计算比去年同期增长数
  计算占比
  显示排名
  按照汇总值排序的交叉报表
  交叉表折页处理
  交叉表居中

posted @ 2008-06-10 16:15 report9d 阅读(2999) | 评论 (0)编辑 收藏

2008年5月29日 #

使用java对象作报表数据源

一般java报表工具,允许用户使用java类来作动态数据来源,但这个类必须符合工具要求的接口,如JasperReport的JRDataSource接口,杰表的BeanDataset接口。这种方式确实为用户提供了一种在报表工具中使用java对象的途径,但同时,因为需要实现特定接口,额外地增加了编码工作。

有没有一种不需要实现接口直接使用java对象的办法呢?杰表.2008提供了这样的方法。

假设你有下图(a)所示的两个类Student和Person,你可以使用Student的getMembers()方法,取得该学生的家庭成员列表,每个家庭成员用一个Person对象表示,该对象包含与该学生的关系,姓名,性别等信息。注意,这两个类没有实现任何额外的接口。


如果你有一个Student对象,那么,在杰表.2008中,你就可以做成如上图(b)所示报表,上半部分列出该学生的本人信息,下面显示该学生的家庭成员表。更多内容请参照:

使用java对象作数据源 
使用java数组 
java数组节点访问 
List,iterator数据源 
嵌套的java对象数据源 
ResultSet数据源 
TableModel数据源
 

posted @ 2008-05-29 10:07 report9d 阅读(318) | 评论 (0)编辑 收藏

2008年5月20日 #

多动鼠标少动脑,java报表工具的简约之美

近年来,纯java的类excel报表工具异军突起,在国内报表工具市场中取得了初步成功。目前市场上主流的纯javaexcel的报表工具有润乾、杰表4.0finereport等。


excel报表工具之所以受国人追捧,一方面是契合了国内用户喜欢用格子做报表的习惯,另一方面,由于扩展的类excel报表模型的推出,比如润乾的非线性多源分片模型,杰表4.0的超级cell模型,满足了用户编制复杂报表的需求。


然而,通过这几年的应用,类
excel报表工具的问题也大量暴露出来,主要集中在易用性和性能两方面,根本原因在于类excel报表工具模型本身的不合理。用类excel报表模型去解决复杂报表需求,就像用十字锣丝刀去开启一字锣丝一样,虽然勉强能用,但终归不是问题的正解。


现在,因为复杂报表需求概念被炒得火热,几乎每一个报表工具厂商都声称自己能做中国式的复杂报表,但你若追问一句,你们的报表工具好使嘛?需要多长时间能掌握?我估计百分之百哑口。


选用报表工具的目的是为了提高开发报表模块的效率,如果报表工具学习起来困难,不易掌握,那么,虽然报表工具给你带来了设计报表的便利,但也同时给你制造了不必要的学习障碍。在
it企业人才流动频繁的背景下,降低报表工具的学习难度,就等于降低项目的人工成本和风险,所以报表工具易用性是考量报表工具的一个重要指标。往极端了说,如果一个报表工具,需要有一个爱因斯坦的大脑才能使用,这样的报表工具不用也罢。


用户是上帝,当用户有很多报表工具产品可供选择之时,用户对我们报表厂商提出了更高的要求,他们不会再满足于问你能不能做,还会问你上手够不够快。面对如此新的市场要求,有些报表工具厂商没有引起足够重视,仍然延续着营销亢奋,研发萎靡的做法,一个概念卖到低,不能不令人忧虑。杰表团队坚信,一个好的产品只有持续地倾听市场的声音,并体现在我们提供的产品与服务上,才能取得持续的成功。


2003年,融合类excel模型的杰表推出市场,到2006年春,决定全面重写杰表框架,停止一切主动的市场营销活动。为什么要重写框架呢?我们需要找到一种更易使用的报表模型。因为经过多年的市场检验,我们意识到类excel报表报表模型,不管是杰表4.0的超级cell模型还是润乾的多源分片模型,都不能很好解决复杂报表问题。


excel模型不易学习的根本原因是,没有一个可视化的数据模型。所以你需要在非线性、多源分片、轴这些豪华概念的面前,费尽脑力。另外,采用单元格即数据的做法,完全违反了MVC的软件哲学,使之报表工具的灵活性大受限制。总之,非线性多源分片技术确实很数学,但很不哲学。


20085月,经过持续两年的潜心研发,杰表.2008正式面市。杰表.2008采用可视化的dom驱动报表模型,采用MVC架构,从根本上解决复杂报表工具学习难的问题。下图是杰表.2008设计器中展现的可视化报表模型。更多内容参见 www.jatools.com

 

posted @ 2008-05-20 09:17 report9d 阅读(1912) | 评论 (5)编辑 收藏

仅列出标题