web打印,web打印控件的三种实现方法javascript
作管理系统的时候,打印一直是个棘手的问题,作B/S的系统这个问题就更加突出了!下面举出三种经常使用的web打印处理方式
一、利用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">css
function ExcelPrint(){html
var excelApp;//存放Excel对象java
var excelBook;//存放Excel工件簿文件程序员
var excelSheet;//存放Excel活动工做表web
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驱动不了。
二、利用浏览器自带的打印控件来实现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()显然远远不够。
三、利用第三方的控件或者报表软件来实现web打印
实现过程:第三方控件将打印的参数和方法封装成对象,在页面中能够方便的直接调用,例如ScriptX.cab,eprint.cab 都是这种类型的控件。能够直接用代码实现web打印页眉页脚的设置,web打印纸张的绑定,web打印边距的设置,web打印预览,直接web打印。
web打印格式设置,web打印分页,web打印换页从新打印某些信息,某些信息只能第一页打印,某些信息只能最后一页打印等等这些,也都解决方案。Scriptx没有处理这些的方案,webprint有webgrid和eprint两种解决方案,行列规则的表格式的能够简单webgrid来处理,复杂格式的能够用eprint来设计格式。
通常这种类型的打印控件都是须要收费的,用户能够从经济的角度来考虑。
==========================================================================================================
1、 浏览器的打印功能菜单
这种方案的优点是不须要对浏览器做任何扩充,是最简单的办法,但问题也最多,如:
|
2、 使用webbrowser控件+ javascript
这实际上,是浏览器打印功能菜单的一种程序调用,与打印功能菜单没什么两样。分页的问题仍然存在,只不过,可让用户不用去点菜单,直接在网页中的一个按钮,或一个连接里面调用罢了。
3、 使用print css
这是一种最理想的实现web套打的方法。这种方法经过在html文档中,嵌入打印相关的css样式,来实现对html文档输出打印的控制,好比设置纸张大小,纸张纵横方向,打印边距,分页等。显而易见,这种方式成本小,不须要下载任何插件,并且跨平台性很是好。print css推出已经有些时日,但遗憾的是,至今没有一个厂商的浏览器很好地实现了这些标准,这使得程序员目前还不能利用print css进行实际的开发。关于打印css,参见:
http://css-discuss.incutio.com/?page=PrintStylesheets
4、 使用pdf文件
用这种方式,就是从服务器端下载一个pdf文件流,在IE中用adobe插件打开,而后用adobe的打印菜单进行打印,虽然这种方案,也能实现精确套打,但须要下载adobe插件。这是国外报表工具常常推荐的一种打印方法,但在pdf不那么普及的中国,这种方案不是最好选择。
5、 采用纯ActiveX
这种方案就是下载一个控件,票据的数据再也不以html方式呈现,而是呈如今ActiveX中。这种方案的优势是打印的精确度高,分页的可控性好,但缺点也是很明显的,嵌入ActiveX控件破坏了web应用的总体html风格,且这样的控件比较大(通常超过1M,下载颇费时间)。市场上的非java类报表产品,通常都采用这种方案。
6、 采用Applet方式
采用Applet方式,分页或精确打印,均可以作到完美,但缺点也很明显,表如今:
|
7、 轻量级的ActiveX打印方式
这是本公司应客户要求,最新推出的一种最具创意的web套打解决方案。
杰表做为一款纯java的报表工具,之前提供的web套打方案也是基于Applet的,Applet也作到了尽量的小(只有24kb),但用户仍是抱怨,由于jre太大,安装须要耐心。另外,用Applet方式,很难实现客户端的批量打印功能。