Web打印控件设计

我前一段时间开发一个B/S项目,需要用到打印功能,如是上网到处查找有关Web打印的控件(呵呵,我向来比较喜欢使用成熟的控件,这样用不着自己去开发,自己开发很多时候是费力不讨好,再说一个三五几百块的注册费用,俺还是付得起,自己去搞费上几天功夫,其工钱远不止这个数。),可是找来找去,挺让我失望的,真没想到一个Web打印有这么难吗,网上流传的商业Web打印控件,其复杂程度让我望而却步,不得不自己搞了一个Web打印控件,在项目中用起来挺顺心的,后来有几个朋友,也要用到Web打印的功能,我就把我这个控件发给他们,他们说用起来也挺不错的。
现在网上流传的Web打印控件,在我看来主要是分两种,一种是水晶报表派,一种是IE打印派。水晶报表派当然是以水晶报表为代表,这种的特点是先设计好报表文件,然后在程序中组织好数据源,调用报表文件,然后进行预览或打印。而IE打印派,国内的Web打印控件通常都是这一种,在用户客户端注册一个Activex控件,然后用JavaScript定义报表的格式,定义报表的数据内容(也可以通过URL读取),然后再用Windows的打印API进行预览或打印。
水晶报表作为微软推荐的报表工具,其功能强大,但是目前只能用于.NET平台,其通用版本的功能也有限制,比如不能直接打印,不能自定义纸张的大小等。而IE打印,我也下载过几个控件试用,发现其报表设计繁琐,既当爹又当妈的,既要用JavaScript定义报表的格式,又要组织报表的数据,仿佛一下子回到DOS时代,一个操作窗口,需要自己先计算好各显示的坐标,然后再一一的画出来,这样的报表设计用起来使人发狂,一二个报表还可以勉强对应,要是多做几个就累死人了,而且以后维护修改也很麻烦。
作为报表设计的核心,我想不论是C/S架构,还是B/S架构,无非就是两点,一是报表的数据源,二是报表的格式。无论报表多么复杂,都脱离不了这两点。作为报表的数据源,我们习惯用SQL语句产生,当然对于过分复杂的分析报表,有时候我们也不得不先产生临时表,通过较复杂的程序把数据组织好,再进行打印。报表的格式我们通常利用报表设计工具把报表设计好,然后作为文件保存。程序中打印报表,通常是先组织好数据集,然后调用报表文件,传递报表所需参数,最后进行报表的预览或打印。
C/S架构下的打印很成熟,用户一般只需单击按钮,就可以把报表预览或直接打印出来。报表的设计也很成熟,无论是古老的FoxPro,还是VB、Delphi都可以进行方便高效的报表设计,只要报表不是很复杂,工具熟练,一天做十几份报表都可以的。
我想作为B/S架构的报表也可以借鉴C/S架构的设计理念进行设计,坚持报表的数据源和报表的格式分开,用做C/S架构的报表工具来做B/S架构的报表,这样既可以做到C/S架构下报表设计的方便高效,又可以做到B/S架构的分布性。当然由于B/S架构的特殊性,现有的打印,特别需要用到自定义纸张大小和直接打印等功能,不得不采用Activex控件。
我按照用C/S架构的报表工具来设计B/S架构报表的理念,设计开发了自己的Web打印控件,该控件的报表工具是FastReport,该报表工具的功能可以和水晶报表媲美,使用起来也挺简单的,为了适应中国式报表的划线,我还在FastReport的基础上开发6个设计按钮:缩放宽度最小、缩放宽度最大、缩放高度最小、缩放高度最大、水平首尾对齐、垂直首尾对齐,利用这6个按钮,则加上FastReport的边框和对齐功能,就可以很高效很准确的划出表格线。
有了这个设计工具,我们就可以很高效的设计报表了,不再需要自己一笔一划的很原始的方式去画报表。但还需解决一个问题,就是服务端的数据和报表格式如何传递到客户端电脑。XML作为网络通用语言可以作为传递的载体,当然这其中要进行相应的转换,不同语言,不同数据库可能转换不一样,我在示例中详细列出了常用的语言和数据库如何进行转换,有兴趣的朋友可以下载回来,看一下就明白了。
我设计的这个Web打印控件当然也不是百分之百的完美,因为一次性把报表的数据传递给客户端,若数据庞大,则用户等待的时间过长,这个可以在程序中控制,检测数据超过多少页,提示用户分次打印就可以避免此问题。
报表控件本身有800多K,不过我觉得这个倒不是什么问题,就是2M的带宽也只需三四秒钟就可下载完,那些所谓的轻量级打印控件,也有200多K,只要报表控件好用,再大一点也无所谓,反正就下载一次而已。还有报表还没有申请数字用证,以后如果用的人多了,有了银子,我会去申请的,哈哈。不过作为Activex控件之王的Flash控件,现在都改为手动安装了,看来这个也无所谓了,大家也用不着把白白花花的银子交给微软去搞什么用证了。
我设计的Web打印控件的演示网址:[url]http://www.xinyuerj.com/ASP/[/url] [url]http://www.xinyuerj.com/ASP.NET/[/url]
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
控件功能强大,却简单易用,所有调用如同JavaScript扩展语句, 主要接口函数如下: PRINT_INIT 打印初始化 SET_PRINT_PAGESIZE 设定纸张大小 ADD_PRINT_HTM 增加超文本项 ADD_PRINT_TEXT 增加纯文本项 ADD_PRINT_TABLE 增加表格项 ADD_PRINT_SHAPE 画图形 SET_PRINT_STYLE 设置对象风格 PREVIEW 打印预览 PRINT 直接打印 PRINT_SETUP 打印维护 PRINT_DESIGN 打印设计 ... 样例清单 1.如何在页面内嵌入控件见样例一 2.如何选材打印当前页面内容见样例二 3.如何用代码生成打印页见样例三 4.如何打印设计和定位套打见样例四 5.如何控制纸张大小和连续打印见样例五 6.如何输出多页长文档及双面打印见样例六 7.如何定向输出见样例七 8.如何打印图片见样例八 9.如何用程序加载打印维护背景图见样例九 10.如何控制打印样式(STYLE)见样例十 11.如何直接打印条形码见样例十一 12.如何读写本地文件见样例十二 13.如何打印旋转内容见样例十三 14.如何按URL打印见样例十四 15.如何打印表格的页头页尾见样例十五 16.如何设置预览窗口大小见样例十六 17.如何发打印机指令或直接读写端口见样例十七 18.如何打印幅面高度不固定的票据见样例十八 19.如何内嵌显示及预览时包含背景图见样例十九 20.如何强制分页并预览多页卡片见样例二十 21.如何控制打印维护的功能权限见样例二十一 22.如何构建自己的纯WEB打印预览见样例二十二 23.如何居中打印超文本见样例二十三 24.如何选择界面皮肤见样例二十四 25.如何指定输出到哪页或仅预览见样例二十五 26.如何提高多页打印的性能见样例二十六 27.如何导出数据到Excel文件见样例二十七 28.如何快速读取客户端系统信息见样例二十八 29.如何使用其它长度单位见样例二十九 30.如何分页输出页面内容见样例三十 31.如何打印表格的分页小计或合计见样例三十一 32.如何实现清晰的图表打印见样例三十二 33.如何实现甘特图等的图表打印见样例三十三 34.如何使用百分比%和满页打印见样例三十四 35.如何获得打印结果和程序代码见样例三十五 36.如何在设计过程中用js编辑内容见样例三十六 37.如何打印公章效果图见样例三十七 38.如何用BASE64编码输出图片见样例三十八 39.如何打印田字格、上划线等文本见样例三十九 40.如何进行数据格式转换见样例四十 41.如何把内容关联后按顺序打印见样例四十一 42.如何把整页内容缩放打印见样例四十二 43.如何分页打印综合表格见样例四十三 44.如何缩放打印单个超文本内容见样例四十四 45.如何获得打印状态及最终结果见样例四十五 46.如何设置右边距和下边距见样例四十六
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值