http://www.cnblogs.com/webreport/archive/2007/07/23/828512.html
web报表开发技术专题
摘自^
因为打印功能的重要性,所以进入web开发后,很快就开始关注web打印功能的开发了,web打印有下面的相关问题需要考虑清楚:
1 在客户端还是服务器端打印?考虑到数据传递到客户端的速度问题,在服务器端做大数据量的打印还是不错的选择。但在后台打印必竟很不方便,所以主要还是要在客户端打印,即利用客户端的打印机打印。
2 是导出为PDF或EXCEL文件后打印还是直接打印?将要打印的内容生成为PDF或EXCEL文件后再打印,这也是一种方式,这种方式实际上也就几乎不需要专门考虑打印功能的开发了,开发工作量少。但其缺点也很明显:需要客户端安装打开PDF的软件(或EXCEL软件),需要在另一个软件中打印,步骤多,无法实现点击后直接打印,这种打印模式也无法实现某个单据是否打印了要当作一个标志保存起来的场合。
3 是利用IE的打印还是自己实现打印?如果打印功能全部由自己实现,因为要处理数据,样式,位置,图片等的打印,自然程序量小不了,往往会使第一次的下载量很大。而且往打印控件中传递要打印的数据的过程会比较复杂而且慢。
4 第一次打印时需不需要下载ActiveX控件?如果不需要,则无法用javascript脚本程序控制客户端的打印机,无法自定义纸张,无法不弹出打印对话框就直接打印。也就是说,最终用户在每次打印时都要手工选择好打印参数(如打印方向,纸张大小等),这样显然会使最终用户的操作比较麻烦。
最开始我是设想直接用javascript脚本来计算分页,直接利用IE中的打印机制来解决打印问题。后来随着IE的版本升级,安全机制不断完善。在不下载ActiveX插件的情况下,IE的安全机制是不可能让你用javascript脚本来全面控制客户端的打印机的。试想如果这样的话就有可能浏览网上的某个网页时,你连接的打印机就自动开始打印东西了。也就是说,要想弄好Web打印,必须要在客户端下载插件。在中国流氓插件泛滥的情况下,大家一看到插件都怕了。要不就要下载插件,要不打印就不太方便。这成了web打印的死结。且觉得一样子无法解开,真是尴尬的Web打印。
既然最佳的方式是无解的,哪就退而求其次吧。用一个小的轻量级的activeX控件来控制客户端的打印机吧,这样第一次下载这个activeX控件是也不会很慢。
记得以前在卖web打印控件时,有一用户将scriptx的网站告诉我,说要能实现这样的功能就买。于是便开始研究起scriptx来。按照我以前用visual c++编程的经验,觉得大体就是用钩子函数来实现。结合IE的打印模版技术,终于基本上达到了。用visual c++的ATL(为了减少字节而没有用MFC)做了一个webprint.dll,这个webprint.dll压缩成cab文件后只有75K,和一个网页的大小相当。这样在第一次下载时便不会太慢了。因为真正的打印机制还是调用IE内部的,并没有在webprint.dll里面实现具体的打印功能,所以就不需要将要打印的内容传递到webprint.dll中,这是区别于其它用activex控件实现web打印的重要一点。如果靠activex控件来实现全部的打印功能的话,就必然要求要将打印的内容传递到activex控件中,这个传递的过程会比较麻烦而且速度也慢。Webprint.dll只完成向IE的内部实现的打印功能模块传递打印的基本参数(如:页面大小,页边距,打印方向,直接打印),网页上显示什么内容就打印什么内容,没有向webprint.dll传递打印内容的过程。如下图所示的打印预览界面图:
实际上,打印的需求很简单,无非就是:分页,页眉页脚,页边距,打印方向,自定义纸张,直接打印,弹出打印对话框再打印,预览,放缩打印,成批打印,套打等功能,打印的需求很固定,明确而且通用。将一个多页的报表一页页地打印出来这样一个简单的需求,在网页上却相当麻烦,我也是在不久前才将它在e表中算是比较理想的实现了,即可以象cs程序一样,点一下按钮,就将多页的报表一页页地打印出来。这其中要考虑到在互联网上从服务器端向客户端传递大量数据时的分页处理,以及打印了一页数据再传递另一页数据的问题。因为如将要打印的多页内容一次从服务器端全部发送到客户端的话,在当今互联网的条件下很可能会因速度慢而受不了。只能每次从服务器端发送一页数据到客户端,打印,然后再发送下一页数据到客户端,再打印,如此下去直至打印结束。这一点也是web打印比c/s程序的打印要麻烦的地方。
总之,Web打印问题已经和浏览网页速度慢的问题一样,成为Web程序的难题之一。只能作一些权衡。比如象国外因为PDF查看工具的流行,大多选择生成PDF文件后再打印的方式。我研究Web打印解决方案多年,最终采用的轻量级的ActiveX控件的Web打印方案,是我现在认为最适合中国国情的方案。也许以后还能找到更好的。
分享到:
相关推荐
web打印报表控件Lodop,很简单,实用的
Web打印的解决方案之普通报表打印 .docWeb打印的解决方案之普通报表打印 .docWeb打印的解决方案之普通报表打印 .docWeb打印的解决方案之普通报表打印 .docWeb打印的解决方案之普通报表打印 .docWeb打印的解决方案之...
能把WEB页面报表转换成PDF文档 对报表打印测试非常有用,不需要打印出来,直接转换成PDF文档就可看到打印效果. 安装顺序,先安装converter.exe,再安装CuteWriter.exe
Web打印的解决方案之普通报表打印 Web打印的解决方案之普通报表打印
一个简单的页面打印excel示例希望对大家的开发有所帮助,简单异常简单的小例子。
Web模型是在传统的C/S模 型的基础上发展起来的一种新的Browser/Server计算模式。Browser/Server模型简化了C/S中的客户端,客户端只需装上操作系 统、网络协议软件及浏览器;而服务器端则集中了所有的应用逻辑,开发...
利用XML实现通用WEB报表打印
水晶报表ActiveX 打印(web打印) 解决方法 解决控件无法安装, 安装控件也没卡死 部署到到服务器打印一闪而过。
ATGrid WEB报表控件打印插件
Web上的良好的打印解决方案,WinForm的打印预览体现,报表自动化,支持直接打印,页小计,统计,转成金额大写,一维码显示, 图片显示等功能,满足中国式报表的常见功能需求。 Web报表编辑器: * Web上良好的报表...
Java实现Web报表打印功能
微软本地报表web打印方法,很方便,我试过
Web上的良好的打印解决方案,WinForm的打印预览体现,报表自动化,支持直接打印,页小计,统计,转成金额大写,一维码显示,图片显示 ,条件样式等功能,满足中国式报表的常见功能需求。 Web报表编辑器: * Web上...
c#asp.net表格Html数据模板转换Pdf文件web打印pdf报表dll
Web上的良好的打印解决方案,WinForm的打印预览体现,报表自动化,支持直接打印,页小计,统计,转成金额大写,一维码显示等功能,满足中国式报表的常见功能需求。 Web报表编辑器: * Web上良好的报表设计用户体现...
ePrint是一个全面强大的web打印的解决方案。它可以直接在IE浏览器中可视化的设计各种复杂的打印模版, 轻松解决Web套打问题。也可以直接打印用ASP,JSP等动态程序生成的HTML页面。 ePrint内含一个在vc7.0上开发的...
Web上的良好的打印解决方案,WinForm的打印预览体现,报表自动化,支持直接打印,页小计,统计,转成金额大写, 一维码显示等功能,满足中国式报表的常见功能需求。 Web报表编辑器: * Web上良好的报表设计用户...
Web上的良好的打印解决方案,WinForm的打印预览体现,报表自动化,支持直接打印,页小计,统计,转成金额大写,一维码显示, 图片显示等功能,满足中国式报表的常见功能需求。 Web报表编辑器: * Web上良好的报表...
提供独有的报表查询展示功能,让报表查询展示、打印、打印预览及数据导出等集成一体化实现。轻松实现中式表格报表、动态报表、多层表头、票据套打、交叉表、统计图表、条形码等,是中式复杂报表的最佳开发工具。提供...
winform 水晶报表打印,无预览 。USB 热敏打印机。