web 打印,web打印控件的三种实现方法

http://www.blogjava.net/midstr/archive/2010/06/18/256597.html?opt=admin web 打印,web打印控件的三种实现方法 zz 做管理系统的时候,打印一直是个棘手的问题,做B/S的系统这个问题就更加突出了!下面举出三种常用的web打印处理方式 1、利用word或者excel来实现web打印(如果不修改ie设置,可以在web服务器端生成xls文件,然后通过xlBook = xls.Workbooks.Open(remotePath) 获取对象打印) 实现过程:先将需要打印的数据导入到word或者excel中,再利用word或者excel的打印功能来实现web打印。 下面以excel为例实现如何打印的过程 将网页中数据导入excel中的方法有很多,这里先介绍一种,利用ActiveX控件的方式,即 Excel.Application, 这个控件是MS为excel提供的编程接口,在很多种编程语言种都可以通过该接口来操纵excel表格。 下面用javascript脚本来实现一个简单的例子。 < script language="javascript"> function ExcelPrint(){ var excelApp;//存放Excel对象 var excelBook;//存放Excel工件簿文件 var excelSheet;//存放Excel活动工作表 try{ excelApp = new ActiveXObject("Excel. Application");//创建Excel对象} catch(e){ alert("请启用ActiveX控件设置!"); return;} excelBook = excelApp.Workbooks.Add();//创建Excel工作簿文件 excelSheet = excelBook.ActiveSheet;//激活Excel工作表 var rowLen = printTable.rows.length;//table对象的行数 for (var i=0;i< rowLen;i++){ var colLen = printTable.rows(i).cells.length;//table对象的列数 for (var j=0;j< colLen;j++)//为Excel表的单元格赋值 excelSheet.Cells(i+1,j+1).value = printTable.rows(i).cells(j).innerText;} //将表格中的每个单元格的innerText导入到excel的单元格中 excelApp.Visible = true;//设置Excel对象可见} excelSheet.PrintOut(); //打印工作表 excelBook.Close(true); //关闭文档 excelApp.Quit(); //结束excel对象 excelApp=null; //释放excel对象 < /script> 注意: 运行该程序的前提是 IE要允许对没有标记为安全的Activex控件进行初始化和脚本运行。设置方法如下: 打开控制面板→Internet选项→安全性→自定义级别→对没有标记为安全的ActiveX控件进行初始化和脚本运行→选中启用,这样我们的程序就可以运行了。如果没有启用该ActiveX控件设置,那么程序在执行创建Excel对象时会抛出一个异常,这时可以通过catch()语句来捕获这个异常,并且做出相应的处理。 运行该程序必须客户端安装了MS EXCEL,否则Activex驱动不了。 2、利用浏览器自带的打印控件来实现web打印 实现过程:直接调用IE的打印功能或者在程序中调用window.print()来实现web打印,页眉和页脚会有网页标题、页码、网址,日期等信息,这些打印时如果不需要,怎样能去掉呢。做法其实很简单,只有在IE的文件菜单中打开页码设置对话框,去掉页眉页脚中设置的哪些信息,就可以了。但是这需要每个客户端都去手动设置一次。如果不想让每个客户端都手动去设置一次,也可以用代码通过修改注册表的键值来实现。 下面是用VBScript来实现的修改注册表的过程: < script language="VBScript"> dim path, reg 'path存放IE打印设置的注册表地址, reg存放WScript.Shell组件的对象 path = "HKEY_CURRENT_USER/Software/Micro-soft/Internet Explorer/PageSetup" '通过注册表修改打印设置,只修改页眉、页脚和各边界的值 '参数说明:header--页眉,footer--页脚,margin_left--左边界 'margin_top--上边界,margin_right--右边界,margin_bottom--下边界 '页边距的设置中 1对应25.4mm,即margin_left=1表示实际值的25.4mm function pagesetup(header, footer, margin_left, margin_top, margin_right, margin_bottom) On Error Resume Next Set reg = CreateObject("WScript.Shell") if err.Number>0 then MsgBox "不能创建WScript.Shell对象!" exit function end if reg.RegWrite path+"/header", header'设置页眉 reg.RegWrite path+"/footer", footer '设置页脚 reg.RegWrite path+"/margin_left", margin_left'设置左边界 reg.RegWrite path+"/margin_top", margin_top'设置上边界 reg.RegWrite path+"/margin_right", margin_right'设置右边界 reg.RegWrite path+"/margin_bottom", margin_bottom'设置下边界 end function < /script> 还有一点需要注意的是,利用window.print()这样的方法来打印,是直接弹出打印对话框,而不是打印预览的窗口。一般来说用户希望先打印预览一下,然后再打印。或者有的格式固定的,每次都是一样的格式,就希望不弹出打印对话框,直接就打印出来。 还有的用户希望每个打印都是直接和一种纸张绑定好,打印时候直接就调用那种类型的纸张来打印,这样window.print()显然远远不够。 3、利用第三方的控件或者报表软件来实现web打印 实现过程:第三方控件将打印的参数和方法封装成对象,在页面中可以方便的直接调用,例如ScriptX.cab,eprint.cab 都是这种类型的控件。可以直接用代码实现web打印页眉页脚的设置,web打印纸张的绑定,web打印边距的设置,web打印预览,直接web打印。 web打印格式设置,web打印分页,web打印换页重新打印某些信息,某些信息只能第一页打印,某些信息只能最后一页打印等等这些,也都解决方案。 Scriptx没有处理这些的方案,webprint有webgrid和eprint两种解决方案,行列规则的表格式的可以简单webgrid来处理,复杂格式的可以用eprint来设计格式。 一般这种类型的打印控件都是需要收费的,用户可以从经济的角度来考虑。 ========================================================================================================== 一、 浏览器的打印功能菜单 这种方案的优势是不需要对浏览器作任何扩充,是最简单的办法,但问题也最多,如: 1. 不能精确分页。 浏览器一般是根据用户设置的页面大小,web页面的内容多少,来自行决定分页位置,程序员很难控制。会有页脚页眉干扰。 2. 不能准确对齐边边距及打印文字。 3. 不能解决连续打印。 比如,不是仅打印一张票据,而是连续一次打印若干个票据。 二、 使用webbrowser控件+ javascript 这实际上,是浏览器打印功能菜单的一种程序调用,与打印功能菜单没什么两样。分页的问题仍然存在,只不过,可以让用户不用去点菜单,直接在网页中的一个按钮,或一个链接里面调用罢了。 三、 使用print css 这是一种最理想的实现web套打的方法。这种方法通过在html文档中,嵌入打印相关的css样式,来实现对html文档输出打印的控制,比如设置纸张大小,纸张纵横方向,打印边距,分页等。显而易见,这种方式成本小,不需要下载任何插件,而且跨平台性非常好。print css推出已经有些时日,但遗憾的是,至今没有一个厂商的浏览器很好地实现了这些标准,这使得程序员目前还不能利用print css进行实际的开发。关于打印css,参见: http://css-discuss.incutio.com/?page=PrintStylesheets 四、 使用pdf文件 用这种方式,就是从服务器端下载一个pdf文件流,在IE中用adobe插件打开,然后用adobe的打印菜单进行打印,虽然这种方案,也能实现精确套打,但需要下载adobe插件。这是国外报表工具经常推荐的一种打印方法,但在pdf不那么普及的中国,这种方案不是最好选择。 五、 采用纯ActiveX 这种方案就是下载一个控件,票据的数据不再以html方式呈现,而是呈现在ActiveX中。这种方案的优点是打印的精确度高,分页的可控性好,但缺点也是很明显的,嵌入ActiveX控件破坏了web应用的整体html风格,且这样的控件比较大(一般超过1M,下载颇费时间)。市场上的非java类报表产品,一般都采用这种方案。 六、 采用Applet方式 采用Applet方式,分页或精确打印,都可以做到完美,但缺点也很明显,表现在: 1. 安装Applet成本巨大。需要下载十几M的文件。 Applet本身可能并不大,但运行Applet所需的jre一般至少10几M(jre1.4.2 , 15.45M)。用户需要极大的耐心,来进行打印。 2. 打印报表时,需要重新向服务器检索数据,效率低。 因为Applet方案,一般采用html方式呈现数据,打印时Applet必须向服务器检索同一张票据的数据,看上去,是打印了当前页的票据,实际上,Applet根本不会用当前html页的数据来打印,而是向服务器下载数据到Applet中来打印。也就是说,打印的话,必须两次请求,一次html 呈现,一次用来打印。 市场上java类的报表工具,一般推荐Applet方式来实现打印。 七、 轻量级的ActiveX打印方式 这是本公司应客户要求,最新推出的一种最具创意的web套打解决方案。 杰表作为一款纯java的报表工具,以前提供的web套打方案也是基于Applet的,Applet也做到了尽可能的小(只有24kb),但用户还是抱怨,因为jre太大,安装需要耐心。另外,用Applet方式,很难实现客户端的批量打印功能。 我们采用轻量级的ActiveX打印方案,很好地解决了客户的问题。以下是一个典型的该种方案的示例 posted on 2009-02-25 13:44 岁月如歌 阅读(8709) 评论(11) 编辑 收藏 所属分类: js FeedBack: # re: web打印,web打印控件的三种实现方法 zz[未登录] 2009-02-25 13:51 | 小白杨 不错,长见识了。 回复 更多评论 # re: web打印,web打印控件的三种实现方法 zz 2009-03-13 16:33 | bgrs 国内的 jatoolsPrinter 做得挺不错。我们项目中在用。 print.jatools.com 回复 更多评论 # re: web打印,web打印控件的三种实现方法 zz 2009-04-15 20:12 | interdrp ReYoPrint (锐洋.打印控件)是一款实现网页套打的专用工具。作为web应用开发者,我们经常会遇到在浏览器中打印报表、票据的需求,这些需求浏览器本身的打印功能一般不能满足, 如精确打印,分页,套打等。这就需要有一种能解决常见的浏览器端打印问题的软件工具,这也是 ReYoPrint 的研发背景。ReYoPrint内含一个在vc7.0上开发的ActiveX控件(73k), 这个控件主要实现对打印参数的控制,ReYoPrint使用户通过JavaScript脚本可以控制分页,页眉页脚,页边距,打印方向,自定义纸张,直接打印,弹出打印对话框再打印,预览,放缩打印,成批打印,套打等功能 ReYoPrint 的主要功能有: 支持设置打印参数,纸张类型,打印方向(横、竖)等 。 支持自定义的页脚、页眉设置。 支持打印区域拖拽及鼠标滚轮放大缩小功能。 支持程序分页与自动分页(支持ESC关闭预览窗口)。 支持打印预览,支持预览时指定页、指定份数打印。 支持直接打印指定票据的URL。 支持票据套打时,底图仅在打印预览时显示,不输出到打印机。 小巧,整个控件只有73K,不需要额外的软件包支持。 与您项目采用的技术标准无关,J2EE、.NET 项目均可。 IE 5.5+ 中适用。 ReYoPrint 的缺点有: 由于控件是基于WebBroser的所以,目前只支持基于IE的WEB打印。 不支持直接打印时选择打印机进行打印。 回复 更多评论 # re: web打印,web打印控件的三种实现方法 zz 2009-04-19 21:00 | llp web打印的需求总在变,远不止这些: 一开始人们只希望把网页内容完整打出来;之后希望打印的内容不要包含页眉页脚;再之后希望不要总是弹出打印对话框,能打印多页,能分页;后来希望打印的位置准确点;再后来希望位置能操作调整,调整后的内容能保存,此后有的希望能打印不显示的内容;再此后就是显示是显示,打印是打印;能打印多个页面的内容,能只按地址打印,能适应各类浏览器...,实际上,这个需求变化的过程就有“网页浏览查看”向“管理系统界面”发展的过程。为什么打印控件 lodop一问世就如此流行?方向很重要!控件要能满足未知的需求,开发者才不至于走冤枉路。 回复 更多评论 # re: web打印,web打印控件的三种实现方法 zz 2009-06-23 10:04 | 找个美女做老婆 好文章,收藏了 Java乐园技术交流,http://www.javaly.cn 2群群号:28840096 回复 更多评论 # re: web打印,web打印控件的三种实现方法 zz 2009-10-13 10:01 | webprint 北京方成公司的打印插件,很不错! 使用特别方便,就是一个很小的activex控件,页面后,就能使用了 设置页边距,页眉页脚,横向,纵向 设置自定义纸张,特定报表绑定特别纸张,指定打印机打印报表 打印url,一次打印多份文档,打印完成后回调事件等等。 有兴趣可以看看 www.fcsoft.com.cn 回复 更多评论 # re: web打印,web打印控件的三种实现方法 zz 2009-11-12 17:10 | 预览 2010 如果能自己写一个打印控件就好了 回复 更多评论 # re: web打印,web打印控件的三种实现方法 zz 2010-01-09 12:35 | exezdl PAZU -- 4Fang WEB 打印控件 很不错! 回复 更多评论 # eee 2010-01-09 12:40 | e sdreee 回复 更多评论 # re: web打印,web打印控件的三种实现方法 zz 2010-01-14 10:13 | start Eloon WebPrint是为满足不同用户对WEB单据有不同的打印需求而产生,充分考虑到了用户的使用习惯,简单的操作就能定制出理想的打印格式,并且可以把打印格式保存为XML格式描述文档,在下次再进入该页面时,自动加载此格式描述文档进行打印做业。 Eloon WebPrint把打印格式的控制权交给了用户,完全解脱软件开发人员对WEB打印的开发与维护的工作,因此大大加快项目开发进度,为公司节省开发及维护成本。 可以自定义的内容如下: 1. 自定义默认打印机,打印纸型,打印方向,边距。 2. 自定义打印页眉信息。 3. 自定义打印标题。 4. 自定义打印表首信息。 5. 自定义打印表格输出的列及列宽、数据对齐、格式化数据、合计项目控制等。 6. 自定义打印表尾信息。 7. 自定义打印页脚信息。 有中文版.有兴趣可以看看 www.easywebprint.com 回复 更多评论
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值