web报表打印系统解决方案.doc

上传人:s9****2 文档编号:503660260 上传时间:2022-11-04 格式:DOC 页数:26 大小:961.50KB
返回 下载 相关 举报
web报表打印系统解决方案.doc_第1页
第1页 / 共26页
web报表打印系统解决方案.doc_第2页
第2页 / 共26页
web报表打印系统解决方案.doc_第3页
第3页 / 共26页
web报表打印系统解决方案.doc_第4页
第4页 / 共26页
web报表打印系统解决方案.doc_第5页
第5页 / 共26页
点击查看更多>>
资源描述

《web报表打印系统解决方案.doc》由会员分享,可在线阅读,更多相关《web报表打印系统解决方案.doc(26页珍藏版)》请在金锄头文库上搜索。

1、web打印/套打 自从开发web程序以来,web打印就一直是困饶大家的大问题。基于web的打印,难度在于要将浏览器中呈现的html,精确地打印到票据中,而且能够实现对分页位置的控制。下面就IE浏览器所能采用的打印解决方案,来个汇总分析。一、 浏览器的打印功能菜单 这种方案的优势是不需要对浏览器作任何扩充,是最简单的办法,但问题也最多,如:1 不能精确分页。 浏览器一般是根据用户设置的页面大小,web页面的内容多少,来自行决定分页位置,程序员很难控制。会有页脚页眉干扰。 2 不能准确地控制边距及打印文字。 3 不能解决连续打印。 比如,不是仅打印一张票据,而是连续一次打印若干个票据。二、 使用w

2、ebbrowser控件+ javascript 这实际上,是浏览器打印功能菜单的一种程序调用,与打印功能菜单没什么两样。分页的问题仍然存在,只不过,可以让用户不用去点菜单,直接在网页中的一个按钮,或一个链接里面调用罢了。三、 使用print css 这是一种最理想的实现web套打的方法。这种方法通过在html文档中,嵌入打印相关的css样式,来实现对html文档输出打印的控制,比如设置纸张大小,纸张纵横方向,打印边距,分页等。显而易见,这种方式成本小,不需要下载任何插件,而且跨平台性非常好。print css推出已经有些时日,但遗憾的是,至今没有一个厂商的浏览器很好地实现了这些标准,这使得程序

3、员目前还不能利用print css进行实际的开发。关于打印css,参见: http:/css- 四、 使用pdf文件 用这种方式,就是从服务器端下载一个pdf文件流,在IE中用adobe插件打开,然后用adobe的打印菜单进行打印,虽然这种方案,也能实现精确套打,但需要下载adobe插件。这是国外报表工具经常推荐的一种打印方法,但在pdf不那么普及的中国,这种方案不是最好选择。 五、 采用纯ActiveX 这种方案就是下载一个控件,票据的数据不再以html方式呈现,而是呈现在ActiveX中。这种方案的优点是打印的精确度高,分页的可控性好,但缺点也是很明显的,嵌入ActiveX控件破坏了web

4、应用的整体html风格,且这样的控件比较大(一般超过1M,下载颇费时间)。六、 采用Applet方式 采用Applet方式,分页或精确打印,都可以做到完美,但缺点也很明显,表现在:1安装Applet成本巨大。需要下载十几M的文件。 Applet本身可能并不大,但运行Applet所需的jre一般至少10几M(jre1.4.2 , 15.45M)。用户需要极大的耐心,来进行打印。 2打印报表时,需要重新向服务器检索数据,效率低。 因为Applet方案,一般采用html方式呈现数据,打印时Applet必须向服务器检索同一张票据的数据,看上去,是打印了当前页的票据,实际上,Applet根本不会用当前h

5、tml页的数据来打印,而是向服务器下载数据到Applet中来打印。也就是说,打印的话,必须两次请求,一次html呈现,一次用来打印。 七、 轻量级的ActiveX打印方式轻量级的ActiveX打印方案的优点是:1. 效率高; 可以直接打印指定的html文档,不必向后台再次提起请求。 2. 能做到精确打印,分页; 3. 功能丰富, 可以利用该控件,实现对当前票据文档的打印,预览,及多个html文档的连续打印。4. 下载量小, ActiveX只有75K。 e表就是采用第七种方式来实现报表的打印。e表内置了一个用c+写的轻量级的ActiveX控件来精确地控制客户端的打印机。一举解决web打印问题。近

6、期因为专注于用c# 实现web报表,积累了一些经验和心得,也写过一篇介绍文章,也有网友提出没有说清楚。现觉得想用单篇文章来说明web报表开发难免会大而空,落不到实处。因而便想到每篇文章只关注web报表开发中一方面,由多篇文章而形成一个web报表开发的系列文章,这些web报表开发的系列文章无先后次序,主从之分。每篇文章只是以一种视角来看待web报表开发而已。大家可以只选自己感兴趣的部分来看,这样也能节约大家的时间。这便是web报表开发技术专题的由来。废话少说,今天便从小小的序号说起吧!web报表开发技术专题一:序号问题在中国式报表中,常常会见到单元格中有 1,2,3,4 .成一行或一列排列。这便

7、是序号。显然这些序号值在数据源中是不存在的,需要web报表开发工具根据一定的规则运算出来。报表中的序号问题常常被一些通用的web报表开发工具所忽略,有时常常会因为一个序号无法生成而被迫要写代码,使web报表开发的效率受到大大的限制。凡是总须研究,才会明白。下面就来看看中国式报表中的序号大体有哪些样式?* 固定序号:即在表格中固定好的序号值,不会随数据内容的多少而变化。这种最简单了,直接在表格上输入序号值就可以了。* 动态序号:即序号值是不固定的,是根据数据源中的数据而定的。比如:记录数为8条,则序号为从1至 8。* 汉字序号:因为我们是中国人,序号常常用一,二,三,四等等来表示,这就需要必须能

8、将数字序号转换成汉字序号。有时还会在序号的基础上加上括号(如:(1)或顿号(如:一、)等等。* 序号横向排列:序号有时会纵向排列,也常常会要求能横向排列。* 多列序号:分组报表是最常用的报表之一,由此就有根据每个分组字段都会有一个顺序号的问题。* 跨行的序号:分组报表往往会在其中有小计行,而如果这些小计行中不能要序号,就要求序号要跳过这些小计行。* 序号的延伸-序列值:有时报表中会有甲乙丙丁等序列值,这也可以看成是序号的一种吧。文字未免有些空洞,下面以几张图的形式来说明一下:在这个报表中,共有三列序号:总序号,地区序号,产品序号,总序号是直接从1开始的序号值,地区序号是对于每个地区来说从1开始

9、的序号值,产品序号是对于每个地区的每个产品来说是从1开始的序号值。这是一个典型的多列序号的报表。在这个报表中,红色字的序号是跨小计行的,即小计行中是没有序号的。这是典型的跨行的序号的报表。同时在此报表的第二行兰色字的序号是横向排列的。即有多少个地区就有多少个序号值。这是典型的动态序号和序号横向排列的报表。在这个报表中,有汉字序号:一,二等,也有(1)的序号形式。也有序号的嵌套及多个层次的问题。上述是我想到的web报表中的序号的形式,还希望大家补充。上面给出了在中国式报表中的序号的可能的形式,相当于web报表开发的序号方面的需求。下面给出在e表中是如何设计并实现这些序号需求的。 在e表中解决上述

10、复杂的序号问题还是靠提炼这些需求,总结出需要设置的报表公式,然后由用户根据自己的需要组合这些公式来实现的。当然,这些公式并不仅仅是为了解决序号的问题而特别设置的。上次从一个小小的序号开始了web报表开发技术专题,这回来讲一讲web报表开发工具的核心-数据集的变换。 1 为什么说web报表开发工具的核心是数据集的变换 数据集的变换,即报表的数据运算变换的能力。一个报表由两部分组成:数据及样式。数据一般都是从数据集而来的。样式无非就是一些静态的文字线条图片而已。对于一个web报表开发工具来说,实现样式是比较单一的。而数据方面则大有门道。报表上的数据流程一般是先由SQL语句或一个程序来得到数据集,然

11、后将数据集中的数据展现到含有静态样式的报表文件上,从而得到一个真正的报表。如何设计将变换后的数据集中的数据展现到含有静态样式的报表文件上,是每一个web报表开发工具首先必须考虑好的问题。这是web报表开发工具的主框架。它设计的好坏将直接影响web报表工具的开发效率。所以说:web报表开发工具的核心是数据集的变换。 2 数据集变换的相关问题有: A 多数据集时是否必须要设置之间的关联关系 一般来说在一个报表上常需要多个数据集给数,当一个报表上有多个数据集时是否必须要设置这多个数据集之间的关联关系,如需要设置关联关系,哪么在web报表开发工具的内部程序就好做了,只需要根据关联关系来将多个子数据集中

12、的数据展现到含有静态样式的报表文件上,这种方式不好的地方在于当报表内容和数据库物理表中的数据差异大时,往往需要写复杂的SQL语句或编程来准备数据集中的数据。而如果不需要设置这多个数据集之间的关联关系,则需要web报表开发工具内部协调好多数据集在报表上的展现。 B 数据集中的数据在报表上展开时能否变换(排序,过滤) 当一个数据集中的数据在报表上展开时是否可以再排序,设置条件过滤,以及一个数据集中的数据是否可以在报表上多次展开(当然是在不同的位置)。 C 数据集的运算函数.(带条件的sum等) 一般来说,肯定需要提供全面的数据集的运算函数,如对某个字段sum,同时应可以加上条件。 D 报表计算的主

13、流程是以数据集中的记录来循环计算还是以单元格上的公式来循环计算? 大凡写过报表开发工具的人都清楚,报表计算的过程是必须最先确定清楚的问题。这个也是评判一个web报表工具的能力的最重要的一点。以数据集中的记录来循环计算的好处是实现起来简单,报表计算的速度快;但坏处是牺牲了报表计算这一块的柔性化能力,将应对复杂报表的重担全压在生成数据集中的数据这一块了。以单元格上的公式来循环计算实现起来复杂,要处理好单元格的引用关系以及计算次序。但这种计算模式有利于应对复杂的中国式报表。 E 数据集中的数据在报表上如何放置? 显然是希望数据集中的数据可以在报表上随心所欲地放置。但要达到此点需要web报表工具内部要

14、做很多的协调工作。自然就希望将数据集中的数据限制在某些区域放置,实际上就是把报表分成明细区,分组区,标题区等等,但显然这样会大大限制web报表工具的开发能力。 F 数据集中的数据在报表上的展开次序。 一种做法是标识好哪个是主数据集(即最先展开)?哪个是子数据集(即跟随主数据集而展开)。这是条带状报表工具的常用做法。另一类做法是数据集中的数据随所在的单元格展开。而在单元格上设置主单元格,子单元格。这个是新一代web报表开发工具-润乾报表finereport( for java)和e表(for .net)的做法。 3 现有报表工具的做法早期的报表工具在数据处理手段上相当单一,一般做法都是依赖于SQL语句或者存储过程,将需要的数据返回给报表系统,而报表系统能够做的仅仅是一些简单的四则运算,或通过固定函数取最大最小值等。近年来,一些报表开发工具在数据集的变换方面进行一些改良。比如数巨报表就加上了数据微引擎技术,以应对复杂的中国式报表。这种做法是在数据集上增加一层运算层,以提高数据的柔性化能力。其实质是对传统的条带状的报表工具的改良。象润乾报表finereport ( for java)以及e表(for .net),是采用全新的数据处理模式。下面详细地介绍一下e表的报表运算原理。下面演示一个简单列表的扩展过程,为了说明方便,去掉单元格的样式部分的同步:A 准备开始计算时

展开阅读全文
相关资源
相关搜索

当前位置:首页 > 医学/心理学 > 基础医学

电脑版 |金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号