﻿<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:trackback="http://madskills.com/public/xml/rss/module/trackback/" xmlns:wfw="http://wellformedweb.org/CommentAPI/" xmlns:slash="http://purl.org/rss/1.0/modules/slash/"><channel><title>语源科技BlogJava-report9d</title><link>http://www.blogjava.net/report9d/</link><description /><language>zh-cn</language><lastBuildDate>Mon, 27 Apr 2026 05:31:59 GMT</lastBuildDate><pubDate>Mon, 27 Apr 2026 05:31:59 GMT</pubDate><ttl>60</ttl><item><title>特大喜讯： 简表(JOR)，国内唯一开源的java报表工具隆重启航! </title><link>http://www.blogjava.net/report9d/archive/2009/10/15/298407.html</link><dc:creator>report9d</dc:creator><author>report9d</author><pubDate>Thu, 15 Oct 2009 08:09:00 GMT</pubDate><guid>http://www.blogjava.net/report9d/archive/2009/10/15/298407.html</guid><wfw:comment>http://www.blogjava.net/report9d/comments/298407.html</wfw:comment><comments>http://www.blogjava.net/report9d/archive/2009/10/15/298407.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/report9d/comments/commentRss/298407.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/report9d/services/trackbacks/298407.html</trackback:ping><description><![CDATA[<font face="arial,sans-serif" color="#000000">简表(JOR)，是一款开源的报表工具，完全java实现，核心代码来自于国内一线报表工具品牌杰表.2008&nbsp;。<br />
<br />
提起开源的报表工具，不能不说说jaspereport，jasperreport作为著名的开源报表工具，在java程序员中一直享有盛名。但由于其设计主要是针对西式的简单报表，设计起复杂的中式报表来，有点力不从心，所以，在国内的项目中能成功应用的例子并不多。JOR，作为能做复杂报表的开源报表工具，可以弥补jasperreport的不足。<br />
<br />
下载地址:<br />
<br />
<a class="l2" href="http://www.jatools.com/jor" target="_blank">http://www.jatools.com/jor</a><br />
<br />
</font>
 <img src ="http://www.blogjava.net/report9d/aggbug/298407.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/report9d/" target="_blank">report9d</a> 2009-10-15 16:09 <a href="http://www.blogjava.net/report9d/archive/2009/10/15/298407.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>原创olap引擎,纯java实现的 </title><link>http://www.blogjava.net/report9d/archive/2009/09/25/296461.html</link><dc:creator>report9d</dc:creator><author>report9d</author><pubDate>Fri, 25 Sep 2009 10:47:00 GMT</pubDate><guid>http://www.blogjava.net/report9d/archive/2009/09/25/296461.html</guid><wfw:comment>http://www.blogjava.net/report9d/comments/296461.html</wfw:comment><comments>http://www.blogjava.net/report9d/archive/2009/09/25/296461.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/report9d/comments/commentRss/296461.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/report9d/services/trackbacks/296461.html</trackback:ping><description><![CDATA[<font face="arial,sans-serif" color="#000000">java实现的olap服务器，完全自主产权，纯java实现. cube架构,性能优,占用空间小.<br />
<br />
<br />
<img alt="" src="http://www.jatools.com/olap/img02.gif" />&nbsp;</font><br />
<font face="arial,sans-serif" color="#000000">分析模型设计器<br />
<br />
<img alt="" src="http://www.jatools.com/olap/img03.gif" />&nbsp;<br />
<br />
</font><br />
<img src ="http://www.blogjava.net/report9d/aggbug/296461.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/report9d/" target="_blank">report9d</a> 2009-09-25 18:47 <a href="http://www.blogjava.net/report9d/archive/2009/09/25/296461.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>换个角度来晒晒杰表.2008</title><link>http://www.blogjava.net/report9d/archive/2009/09/02/293580.html</link><dc:creator>report9d</dc:creator><author>report9d</author><pubDate>Wed, 02 Sep 2009 05:02:00 GMT</pubDate><guid>http://www.blogjava.net/report9d/archive/2009/09/02/293580.html</guid><wfw:comment>http://www.blogjava.net/report9d/comments/293580.html</wfw:comment><comments>http://www.blogjava.net/report9d/archive/2009/09/02/293580.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/report9d/comments/commentRss/293580.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/report9d/services/trackbacks/293580.html</trackback:ping><description><![CDATA[<font face="arial,sans-serif" color="#000000">闲话少说，晒几个杰表.2008的ppt截图，希望有助于大家对报表工具的选择.<br />
<br />
<img src="http://www.jatools.com/adv/ppt1.gif"  alt="" /><br />
<br />
<img src="http://www.jatools.com/adv/ppt2.gif"  alt="" /><br />
<br />
<img src="http://www.jatools.com/adv/ppt3.gif"  alt="" /><br />
<br />
<img src="http://www.jatools.com/adv/ppt4.gif"  alt="" /><br />
<br />
<img src="http://www.jatools.com/adv/ppt5.gif"  alt="" /><br />
<br />
<img src="http://www.jatools.com/adv/ppt6.gif"  alt="" /><br />
<br />
<img src="http://www.jatools.com/adv/ppt7.gif"  alt="" />&nbsp;</font><br />
<br />
<img src ="http://www.blogjava.net/report9d/aggbug/293580.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/report9d/" target="_blank">report9d</a> 2009-09-02 13:02 <a href="http://www.blogjava.net/report9d/archive/2009/09/02/293580.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>jni 学习笔记一(原创)</title><link>http://www.blogjava.net/report9d/archive/2009/06/22/283515.html</link><dc:creator>report9d</dc:creator><author>report9d</author><pubDate>Mon, 22 Jun 2009 02:12:00 GMT</pubDate><guid>http://www.blogjava.net/report9d/archive/2009/06/22/283515.html</guid><wfw:comment>http://www.blogjava.net/report9d/comments/283515.html</wfw:comment><comments>http://www.blogjava.net/report9d/archive/2009/06/22/283515.html#Feedback</comments><slash:comments>1</slash:comments><wfw:commentRss>http://www.blogjava.net/report9d/comments/commentRss/283515.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/report9d/services/trackbacks/283515.html</trackback:ping><description><![CDATA[<p>jni 类型<br />
<br />
<strong>简单类型 primitive type</strong><br />
<br />
jni有8大基本类型， jboolean,jbyte,jchar,jshort,jint,jfloat,jlong,,jdouble<br />
8位，16位，32位，64位，各两个(在win32平台中，其他平台不一定)<br />
<br />
java类型与c++数据类型的映射关系是如下:<br />
jboolean &lt;--&gt; unsigned char<br />
jchar&nbsp;&nbsp; &lt;--&gt; unsigned short<br />
jshort&nbsp; &lt;--&gt; short<br />
jfloat&nbsp; &lt;--&gt;&nbsp; float<br />
jdouble &lt;--&gt; double<br />
<br />
这是在 jni.h里定义的，为啥缺了jbyte,jint,jlong的映射呢?<br />
答案是：sun在实现java虚拟机时，考虑到虚拟机可能运行在不同的操作系统和不同的硬件平台上，比如，硬件平台有8位，16位，32位，64位的区别，为了更好地与硬件平台匹配，发挥最好的性能，将一些类型抽取出来，允许在不同的平台上有不同的表示（位数），我们姑且称之为硬件相关类型，jbyte,jint,jlong就属于硬件相关类型。<br />
<br />
举列来说，如果你在32位机上，jint表示的是32bit的，而在64位机上，一般是64位即8个字节表示，也就是说，jbyte,jint,jlong在sun的虚拟机上，位数是不定的。<br />
<br />
那位数不一定，怎么编译?&nbsp;&nbsp; sun的方法是增加一个机器相关的jni_md.h文件，这里的md是machine dependent(机器相关)的意思。在win32平台中，这三个类型的定义如下:<br />
<br />
typedef long jint;<br />
typedef __int64 jlong;<br />
typedef signed char jbyte;<br />
<br />
由此可见，在win32平台中，jint是32位的,jlong是64位，jbyte是8位的.<br />
<br />
<strong>指针类型&nbsp; reference type<br />
</strong>reference 准确的译法，应该是引用，但引用实际上就是指针的一种伪装，只不过更接近人的思维罢了。如果说，"爸爸的爸爸"是一种指针概念，那"爷爷"就是一种引用概念。<br />
<br />
jni把类型分为两大类，一个是简单类型，一个是引用类型,下面是引用类型<br />
<br />
<img height="275" alt="" src="http://www.j2ee.me/docs/books/jni/html/typesa.gif" width="503" border="0" /><br />
<br />
从上图似乎可以看出，所有引用类型，都从jobject 继承，jarray又被几个简单类型的数组继承.<br />
但实际上这个对象层次，是一种假象，跟我们c++与java中看到的对象层次是有区别的，jobject与LPSTR(字符串指针)，本质上没有区别：<br />
1.&nbsp; jobject, jclass,jstring,...等，所有对象，是指针,不是对象本身，而指针是不存在继承关系的，&#8220;小狗&#8221;的指针，从&#8220;动物&#8221;的指针继承，这种说法不成立。<br />
2. jobject,jclass,jstring 是一种指针，不存在任何操作方法，好比你不能 LPCSTR-&gt;strlen()，在jni中，也没有提供任何&nbsp; jobject-&gt;something() 这种调用。<br />
3. 对这些对象的操作必须依赖于 env对象的操作方法.<br />
<br />
看一下，jni.h中对 这些引用对象的定义<br />
<br />
class _jobject {};<br />
class _jclass : public _jobject {};<br />
class _jstring : public _jobject {};<br />
...<br />
typedef _jobject *jobject;&nbsp;&nbsp;&nbsp;&nbsp; //_jobject才是类定义，jobject&nbsp;是否_jobject的指针<br />
typedef _jclass *jclass;<br />
typedef _jstring *jstring;<br />
...<br />
<br />
在这些下划线对象中，有什么成员变量，成员函数呢? 答案是你什么也不能得到，比如，你想知道，_jstring对象的字符串长度，你不能 _jstring.length()，得到，而必须env-&gt;GetStringLength(jstring) 来得到.<br />
<br />
只给你一个对象的指针，不告诉你里面有什么，这样做的好处是实现与接口分离。<br />
<br />
jvalue 这个类型，是一个union ，感觉很想com里的variant对象，不过没有指明类型的field<br />
<a name="63780">&nbsp;</a>typedef union jvalue {<br />
<a name="63781"></a>&nbsp;&nbsp;&nbsp; jboolean z;<br />
<a name="63782"></a>&nbsp;&nbsp;&nbsp; jbyte&nbsp;&nbsp;&nbsp; b;<br />
<a name="63783"></a>&nbsp;&nbsp;&nbsp; jchar&nbsp;&nbsp;&nbsp; c;<br />
<a name="63784"></a>&nbsp;&nbsp;&nbsp; jshort&nbsp;&nbsp; s;<br />
<a name="63785"></a>&nbsp;&nbsp;&nbsp; jint&nbsp;&nbsp;&nbsp;&nbsp; i;<br />
<a name="63786"></a>&nbsp;&nbsp;&nbsp; jlong&nbsp;&nbsp;&nbsp; j;<br />
<a name="63787"></a>&nbsp;&nbsp;&nbsp; jfloat&nbsp;&nbsp; f;<br />
<a name="63788"></a>&nbsp;&nbsp;&nbsp; jdouble&nbsp; d;<br />
<a name="63789"></a>&nbsp;&nbsp;&nbsp; jobject&nbsp; l;<br />
<a name="63790"></a>} jvalue;<br />
我现在还不知道，这个数据类型，什么时候用.<br />
<br />
jfieldID是一个java类成员变量的id，这个id在c++中，实际是一个指向结构的一个指针, jmethodID&nbsp; 是成员方法的id,&nbsp; 不管是成员变量还是方法的id,在java类被加载进虚拟机后，是保持不变的。所以从考虑性能计，可以使用静态缓存的方法，先取出来，后面会讲到<br />
<br />
字符串类型<br />
这里说的字符串类型，是jni中char * 的格式，不是指 jstring/_jstring，jni也使用 char * 字符串指针，<br />
好下所示：<br />
&nbsp;&nbsp;&nbsp; jmethodID GetMethodID (JNIEnv *env, jclass clazz, const char *name, const char *sig);<br />
</p>
但需要注意的是，这里的name，必须是UTF-8的编码,utf-8对于ascii字符，只占一个字节,最多不超过3个字节
<img src ="http://www.blogjava.net/report9d/aggbug/283515.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/report9d/" target="_blank">report9d</a> 2009-06-22 10:12 <a href="http://www.blogjava.net/report9d/archive/2009/06/22/283515.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>java报表图例大全</title><link>http://www.blogjava.net/report9d/archive/2009/03/04/257848.html</link><dc:creator>report9d</dc:creator><author>report9d</author><pubDate>Wed, 04 Mar 2009 09:58:00 GMT</pubDate><guid>http://www.blogjava.net/report9d/archive/2009/03/04/257848.html</guid><wfw:comment>http://www.blogjava.net/report9d/comments/257848.html</wfw:comment><comments>http://www.blogjava.net/report9d/archive/2009/03/04/257848.html#Feedback</comments><slash:comments>5</slash:comments><wfw:commentRss>http://www.blogjava.net/report9d/comments/commentRss/257848.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/report9d/services/trackbacks/257848.html</trackback:ping><description><![CDATA[<span style="font-size: 10pt">通过图片介绍java报表开发过程中,经常遇到的一些报表类型,统计图,及可视化的设计等.下面以 <a href="www.jatools.com">杰表.2008</a>&nbsp;为例介绍之.</span><br />
<h1 align="center">&nbsp;</h1>
<h1 align="center">一、支持报表类型</h1>
<h2>主从报表</h2>
<p><img alt="" src="http://www.jatools.com/img/img03.gif" /></p>
<h2>套打报表</h2>
<p><img alt="" src="http://www.jatools.com/img/img04.gif" /></p>
<h2>标签报表</h2>
<p><img alt="" src="http://www.jatools.com/img/img05.gif" /></p>
<h2>分栏报表</h2>
<p><img alt="" src="http://www.jatools.com/img/img06.gif" /></p>
<h2>计算比去年增长数</h2>
<p><img height="322" alt="" src="http://www.jatools.com/img/image009.png" width="238" /></p>
<h2>计算比去年同期增长数</h2>
<p><img height="351" alt="" src="http://www.jatools.com/img/image011.png" width="284" /></p>
<h2>补足空行的表格报表</h2>
<p><img height="291" alt="" src="http://www.jatools.com/img/image013.png" width="450" /></p>
<h2>多表合并.不同的数据集,做成一个相连的报表.</h2>
<p><img height="254" alt="" src="http://www.jatools.com/img/image015.png" width="267" /></p>
<h2>公式分组报表.按字段值,进行分类,分级</h2>
<p><img height="247" alt="" src="http://www.jatools.com/img/image017.png" width="271" /></p>
<h2>排行榜(Top N)报表</h2>
<p><img height="279" alt="" src="http://www.jatools.com/img/image019.png" width="306" /></p>
<h2>按汇总值大小排序的分组</h2>
<p><img height="357" alt="" src="http://www.jatools.com/img/image021.png" width="259" /></p>
<h2>多级分组</h2>
<p><img height="389" alt="" src="http://www.jatools.com/img/image023.png" width="281" /></p>
<h2>计算占比</h2>
<p><img height="321" alt="" src="http://www.jatools.com/img/image025.png" width="280" /></p>
<h2>显示排名</h2>
<p><img height="308" alt="" src="http://www.jatools.com/img/image027.png" width="294" /></p>
<h2>交叉表折页处理</h2>
<p><img height="249" alt="" src="http://www.jatools.com/img/image029.png" width="587" /><br />
<img height="227" alt="" src="http://www.jatools.com/img/image031.png" width="547" /><br />
<img height="192" alt="" src="http://www.jatools.com/img/image033.png" width="382" /></p>
<h2>层次不等的交叉表</h2>
<p><img height="182" alt="" src="http://www.jatools.com/img/image035.png" width="458" /></p>
<h2>行列并行分组的交叉表</h2>
<p><img height="274" alt="" src="http://www.jatools.com/img/image037.png" width="482" /></p>
<h2>多数据集的交叉表</h2>
<p><img height="314" alt="" src="http://www.jatools.com/img/image039.png" width="307" /></p>
<h2>静态表格中的公式计算</h2>
<p><img height="326" alt="" src="http://www.jatools.com/img/image041.png" width="349" /></p>
<p align="center">&nbsp;</p>
<h1 align="center">二、javabean数据源</h1>
<h2>使用java数组</h2>
<p>假设项目组其他成员已经编写了一个Student类，如下图（a），该类定义四个方法，分别获取其姓名，年龄，性别，分数。由脚本构造一个包含三个Student对象的数组，如图（b），要求你做成下图（c）所示报表。 <br />
<img height="180" alt="" src="http://www.jatools.com/img/image043.png" width="616" /></p>
<h2>嵌套的java对象数据源</h2>
<p>假设你有下图（a）所示的两个类Student和Person，你可以使用Student的getMembers()方法，取得该学生的家庭成员列表，每个家庭成员用一个Person对象表示，该对象包含与该学生的关系、姓名、性别等信息。 <br />
<img height="218" alt="" src="http://www.jatools.com/img/image045.png" width="662" /></p>
<h2>ResultSet数据源</h2>
<p><img height="161" alt="" src="http://www.jatools.com/img/image047.png" width="389" /></p>
<h2>指定sql查询一个报表</h2>
<p><img height="222" alt="" src="http://www.jatools.com/img/image049.png" width="632" /><br />
</p>
<h1 align="center">三、统计图与条码 </h1>
<h2>插入统计图对象</h2>
<p align="left"><img height="301" alt="" src="http://www.jatools.com/img/image051.png" width="488" /></p>
<h2>设置统计图背景及立体效果</h2>
<p align="left"><img height="306" alt="" src="http://www.jatools.com/img/image053.png" width="483" /></p>
<h2>设置统计图输出格式为Flash</h2>
<p align="left"><img height="201" alt="" src="http://www.jatools.com/img/image055.png" width="389" /></p>
<h2>从统计图钻取另一个明细报表</h2>
<p>你可以在统计图的某一个数据区放置一个超链接，使用户双击该区时，跳转到另一个子报表或网页，如，有一个柱形图，显示各产品的库存量，点击某个产品的柱面，就可以打开该产品相关的销售记录。<br />
<img height="192" alt="" src="http://www.jatools.com/img/image057.png" width="577" /></p>
<h2>饼图</h2>
<p align="left"><img height="185" alt="" src="http://www.jatools.com/img/image059.png" width="513" /></p>
<h2>以时间为横轴的统计图</h2>
<p align="left"><img height="175" alt="" src="http://www.jatools.com/img/image061.png" width="322" /></p>
<h2>混合类型统计图</h2>
<p align="left"><img height="318" alt="" src="http://www.jatools.com/img/image063.png" width="548" /></p>
<h2>双轴统计图</h2>
<p align="left"><img height="184" alt="" src="http://www.jatools.com/img/image065.png" width="292" /></p>
<h2>创建甘特图 </h2>
<p align="left"><img height="247" alt="" src="http://www.jatools.com/img/image067.png" width="565" /></p>
<h2>特殊统计图</h2>
<p align="left"><img height="182" alt="" src="http://www.jatools.com/img/image069.png" width="232" /><br />
<img alt="" src="http://www.jatools.com/img/image281.png"  /><br />
<img height="176" alt="" src="http://www.jatools.com/img/image071.png" width="211" /><br />
<img height="173" alt="" src="http://www.jatools.com/img/image073.png" width="252" /><br />
<img height="126" alt="" src="http://www.jatools.com/img/image075.png" width="193" /><br />
<img height="152" alt="" src="http://www.jatools.com/img/image077.png" width="189" /><br />
<img height="175" alt="" src="http://www.jatools.com/img/image079.png" width="248" /><br />
<img height="183" alt="" src="http://www.jatools.com/img/image083.png" width="361" /></p>
<h2>创建条形码对象</h2>
<p>日常生活中条形码随处可见，条形码用几何图形表示数据，并可以被专门设备识别。杰表可支持的13种条形码，分别是codabar、code39、code128、2of5、postnet、ean-128、ean-13、ean-8、upc-a、upc-e、royal-mail-cbc、pdf417、datamatrix，其中最后两种是二维条形码。 <br />
<br />
一维码<img height="91" alt="" src="http://www.jatools.com/img/image085.png" width="225" />&nbsp;&nbsp; 二维码&nbsp;&nbsp; <img height="51" alt="" src="http://www.jatools.com/img/image087.png" width="167" /></p>
<h2>设置图片背景</h2>
<p><img height="425" alt="" src="http://www.jatools.com/img/image089.png" width="423" /></p>
<h2>显示数据库字段上的图片</h2>
<p><img height="212" alt="" src="http://www.jatools.com/img/image091.png" width="469" /><br />
</p>
<h1 align="center">三、特殊的报表效果 </h1>
<h2>冻结窗口效果</h2>
<p><img height="336" alt="" src="http://www.jatools.com/img/image093.png" width="670" /></p>
<h2>点击表头排序</h2>
<p><img height="209" alt="" src="http://www.jatools.com/img/image095.png" width="352" /></p>
<h2>使用超链接子报表</h2>
<p>当你浏览报表时，可能需要了解更详细的信息，比如，我们在浏览一个订单列表时，希望了解该订单中各货物的销售数量。这时，你可以在订单列表中，加一个超链接，使用户在点击该链接后，可以跳转到显示该订单明细的一个报表。<br />
你可以在主表中，点击订单ID，即可浏览该订单出售的所有货物明细，如下图所示：<br />
<br />
<img height="205" alt="" src="http://www.jatools.com/img/image097.png" width="473" /></p>
<h2>热点提示</h2>
<p><img height="67" alt="" src="http://www.jatools.com/img/image099.png" width="235" /></p>
<h2>复杂汇总</h2>
<p><img height="396" alt="" src="http://www.jatools.com/img/image101.png" width="505" /></p>
<h2>颜色警告</h2>
<p><img height="205" alt="" src="http://www.jatools.com/img/image103.png" width="363" /></p>
<h2>斑马条</h2>
<p><img height="155" alt="" src="http://www.jatools.com/img/image105.png" width="267" /></p>
<h2>创建页小计、页累计报表</h2>
<p><img height="192" alt="" src="http://www.jatools.com/img/image107.png" width="461" /></p>
<p align="center">&nbsp;</p>
<h1 align="center">四、可视化设计器 </h1>
<h2>设计参数表单</h2>
<p>杰表.2008配备了一个可视化参数表单设计器，使用这个设计器，你可以不离开报表设计器环境，轻松制作查询表单。表单设计器有丰富的web控件，检验，事件侦听，css样式机制，你也可以使用javascript脚本扩展表单功能，同时，也实现了常用的多个下拉框联动功能。<br />
<img height="427" alt="" src="http://www.jatools.com/img/image109.png" width="664" /></p>
<h2>可视化的报表设计器 </h2>
<p align="left"><img height="393" alt="" src="http://www.jatools.com/img/image111.png" width="557" /></p>
<h2>报表预览面板 </h2>
<p align="left"><img height="401" alt="" src="http://www.jatools.com/img/image113.png" width="554" /></p>
<p>&nbsp;</p>
  <img src ="http://www.blogjava.net/report9d/aggbug/257848.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/report9d/" target="_blank">report9d</a> 2009-03-04 17:58 <a href="http://www.blogjava.net/report9d/archive/2009/03/04/257848.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>Java报表工具打印方案集锦</title><link>http://www.blogjava.net/report9d/archive/2008/08/08/220934.html</link><dc:creator>report9d</dc:creator><author>report9d</author><pubDate>Fri, 08 Aug 2008 07:52:00 GMT</pubDate><guid>http://www.blogjava.net/report9d/archive/2008/08/08/220934.html</guid><wfw:comment>http://www.blogjava.net/report9d/comments/220934.html</wfw:comment><comments>http://www.blogjava.net/report9d/archive/2008/08/08/220934.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/report9d/comments/commentRss/220934.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/report9d/services/trackbacks/220934.html</trackback:ping><description><![CDATA[<p><span style="font-family: 楷体_GB2312">本文试图对市面上流行的纯java实现的web报表工具，jasperreport 、 stylereport 、杰表、润乾报表、快逸、finererport为例，分析各报表工具采用的web打印技术的异同、优劣、及对用户需求的适应性，供大家参考。</span></p>
<p><span style="font-family: 宋体">打印是报表工具的基本功能之一，有些报表工具就是从一个专门的打印程序中发展而来，如用友华表。因为想当然地简单，所以，在报表工具选型时用户常常忽略这个问题，特别是有些报表工具厂商，明知自己的打印方案在满足某些需求时，存在缺陷，但没有尽明确告知义务，而故意事先做好花里胡哨的有关打印方面的文档，欺骗客户。我曾不至一次地听说，有些开发商选用的报表工具，其打印功能不能满足需求，不得不另外找打印工具的事情，实在是吃尽苦头。</span></p>
<p><span style="font-family: 宋体">报表打印在</span>c/s<span style="font-family: 宋体">时代，确实非常简单，</span>vb,vc,Delphi,pb,<span style="font-family: 宋体">都有很好用的打印</span>api<span style="font-family: 宋体">，有的甚至用报表控件方式，搞定打印更是分分秒的事情，但今天是</span>b/s<span style="font-family: 宋体">的天下，报表都是在网页浏览器中显示，但当今的浏览器打印功能一般非常弱</span>(<span style="font-family: 宋体">谁让你叫他&#8220;浏览&#8221;器呢？&#8220;浏览&#8221;就是让你用眼睛看，&#8220;打印&#8221;属于兼职</span>)<span style="font-family: 宋体">，要做到精确分页打印，几乎不可能，所以当前的报表工具，一般不会让你使用浏览器的打印菜单来打印报表，都有自己的解决方案，这下可好，各报表工具厂商由是乎，八仙过海，各显神通，各家都说自己的好，对于</span>web<span style="font-family: 宋体">打印了解不深的客户，总有雾里看花的感觉。</span></p>
<p><span style="font-family: 宋体">归纳来说，当今</span>java<span style="font-family: 宋体">报表工具采用的打印技术不外乎三类：</span>Applet<span style="font-family: 宋体">打印、导出成</span>pdf/excel<span style="font-family: 宋体">打印、控件打印。用户选用的重点是：尽量选择插件小的打印软件，因为文件小意味着安装迅速，启动速度快。插件大小除了插件本身的大小外，还需要考虑支持软件的大小，如有些插件很小，支持软件却很大。</span></p>
<p><strong>Applet</strong><strong><span style="font-family: 宋体">打印</span></strong></p>
<p><span style="font-family: 宋体">本文开始处提及的报表工具，除</span>finereport<span style="font-family: 宋体">外都支持</span>Applet<span style="font-family: 宋体">打印。之所以多数厂商支持</span>Applet<span style="font-family: 宋体">方式打印，因为</span>Applet<span style="font-family: 宋体">是</span>java<span style="font-family: 宋体">实现，与</span>java<span style="font-family: 宋体">后台、</span>java<span style="font-family: 宋体">报表设计器的兼容性较好，代码容易维护，实现也方便。然而，厂商省事，用户就得多事。</span>Applet<span style="font-family: 宋体">方式打印，用户最多的抱怨是需要安装</span>jre<span style="font-family: 宋体">（而当前的操作系统，一般不是默认安装的），虽然说，多数厂商已经做到可以自动安装</span>jre<span style="font-family: 宋体">，但对于</span>10<span style="font-family: 宋体">几</span>M(JRE1.4<span style="font-family: 宋体">有</span>15M<span style="font-family: 宋体">，</span>JRE1.5<span style="font-family: 宋体">为</span>16M))<span style="font-family: 宋体">的安装，这意味着用户需要较长时间的等待。</span></p>
<p><span style="font-family: 宋体">另一个问题是</span>Applet<span style="font-family: 宋体">配置复杂，使用不稳定。</span>1995<span style="font-family: 宋体">年，正是因为给人们无穷的视觉和脑力震荡的</span>Applet <span style="font-family: 宋体">，使人们认识了</span>java<span style="font-family: 宋体">，认识了</span>Games Gosling<span style="font-family: 宋体">。所以在</span>b/s<span style="font-family: 宋体">早期，人们为了展现</span>html<span style="font-family: 宋体">的富客户效果，</span>Applet<span style="font-family: 宋体">是唯一之选。但现如今，</span>Applet<span style="font-family: 宋体">已经是昨日黄花，早已被</span>ajax<span style="font-family: 宋体">、</span>flex<span style="font-family: 宋体">取代，是什么原因？战略层面的东西，我也不太说得清楚，但作为程序员，经过几番折腾后，也不会愿意再用</span>Applet<span style="font-family: 宋体">了。如经常莫名其妙地出现&#8220;小应用程序，</span>&#8230; notinited<span style="font-family: 宋体">&#8221;的错误，还得清理</span>ie<span style="font-family: 宋体">缓存，对于</span>Applet<span style="font-family: 宋体">打印，还需要设置</span>jre<span style="font-family: 宋体">的安全策略等等。不是靠终端用户能完成的，这就必须额外地增加开发商的服务成本。</span></p>
<p>Applet<span style="font-family: 宋体">打印，启动速度慢。</span>Applet<span style="font-family: 宋体">打印原理是，当你点击打印按钮时，浏览器启动</span>Applet<span style="font-family: 宋体">，</span>Applet<span style="font-family: 宋体">根据参数访问后台页面信息，后台返回页面，</span>Applet<span style="font-family: 宋体">加载页面后，调用</span>jre<span style="font-family: 宋体">的打印服务进行打印。这就意味着，每次打印都需要调用后台服务程序，就必然影响打印的响应速度。</span></p>
<p>Applet<span style="font-family: 宋体">打印很安全，言下之意是</span>ActiveX<span style="font-family: 宋体">打印不安全，这是采用</span>Applet<span style="font-family: 宋体">打印的厂商津津乐道的，实际上，这是一个伪命题。</span>Applet<span style="font-family: 宋体">和</span>ActiveX<span style="font-family: 宋体">都是浏览器的插件，我们当然不希望下载插件后，该插件可以为所欲为，比如，删除你磁盘里的文件，或启动一个木马，从这点来说，</span>Applet<span style="font-family: 宋体">确实比</span>ActiveX<span style="font-family: 宋体">安全，因为</span>Applet<span style="font-family: 宋体">是在一个受限的环境里运行，而</span>ActiveX<span style="font-family: 宋体">是不受限的。所以，当你访问一个陌生的网站时，出于安全考虑，你可能会允许下载运行</span>Applet<span style="font-family: 宋体">，而阻止</span>ActiveX<span style="font-family: 宋体">。但当用户访问自己的网站系统</span>,<span style="font-family: 宋体">时，这种担心就没必要，这好比，当你与陌生人打交道时，很自然地会问自己，这人可信嘛？但如果你与家里人打交道，这个问题就不成其为问题了。</span></p>
<p>Applet<span style="font-family: 宋体">打印，除了可以设置打印机，设置纸张页面大小等常规打印功能外，往往也集成与打印不相关的功能，比如，打印前修改（有人说，是为了做假帐方便，中国特色，国产报表工具一般都具备</span>,jasperreport,stylereport<span style="font-family: 宋体">不支持），按行分页，自由定位，这些本来由设计器完成的功能，挪到打印功能上来，来掩盖上面指出的</span>Applet<span style="font-family: 宋体">的种种不足。实际上，</span>Applet<span style="font-family: 宋体">功能强弱完全取决于</span>Applet<span style="font-family: 宋体">的大小，有些报表厂商甚至用</span>Applet<span style="font-family: 宋体">或</span>web&nbsp;start <span style="font-family: 宋体">的方式，提供所谓的基于</span>web<span style="font-family: 宋体">的报表设计，前提是下载</span> 40<span style="font-family: 宋体">多</span>M<span style="font-family: 宋体">的</span>jar<span style="font-family: 宋体">包，实际上，这种方案远非一般意义上的纯</span>web <span style="font-family: 宋体">的报表设计，完全是混淆概念。作为用户最希望常规的，他们熟悉的打印功能，不需要不相关的，理解困难的打印功能。</span></p>
<p><strong>PDF/EXCEL</strong><strong><span style="font-family: 宋体">打印</span></strong></p>
<p>Pdf<span style="font-family: 宋体">打印方式，就是用户点击打印后，浏览器会自动弹出</span>adobe reader<span style="font-family: 宋体">，再利用</span>adobe<span style="font-family: 宋体">的打印按钮进行打印，由于国外</span>adobe reader<span style="font-family: 宋体">安装非常普及，国外的</span>java<span style="font-family: 宋体">报表工具多提供这种打印方案，比如</span> stylereport<span style="font-family: 宋体">，</span>jasperreport<span style="font-family: 宋体">，国内报表工具</span>finereport<span style="font-family: 宋体">也采用这种方式</span>(<span style="font-family: 宋体">让人不解</span>)<span style="font-family: 宋体">，</span>pdf<span style="font-family: 宋体">方式打印的好处是能做到精确打印，而且报表预览与打印一气呵成。但不足是需要在客户的机子里，事先安装有</span>adobe reader<span style="font-family: 宋体">，作为程序员，一般不太会有问题，因为程序员可能经常要浏览一些</span>pdf<span style="font-family: 宋体">文档，多数已经装了</span>adobe reader<span style="font-family: 宋体">，但国内的终端用户，大多不知</span>pdf<span style="font-family: 宋体">是何物，更谈不上安装。</span></p>
<p>Pdf<span style="font-family: 宋体">打印的另一个问题是必须弹出</span>adobe reader<span style="font-family: 宋体">，不能做到无预览打印，这可能由于</span>pdf<span style="font-family: 宋体">缺少相应</span>api<span style="font-family: 宋体">的缘故吧。</span></p>
<p><strong><span style="font-family: 宋体">轻量级的</span>ActiveX</strong><strong><span style="font-family: 宋体">打印</span></strong></p>
<p><span style="font-family: 宋体">这里之所以强调&#8220;轻量级&#8221;，目的是与传统意义上的</span>ActiveX<span style="font-family: 宋体">报表相区别。</span>ActiveX<span style="font-family: 宋体">技术可以说是报表工具家族里的没落贵族，</span>c/s<span style="font-family: 宋体">时代，报表工具一般都被做成控件形式，水晶报表就是如此，在</span>b/s<span style="font-family: 宋体">时代，报表工具里仍然能看到</span>ActiveX<span style="font-family: 宋体">的身影，但风光大不如从前，如数巨，明宇，用友华表，</span>inforeport<span style="font-family: 宋体">。用</span>ActiveX<span style="font-family: 宋体">实现报表的不足，在网上你能轻易找到，在此不再详述。</span>ActiveX <span style="font-family: 宋体">报表虽深受诟责，但从打印功能来说，却都是近乎完美，处理得却非常好，非常稳定。</span></p>
<p><span style="font-family: 宋体">既然，</span>ActiveX<span style="font-family: 宋体">打印是长处，能不能扬长避短地使用</span>ActiveX<span style="font-family: 宋体">技术？有人提出这样的问题。于是，有些厂商，比如杰表，采用了浏览时用</span>html<span style="font-family: 宋体">，打印时用插件的方式。这种方案的需要解决的问题是，</span>ActiveX<span style="font-family: 宋体">打印控件，不能太大，否则报表工具成了</span>ActiveX<span style="font-family: 宋体">报表了。</span></p>
<p><span style="font-family: 宋体">与</span>Applet<span style="font-family: 宋体">相比，轻量级</span>ActiveX<span style="font-family: 宋体">打印具有以下优势：</span></p>
<p style="margin-left: 18pt; text-indent: -18pt; tab-stops: list 18.0pt">1.<span style="font: 7pt 'Times New Roman'">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span><span style="font-family: 宋体">下载时间短，（大小是</span>Applet<span style="font-family: 宋体">的</span>1/250<span style="font-family: 宋体">）；</span></p>
<p style="margin-left: 18pt; text-indent: -18pt; tab-stops: list 18.0pt">2.<span style="font: 7pt 'Times New Roman'">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span><span style="font-family: 宋体">本地打印，打印时，不需要访问后台服务程序，不占用服务器资源；</span></p>
<p style="margin-left: 18pt; text-indent: -18pt; tab-stops: list 18.0pt">3.<span style="font: 7pt 'Times New Roman'">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span><span style="font-family: 宋体">启动速度快，由于控件小，且本地打印，所以打印速度是优于以上两中打印方案，打印速度与你点击浏览器打印菜单相差无几。</span></p>
<p><span style="font-family: 宋体">采用轻量级的</span>ActiveX<span style="font-family: 宋体">打印的不足是，只有</span>ie 5.5 <span style="font-family: 宋体">及以上版本支持，其他版本的浏览器不支持。好在</span>ie5.5<span style="font-family: 宋体">浏览器已非常普及，在用户那里应该不是大问题。</span></p>
<p><span style="font-family: 楷体_GB2312">杰表采用的打印方案，用一个jatoolsPrinter的控件，大小是60k，是经过数字签名的。这个打印控件采用ie特有的打印技术（templateprinter）实现打印功能，支持打印，预览，边距设置，重复打印，批量打印功能。</span></p>
<p><span style="font-family: 楷体_GB2312">目前，jatoolsPrinter已经从杰表中独立出来，任何报表工具或第三方软件都利用该控件，实现web打印，推出至今，免费加收费用户上万。</span></p>
<p><span style="font-family: 宋体">下表总结三种方式的采用者及优劣对比，对于ie5.5客户来说,我们推荐使用ActiveX打印方案.<br />
<img height="276" alt="" src="http://www.jatools.com/tech/print.gif" width="647" border="0" /></span><br />
报表厂商列表<br />
<a href="http://jasperreports.sourceforge.net"><br />
jasperreport&nbsp;</a>&nbsp;</p>
<p><a href="http://www.inetsoft.com.cn">Stylereport</a>&nbsp;</p>
<p><a href="http://http://www.jatools.com">杰表</a>&nbsp;</p>
<p><a href="http://www.runqian.com.cn">润乾</a>&nbsp;</p>
<p><a href="http://www.quiee.com.cn">快逸</a>&nbsp;</p>
<p><a href="http://www.finereport.com">finererport</a>&nbsp;</p>
<img src ="http://www.blogjava.net/report9d/aggbug/220934.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/report9d/" target="_blank">report9d</a> 2008-08-08 15:52 <a href="http://www.blogjava.net/report9d/archive/2008/08/08/220934.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>java报表工具中,如何可视化地设计报表参数表单</title><link>http://www.blogjava.net/report9d/archive/2008/07/29/218332.html</link><dc:creator>report9d</dc:creator><author>report9d</author><pubDate>Tue, 29 Jul 2008 04:09:00 GMT</pubDate><guid>http://www.blogjava.net/report9d/archive/2008/07/29/218332.html</guid><wfw:comment>http://www.blogjava.net/report9d/comments/218332.html</wfw:comment><comments>http://www.blogjava.net/report9d/archive/2008/07/29/218332.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/report9d/comments/commentRss/218332.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/report9d/services/trackbacks/218332.html</trackback:ping><description><![CDATA[<font face="arial,sans-serif" color="#000000"><span style="font-size: 10pt"><font face="arial,sans-serif" color="#000000">当我们使用报表工具，设计完一张报表时，我们同时必须为该报表设计一个查询条件表单，使得用户在浏览报表时，可以在网页中选取查询条件。在过去，设计表单是件令人沮丧的事情，这不仅要求你在报表设计器与开发环境之间来回切换，而且在设计表单时，还需要考虑系统的其他布局元素的关系，苦燥，繁琐，没有挑战性。更进一步，如果项目要求最终用户能够自己设计报表，天呐，他们可能喜欢用报表设计工具来设计报表，但绝对不愿意用网页设计工具来设计表单。<br />
<br />
当然,也有一些报表工具，实现了参数表单的自动化，比如，按一定规则顺序排列参数项，但这种自动化，用户很难按其需求进行排版布局，所以不能彻底解决用户的问题。<br />
<br />
现在，杰表.2008配备了一个可视化参数表单设计器，使用这个设计器，你可以不离开报表设计器环境，轻松制作查询表单。表单设计器有丰富的web控件，检验，事件侦听，css样式机制，你也可以使用javascript脚本扩展表单功能，同时，也实现了常用的多个下拉框联动功能。<br />
<br />
杰表.2008表单设计器不仅是表单设计工具的替代品，更重要的是表单设计器解决了报表设计容易，部署难的问题。我们希望，利用集成的表单设计器，你只要在设计器中设计好参数表单，并将报表模板文件和表单模板文件置于某个位置，你的用户就可以在浏览器中，按条件浏览这张报表了，这中间不需要你再做任何其他事情。<br />
<br />
有关表单设计的更多内容,<a class="l2" href="http://www.jatools.com/doc/guide/paraform1501.htm" target="_blank">点击这里</a><br />
<br />
<img alt="" src="http://www.jatools.com/doc/guide/image/paraform1502.gif" /><br />
</font><br />
</span></font>
 <img src ="http://www.blogjava.net/report9d/aggbug/218332.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/report9d/" target="_blank">report9d</a> 2008-07-29 12:09 <a href="http://www.blogjava.net/report9d/archive/2008/07/29/218332.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>java复杂报表模型与实现方法</title><link>http://www.blogjava.net/report9d/archive/2008/06/10/206936.html</link><dc:creator>report9d</dc:creator><author>report9d</author><pubDate>Tue, 10 Jun 2008 08:15:00 GMT</pubDate><guid>http://www.blogjava.net/report9d/archive/2008/06/10/206936.html</guid><wfw:comment>http://www.blogjava.net/report9d/comments/206936.html</wfw:comment><comments>http://www.blogjava.net/report9d/archive/2008/06/10/206936.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/report9d/comments/commentRss/206936.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/report9d/services/trackbacks/206936.html</trackback:ping><description><![CDATA[作为java程序员，大家可能都听说过，或用过birt， 据说，现在birt的东家actual，正式入驻中国市场，联想到前些天杰表.2008的推出，今年，注定是国内的报表软件市场不平静的一年。<br />
<br />
birt的最大好处是开源，不足是水土不服，做起复杂报表来不方便，复杂报表主要说的是行上，列上有多个并列分组的交叉报表，国产报表工具大都关注复杂报表需求，而洋品牌的报表软件工具，如jasperreport,crystalreport,这方面关注不够，所以做起复杂报表来很吃力。<br />
<br />
做什么事情必须先有观念，然后，付诸实现，做软件则更进一步，必须将这些观念结构化，即模型化。对复杂报表需求的处理，国内报表软件厂商时下，用得最多的是类excel报表模型，即以单元格为中心报表模型，最早产品化的，是用友华表，当然它不属于java阵营的，java阵营的现在有润乾，finereport，杰表4.0，类excel报表模型大家都觉得，功能很强，但最大问题是，学习起来不方便，不知道你在大学里，微积分考多少，如果你90分以下，那你最好别碰那东西。<br />
<br />
杰表.2008采用的复杂报表模型，相对来说，比excel模型容易得多，比如下图是一个典型的复杂报表，该报表用于按不同分类方法<nobr><strong class="kgb" onmouseover='isShowAds = false;isShowAds2 = false;isShowGg = true;InTextAds_GgLayer="_u7EDF_u8BA1";KeyGate_ads.ShowGgAds(this,"_u7EDF_u8BA1",event)' style="border-top-width: 0px; padding-right: 0px; padding-left: 0px; font-weight: normal; border-left-width: 0px; border-bottom-width: 0px; padding-bottom: 0px; margin: 0px; cursor: hand; color: #0000ff; padding-top: 0px; border-right-width: 0px; text-decoration: underline" onclick='javascript:window.open("http://pagead2.googlesyndication.com/pagead/iclk?sa=l&amp;ai=BfZck5hpOSL_9EIbc6wPonfXODoq8lUCas7HABMCNtwHAqQcQAhgCIM-BhwooFDgAUO3T75_5_____wFgnenVgbgFsgEUd3d3LmVjbGlwc2V3b3JsZC5vcmfIAQHaATdodHRwOi8vd3d3LmVjbGlwc2V3b3JsZC5vcmcvYmJzL3JlYWQtY2VjLXRpZC0xNjY4NS5odG1sgAIBqQLjfeSIDmODPsgCyp3SBKgDAegDtwKIBAGQBAGYBAA&amp;num=2&amp;adurl=http://www.egridsoft.com&amp;client=ca-pub-3578421812762734");GgKwClickStat("统计","www.egridsoft.com","afc","2000084874");' onmouseout='isShowGg = false;InTextAds_GgLayer="_u7EDF_u8BA1"'>统计</strong></nobr><nobr><strong class="kgb" onmouseover='isShowAds = false;isShowAds2 = false;isShowGg = true;InTextAds_GgLayer="_u57F9_u8BAD";KeyGate_ads.ShowGgAds(this,"_u57F9_u8BAD",event)' style="border-top-width: 0px; padding-right: 0px; padding-left: 0px; font-weight: normal; border-left-width: 0px; border-bottom-width: 0px; padding-bottom: 0px; margin: 0px; cursor: hand; color: #0000ff; padding-top: 0px; border-right-width: 0px; text-decoration: underline" onclick='javascript:window.open("http://pagead2.googlesyndication.com/pagead/iclk?sa=l&amp;ai=BeIET5hpOSL_9EIbc6wPonfXODtCwxkes4OjwBMCNtwHQ6AwQERgRIM-BhwooFDgAUO-X1t7-_____wFgnenVgbgFsgEUd3d3LmVjbGlwc2V3b3JsZC5vcmfIAQHaATdodHRwOi8vd3d3LmVjbGlwc2V3b3JsZC5vcmcvYmJzL3JlYWQtY2VjLXRpZC0xNjY4NS5odG1sgAIBqQLjfeSIDmODPsgCvO60BKgDAegDtwKIBAGQBAGYBAA&amp;num=17&amp;adurl=http://www.zhikao365.net&amp;client=ca-pub-3578421812762734");GgKwClickStat("培训","www.zhikao365.net","afc","2000084874");' onmouseout='isShowGg = false;InTextAds_GgLayer="_u57F9_u8BAD"'>培训</strong></nobr>学员人数，该表列上存在多个分组（培训类型、累计培训时间、参加培训总人数、培训内容、渠道类型），分组之间不存在嵌套关系的，即分组是并列的。行上存在一个按学员<nobr><strong class="kgb" onmouseover='isShowAds = false;isShowAds2 = false;isShowGg = true;InTextAds_GgLayer="_u884C_u653F";KeyGate_ads.ShowGgAds(this,"_u884C_u653F",event)' style="border-top-width: 0px; padding-right: 0px; padding-left: 0px; font-weight: normal; border-left-width: 0px; border-bottom-width: 0px; padding-bottom: 0px; margin: 0px; cursor: hand; color: #0000ff; padding-top: 0px; border-right-width: 0px; text-decoration: underline" onclick='javascript:window.open("http://pagead2.googlesyndication.com/pagead/iclk?sa=l&amp;ai=BfZck5hpOSL_9EIbc6wPonfXODoq8lUCas7HABMCNtwHAqQcQAhgCIM-BhwooFDgAUO3T75_5_____wFgnenVgbgFsgEUd3d3LmVjbGlwc2V3b3JsZC5vcmfIAQHaATdodHRwOi8vd3d3LmVjbGlwc2V3b3JsZC5vcmcvYmJzL3JlYWQtY2VjLXRpZC0xNjY4NS5odG1sgAIBqQLjfeSIDmODPsgCyp3SBKgDAegDtwKIBAGQBAGYBAA&amp;num=2&amp;adurl=http://www.egridsoft.com&amp;client=ca-pub-3578421812762734");GgKwClickStat("行政","www.egridsoft.com","afc","2000084874");' onmouseout='isShowGg = false;InTextAds_GgLayer="_u884C_u653F"'>行政</strong></nobr>级别为依据的分组。<br />
<img alt="" src="http://www.jatools.com/image/tech/tech05.gif" border="0" /><br />
<br />
复杂报表的复杂性在于结构复杂，比如上图报表列上存在多个并列分组，不仅如此，行上也可能存在多个并行分组；不仅有多个并列分组，也可能各并列分组的嵌套数不一样；不仅各个分组来源于同一个<nobr><strong class="kgb" onmouseover='isShowAds = false;isShowAds2 = false;isShowGg = true;InTextAds_GgLayer="_u6570_u636E";KeyGate_ads.ShowGgAds(this,"_u6570_u636E",event)' style="border-top-width: 0px; padding-right: 0px; padding-left: 0px; font-weight: normal; border-left-width: 0px; border-bottom-width: 0px; padding-bottom: 0px; margin: 0px; cursor: hand; color: #0000ff; padding-top: 0px; border-right-width: 0px; text-decoration: underline" onclick='javascript:window.open("http://pagead2.googlesyndication.com/pagead/iclk?sa=l&amp;ai=BfZck5hpOSL_9EIbc6wPonfXODoq8lUCas7HABMCNtwHAqQcQAhgCIM-BhwooFDgAUO3T75_5_____wFgnenVgbgFsgEUd3d3LmVjbGlwc2V3b3JsZC5vcmfIAQHaATdodHRwOi8vd3d3LmVjbGlwc2V3b3JsZC5vcmcvYmJzL3JlYWQtY2VjLXRpZC0xNjY4NS5odG1sgAIBqQLjfeSIDmODPsgCyp3SBKgDAegDtwKIBAGQBAGYBAA&amp;num=2&amp;adurl=http://www.egridsoft.com&amp;client=ca-pub-3578421812762734");GgKwClickStat("数据","www.egridsoft.com","afc","2000084874");' onmouseout='isShowGg = false;InTextAds_GgLayer="_u6570_u636E"'>数据</strong></nobr>集，也可能来自多个不同的数据集。<br />
<br />
尽管如此，我们仍然可以把复杂的交叉报表，看作下图所示的结构，表格包括A，B，C，D四部分，其中B，C是两个表格，决定了交叉表的结构。B表格非常特殊，第一，该表格向右生长的，而一般我们常见向下生长，如C 表格。第二，该表格有多个并列分组，而一般报表工具中，表格对象最外围只能有一个分组，尽管其嵌套数是可以多重的。<br />
<img height="182" alt="" src="http://www.jatools.com/image/tech/tech06.gif" width="505" border="0" /><br />
<br />
杰表.2008以上述结构分析为基础，引入了超级表格对象，该对象就是通过嵌入两个扩展方向不同的子表格，行头表和列头表，来完成交叉报表的结构性问题。两表均可以有任意多的并列分组，每个分组可以有<nobr><strong class="kgb" onmouseover='isShowAds = false;isShowAds2 = false;isShowGg = true;InTextAds_GgLayer="_u5C42_u6B21";KeyGate_ads.ShowGgAds(this,"_u5C42_u6B21",event)' style="border-top-width: 0px; padding-right: 0px; padding-left: 0px; font-weight: normal; border-left-width: 0px; border-bottom-width: 0px; padding-bottom: 0px; margin: 0px; cursor: hand; color: #0000ff; padding-top: 0px; border-right-width: 0px; text-decoration: underline" onclick='javascript:window.open("http://pagead2.googlesyndication.com/pagead/iclk?sa=l&amp;ai=BKp1q5hpOSL_9EIbc6wPonfXODrGa2lKR3IqWBMCNtwGA8QQQARgBIM-BhwooFDgAUMKdsxVgnenVgbgFoAGH58n8A7IBFHd3dy5lY2xpcHNld29ybGQub3JnyAEB2gE3aHR0cDovL3d3dy5lY2xpcHNld29ybGQub3JnL2Jicy9yZWFkLWNlYy10aWQtMTY2ODUuaHRtbKkC433kiA5jgz7IAv2SngGoAwHoA7cCiAQBkAQBmAQA&amp;num=1&amp;adurl=http://28.com/%3Fcomeid%3D20286&amp;client=ca-pub-3578421812762734");GgKwClickStat("层次","28.com","afc","2000084874");' onmouseout='isShowGg = false;InTextAds_GgLayer="_u5C42_u6B21"'>层次</strong></nobr>不同的嵌套。下图（a）是<nobr><strong class="kgb" onmouseover='isShowAds = false;isShowAds2 = false;isShowGg = true;InTextAds_GgLayer="_u8BBE_u8BA1";KeyGate_ads.ShowGgAds(this,"_u8BBE_u8BA1",event)' style="border-top-width: 0px; padding-right: 0px; padding-left: 0px; font-weight: normal; border-left-width: 0px; border-bottom-width: 0px; padding-bottom: 0px; margin: 0px; cursor: hand; color: #0000ff; padding-top: 0px; border-right-width: 0px; text-decoration: underline" onclick='javascript:window.open("http://pagead2.googlesyndication.com/pagead/iclk?sa=l&amp;ai=BsAKx5hpOSL_9EIbc6wPonfXODsyV4kKQ2O-QB8CNtwGAtRgQCRgJIM-BhwooFDgAUL3G-8P5_____wFgnenVgbgFsgEUd3d3LmVjbGlwc2V3b3JsZC5vcmfIAQHaATdodHRwOi8vd3d3LmVjbGlwc2V3b3JsZC5vcmcvYmJzL3JlYWQtY2VjLXRpZC0xNjY4NS5odG1sgAIBqQLjfeSIDmODPsgCxvLQA6gDAegDtwKIBAGQBAGYBAA&amp;num=9&amp;adurl=http://www.joton.cn/xincpzx.htm&amp;client=ca-pub-3578421812762734");GgKwClickStat("设计","www.Joton.cn","afc","2000084874");' onmouseout='isShowGg = false;InTextAds_GgLayer="_u8BBE_u8BA1"'>设计</strong></nobr>面板中的超级表格对象，下图（b）是该对象子部件的层次关系，其中对象3就是行头表，对象4就是列头表。<br />
<img height="173" alt="" src="http://www.jatools.com/image/tech/tech07.gif" width="475" border="0" /><br />
<br />
杰表的超级表格对象结合杰表的DOM报表数据模型，可以演化出任意复杂的多源，多组交叉表，下面试举几例说明之。(点击进入查看)<br />
<br />
<a href="http://www.jatools.com" target="_blank">列上并行分组交叉表 <br />
&nbsp; 层次不等的交叉表 <br />
&nbsp; 行列并行分组的交叉表 <br />
&nbsp; 多数据集的交叉表 <br />
&nbsp; 计算比去年增长数 <br />
&nbsp; 计算比去年同期增长数 <br />
&nbsp; 计算占比 <br />
&nbsp; 显示排名 <br />
&nbsp; 按照汇总值排序的交叉报表 <br />
&nbsp; 交叉表折页处理 <br />
&nbsp; 交叉表居中</a> 
<img src ="http://www.blogjava.net/report9d/aggbug/206936.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/report9d/" target="_blank">report9d</a> 2008-06-10 16:15 <a href="http://www.blogjava.net/report9d/archive/2008/06/10/206936.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>使用java对象作报表数据源</title><link>http://www.blogjava.net/report9d/archive/2008/05/29/203727.html</link><dc:creator>report9d</dc:creator><author>report9d</author><pubDate>Thu, 29 May 2008 02:07:00 GMT</pubDate><guid>http://www.blogjava.net/report9d/archive/2008/05/29/203727.html</guid><wfw:comment>http://www.blogjava.net/report9d/comments/203727.html</wfw:comment><comments>http://www.blogjava.net/report9d/archive/2008/05/29/203727.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/report9d/comments/commentRss/203727.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/report9d/services/trackbacks/203727.html</trackback:ping><description><![CDATA[<font face="arial,sans-serif" color="#000000">一般java报表工具，允许用户使用java类来作动态数据来源，但这个类必须符合工具要求的接口，如JasperReport的JRDataSource接口，杰表的BeanDataset接口。这种方式确实为用户提供了一种在报表工具中使用java对象的途径，但同时，因为需要实现特定接口，额外地增加了编码工作。<br />
<br />
有没有一种不需要实现接口直接使用java对象的办法呢？杰表.2008提供了这样的方法。<br />
<br />
假设你有下图（a）所示的两个类Student和Person，你可以使用Student的getMembers()方法，取得该学生的家庭成员列表，每个家庭成员用一个Person对象表示，该对象包含与该学生的关系，姓名，性别等信息。注意,这两个类没有实现任何额外的接口。<br />
<img alt="" src="http://www.jatools.com/image/tech/javabeandata1205.gif" /><br />
<br />
如果你有一个Student对象，那么，在杰表.2008中，你就可以做成如上图（b）所示报表，上半部分列出该学生的本人信息，下面显示该学生的家庭成员表。更多内容请参照：<br />
<br />
<a class="l2" href="http://www.jatools.com" target="_blank">使用java对象作数据源&nbsp;<br />
使用java数组&nbsp;<br />
java数组节点访问&nbsp;<br />
List，iterator数据源&nbsp;<br />
嵌套的java对象数据源&nbsp;<br />
ResultSet数据源&nbsp;<br />
TableModel数据源<br />
</a>&nbsp;<br />
</font>
<img src ="http://www.blogjava.net/report9d/aggbug/203727.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/report9d/" target="_blank">report9d</a> 2008-05-29 10:07 <a href="http://www.blogjava.net/report9d/archive/2008/05/29/203727.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>多动鼠标少动脑，java报表工具的简约之美</title><link>http://www.blogjava.net/report9d/archive/2008/05/20/201563.html</link><dc:creator>report9d</dc:creator><author>report9d</author><pubDate>Tue, 20 May 2008 01:17:00 GMT</pubDate><guid>http://www.blogjava.net/report9d/archive/2008/05/20/201563.html</guid><wfw:comment>http://www.blogjava.net/report9d/comments/201563.html</wfw:comment><comments>http://www.blogjava.net/report9d/archive/2008/05/20/201563.html#Feedback</comments><slash:comments>5</slash:comments><wfw:commentRss>http://www.blogjava.net/report9d/comments/commentRss/201563.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/report9d/services/trackbacks/201563.html</trackback:ping><description><![CDATA[<p><span style="font-family: 宋体">近年来，纯</span>java<span style="font-family: 宋体">的类</span>excel<span style="font-family: 宋体">报表工具异军突起，在国内报表工具市场中取得了初步成功。目前市场上主流的纯</span>java<span style="font-family: 宋体">类</span>excel<span style="font-family: 宋体">的报表工具有润乾、杰表</span>4.0<span style="font-family: 宋体">、</span>finereport<span style="font-family: 宋体">等。</span></p>
<p><span style="font-family: 宋体"><br />
类</span>excel<span style="font-family: 宋体">报表工具之所以受国人追捧，一方面是契合了国内用户喜欢用格子做报表的习惯，另一方面，由于扩展的类</span>excel<span style="font-family: 宋体">报表模型的推出，比如润乾的非线性多源分片模型，杰表</span>4.0<span style="font-family: 宋体">的超级</span>cell<span style="font-family: 宋体">模型，满足了用户编制复杂报表的需求。</span></p>
<p><span style="font-family: 宋体"><br />
然而，通过这几年的应用，类</span>excel<span style="font-family: 宋体">报表工具的问题也大量暴露出来，主要集中在易用性和性能两方面，根本原因在于类</span>excel<span style="font-family: 宋体">报表工具模型本身的不合理。用类</span>excel<span style="font-family: 宋体">报表模型去解决复杂报表需求，就像用十字锣丝刀去开启一字锣丝一样，虽然勉强能用，但终归不是问题的正解。</span></p>
<p><span style="font-family: 宋体"><br />
现在，因为复杂报表需求概念被炒得火热，几乎每一个报表工具厂商都声称自己能做中国式的复杂报表，但你若追问一句，你们的报表工具好使嘛？需要多长时间能掌握？我估计百分之百哑口。</span></p>
<p><span style="font-family: 宋体"><br />
选用报表工具的目的是为了提高开发报表模块的效率，如果报表工具学习起来困难，不易掌握，那么，虽然报表工具给你带来了设计报表的便利，但也同时给你制造了不必要的学习障碍。在</span>it<span style="font-family: 宋体">企业人才流动频繁的背景下，降低报表工具的学习难度，就等于降低项目的人工成本和风险，所以报表工具易用性是考量报表工具的一个重要指标。往极端了说，如果一个报表工具，需要有一个爱因斯坦的大脑才能使用，这样的报表工具不用也罢。</span></p>
<p><span style="font-family: 宋体"><br />
用户是上帝，当用户有很多报表工具产品可供选择之时，用户对我们报表厂商提出了更高的要求，他们不会再满足于问你能不能做，还会问你上手够不够快。面对如此新的市场要求，有些报表工具厂商没有引起足够重视，仍然延续着营销亢奋，研发萎靡的做法，一个概念卖到低，不能不令人忧虑。杰表团队坚信，一个好的产品只有持续地倾听市场的声音，并体现在我们提供的产品与服务上，才能取得持续的成功。</span></p>
<p><br />
2003<span style="font-family: 宋体">年，融合类</span>excel<span style="font-family: 宋体">模型的杰表推出市场，到</span>2006<span style="font-family: 宋体">年春，决定全面重写杰表框架，停止一切主动的市场营销活动。为什么要重写框架呢？我们需要找到一种更易使用的报表模型。因为经过多年的市场检验，我们意识到类</span>excel<span style="font-family: 宋体">报表报表模型，不管是杰表</span>4.0<span style="font-family: 宋体">的超级</span>cell<span style="font-family: 宋体">模型还是润乾的多源分片模型，都不能很好解决复杂报表问题。</span></p>
<p><span style="font-family: 宋体"><br />
类</span>excel<span style="font-family: 宋体">模型不易学习的根本原因是，没有一个可视化的数据模型。所以你需要在非线性、多源分片、轴这些豪华概念的面前，费尽脑力。另外，采用单元格即数据的做法，完全违反了</span>MVC<span style="font-family: 宋体">的软件哲学，使之报表工具的灵活性大受限制。总之，非线性多源分片技术确实很数学，但很不哲学。</span></p>
<p><br />
2008<span style="font-family: 宋体">年</span>5<span style="font-family: 宋体">月，经过持续两年的潜心研发，杰表</span>.2008<span style="font-family: 宋体">正式面市。杰表</span>.2008<span style="font-family: 宋体">采用可视化的</span>dom<span style="font-family: 宋体">驱动报表模型，采用</span>MVC<span style="font-family: 宋体">架构，从根本上解决复杂报表工具学习难的问题。下图是杰表</span>.2008<span style="font-family: 宋体">设计器中展现的可视化报表模型。更多内容参见</span>&nbsp;<a class="l2" href="http://www.jatools.com/" target="_blank">www.jatools.com</a><br />
<br />
<img alt="" src="http://www.jatools.com/tech/visual.gif" />&nbsp;<br />
</p>
  <img src ="http://www.blogjava.net/report9d/aggbug/201563.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/report9d/" target="_blank">report9d</a> 2008-05-20 09:17 <a href="http://www.blogjava.net/report9d/archive/2008/05/20/201563.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item></channel></rss>