`

(转)js控制IE打印功能

阅读更多
今天做了个JS控制IE打印功能,
原始链接为:http://hi.baidu.com/chengliangasd/item/bb512f17934a8724f6625cf8

js 控制IE打印

首先在网页中添加:

      <OBJECT id="WebBrowser" height="0" width="0" classid="CLSID:8856F961-340A-11D0-A96B-00C04FD705A2"
       VIEWASTEXT>
      </OBJECT>

然后就可以依次加入功能按钮了:

<input onclick="document.all.WebBrowser.ExecWB(6,1)" type="button" value="打印"> <input onclick="document.all.WebBrowser.ExecWB(6,6)" type="button" value="直接打印">
      <input onclick="document.all.WebBrowser.ExecWB(8,1)" type="button" value="页面设置">
      <input onclick="document.all.WebBrowser.ExecWB(7,1)" type="button" value="打印预览">&nbsp;<INPUT type="button" value="关闭窗口" onclick="javascript:window.close()">

将这两块东西放到<center class=noprint></center>就不会打印这些按钮了。当然要定义noprint了:

<style media="print">.Noprint { DISPLAY: none }</style>只要把不想打印的东西的css设置成noprint就可以了。

现在就实现了基本的web打印,需要注意的情况如下:
必须将ie的internet选项的安全设置中对于没有标记为安全的ActiveX控件进行...设置成提示或者启用,否则会报错,导致不可用。
如果在vs.net编辑环境下编辑该页面,它经常自动的给object添加多余的参数,有了这些东西,打印就会出错,所以要记得最后保存的时候删除它们。

为了简便并且达到最好的效果,我们可以在一个页面实现编辑和打印,这时候会需要很多的textbox,我们把它的css设置成.edittext
{
overflow-y:visible;
width: 100%;
border-top: none;
border-right: none;
border-bottom: none;
border-left: none;
}就可以实现在打印的时候不显示边框和multiline的textbox不显示滚动条了。

还有一些小经验就是在设置标格宽度的时候,对于A4纸张,横打用920,竖打用640,效果最好。

web打印 execwb参数
目前,在做B/S结构程序开发的时候,最棘手和最令人头疼的问题之一就是Web打印。往往打印出来的效果和自己预期的效果相差甚远,那么怎样才能打印出自己想要的效果呢?本文阐述的方法将解决这一问题,从而使得Web打印变得简单易用。

我们知道要实现Web方式的打印不外乎三种方法:第一就是利用大家都熟悉的Office工具来实现Web打印,如利用Word或Excel的打印工具来实现Web打印,该方法的难点是怎样把数据从网页中导入Word或Excel中;第二就是利用IE浏览器自带的打印控件来实现Web打印,该方法的难点是怎样在程序中控制浏览器打印控件中的各项设置;第三就是利用第三方的控件或报表软件来实现Web打印,该方法的难点在于大多数的报表软件都是有偿使用的,因此不得不从经济的角度来考虑了。对于第三种方法,这一类的控件有FileSystemObject组件、ScriptX.cab控件等,这一类的报表软件有如意报表、用友公司的Cell插件、《靓妹》全动态Web报表等。这里对它们的用法就不作说明了,只要参照其提供的说明书就能够驾驭它们。以下笔者将重点讲述前两种方法。

利用Office工具实现打印

首先介绍第一种方法,即利用Office打印工具实现Web打印。前面我们提到了该方法的难点在于把数据导入Word或Excel中,下面笔者以Excel为例介绍一下把数据导入Excel的方法。其实将网页中的数据导入Excel中的方法有很多种,这里只介绍其中的一种,即利用ActiveX控件——Excel.Application。Excel.Application是微软为Excel提供的编程接口,在其他的编程语言中可以通过该接口程序来操作Excel表格。以下介绍一下在程序中操作EXCEL表的常用命令(以脚本语言VBScript为例,其他语言类似):

1.Set xlApp = CreateObject("Excel.Application") '创建EXCEL对象

2.Set xlBook = xlApp.Workbooks.Open("文件名") '打开已经存在的Excel工件簿

3.Set xlBook = xlApp.Workbooks.Add() '创建新的Excel工件簿

4.xlApp.Visible = True '设置EXCEL对象可见(或不可见)

5.Set xlSheet = xlBook.Worksheets("表名") '设置活动工作表

6.Set xlSheet = xlBook.ActiveSheet '设置活动工作表(默认表名)

7.xlSheet.Cells(row, col) =值 '给单元格(row,col)赋值

8.xlSheet.PrintOut '打印工作表

9.xlBook.Close(True) '关闭工作簿

10.xlApp.Quit '结束EXCEL对象

11.Set xlApp = Nothing '释放xlApp对象

这里通过一个简单的例子来说明这些命令的用法。下面给出它关键的实现代码(用javascript脚本实现,用VBScript也能实现,有兴趣的读者可以自己实现一下):

< script language="javascript">

function xlPrint(){

var xlApp;//存放Excel对象

var xlBook;//存放Excel工件簿文件

var xlSheet;//存放Excel活动工作表

try{

xlApp = new ActiveXObject("Excel. Application");//创建Excel对象}

catch(e){

alert("请启用ActiveX控件设置!");

return;}

xlBook = xlApp.Workbooks.Add();//创建Excel工作簿文件

xlSheet = xlBook.ActiveSheet;//激活Excel工作表

var rowLen = printData.rows.length;//table对象的行数

for (var i=0;i< rowLen;i++){

var colLen = printData.rows(i).cells.length;//table对象的列数

for (var j=0;j< colLen;j++)//为Excel表的单元格赋值

xlSheet.Cells(i+1,j+1).value = printData.rows(i).cells(j).innerText;}

xlApp.Visible = true;//设置Excel对象可见}

< /script>

代码说明:只要程序中table的ID设置为:printData,然后再把打印按钮的onclick事件响应函数设置为xlPrint()就可以了;但是运行该程序的前提就是IE要允许对没有标记为安全的ActiveX控件进行初始化和脚本运行。具体的设置方法如下:打开控制面板→Internet选项→安全性→自定义级别→对没有标记为安全的ActiveX控件进行初始化和脚本运行→选中启用,这样我们的程序就可以运行了。如果没有启用该ActiveX控件设置,那么程序在执行创建Excel对象时会抛出一个异常,这时可以通过catch()语句来捕获这个异常,并且做出相应的处理。如果想直接打印可以调用命令:xlSheet.PrintOut。

以上的方法实现了将数据从网页的单元格到Excel单元格的导入,下面笔者介绍一种将整个表格导入Excel的方法。该方法的主要思路是利用剪切板,先将网页中要打印的内容复制到剪切板中,然后再调用xlSheet.Paste()命令将剪切板中的内容复制到Excel中。下面来看一下它的关键代码:

var selectArea=document.body.createTextRange(); //创建文本区域

selectArea.moveToElementText(printData);//将文本区域聚焦到printData

selectArea.select();//选中printData

selectArea.execCommand("Copy");//将printData复制到剪切板中

xlSheet.Paste();//将剪切板中的数据复制到Excel中

利用IE浏览器实现

前面我们以Excel为例讲述了利用Office打印工具来完成Web打印,现在我们来看看怎样利用IE浏览器自带的打印控件来完成Web打印。大家都知道IE本身就具有强大的打印功能,那么我们为什么不利用这一点来实现Web打印功能呢。原因是如果我们直接使用IE的打印功能或是在程序中调用window.print()来打印网页,那么在页眉部分会出现网页标题和页码信息,而在页脚部分则会出现网址和日期信息。其实这些信息并不是我们想要打印的,那么怎样才能去掉这些信息呢?做法其实很简单,我们只要在IE的文件菜单中打开页面设置对话框,然后去掉页眉和页脚的代码(页眉:&w&b页码,&p/&P 页脚:&u&b&d)就可以了,现在我们再打印的话这些信息就不会出现了。现在我们来看看这些代码是什么意思呢?其实这些代码是IE提供给我们设置打印页面的,下面给出它们的具体含义,如表所示。
&w     网页标题
&u     网页网址(url)
&d     短日期格式
&D     长日期格式
&t     当前时间格式
&T     24小时时间格式
&p     当前页码
&P     总页码

通过上面的表格,读者应该明白IE打印设置中默认的页眉和页脚的含义,而且读者可以对上述代码进行组合使用来设置自己喜欢的打印设置。这里我们所要说的并不单单是这些,大家设想一下我们开发了一个基于B/S结构的系统,其中有报表的部分,我们不能让每个客户端都自己去设置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>

程序中可以再写一个函数(可用VBscript或javascript脚本写)先调用该函数,然后再调用window.print()实现打印,这里就不给出代码了。细心的读者一定发现了这样打印出来的页面会有打印按钮在上面,而且分页是IE打印控件根据纸张大小分出来的,下面我们介绍一种方法来控制分页和打印按钮的显示。该方法是利用CSS样式表来控制这些设置,因为在样式表中有一个“media=print”属性,该属性只有在打印的时候才会起作用,因此可以实现对打印按钮和分页的控制,具体做法如下:

< style media=print>

.noprint{display:none;}

.pagenext{page-break-after: always;}

< /style>

只要在打印按钮中加入代码class="noprint",而在需要分页的地方加入代码< div class="pagenext">< /div>就可以了。到目前为止我们的打印功能已经比较完善了,但是还没有打印预览和直接打印的功能,一般用户在打印之前都会预览一下,如果没有问题就直接打印了。下面我们通过IEWebBrowser组件来实现这两个功能。

首先创建IEWebBrowser对象:

< object id=WebBrowser classid=CLSID:8856F961-340A-11D0-A96B-00C04FD705A2 width=0 height=0>< /object >

然后通过不同参数调用ExecWB方法实现打印预览和直接打印功能:

WebBrowser.ExecWB(6,1); //打印

WebBrowser.ExecWB(6,6); //直接打印

WebBrowser.ExecWB(7,1); //打印预览

ExecWB方法还有很多其他的参数,这里就不一一介绍了

页面打印时如何去掉页面底部的路径和顶端的页码编号

ie的文件-〉页面设置-〉讲里面的页眉和页脚里面的东西都去掉,打印就不出来了。

(三)打印去掉/添加页眉页脚
引用:

<script language="JavaScript">
var hkey_root,hkey_path,hkey_key
hkey_root="HKEY_CURRENT_USER"
hkey_path="\\Software\\Microsoft\\Internet Explorer\\PageSetup\\"
//设置网页打印的页眉页脚为空
function pagesetup_null(){
try{
var RegWsh = new ActiveXObject("WScript.Shell")
hkey_key="header"
RegWsh.RegWrite(hkey_root+hkey_path+hkey_key,"")
hkey_key="footer"
RegWsh.RegWrite(hkey_root+hkey_path+hkey_key,"")
}catch(e){}
}
//设置网页打印的页眉页脚为默认值
function pagesetup_default(){
try{
var RegWsh = new ActiveXObject("WScript.Shell")
hkey_key="header"
RegWsh.RegWrite(hkey_root+hkey_path+hkey_key,"&w&b页码,&p/&P")hkey_key="footer"
RegWsh.RegWrite(hkey_root+hkey_path+hkey_key,"&u&b&d")
}catch(e){}
}
</script>
<input type="button" value="清空页码" onclick=pagesetup_null()>
<input type="button" value="恢复页码" onclick=pagesetup_default()>

复制出去,看下效果就可以了


分页

<style media="print">
    .PageNext{page-break-after: always;}
</style>


<div class="PageNext"></div>
在要分页的地方加上这句 。
分享到:
评论

相关推荐

    js调用ie打印和预览功能

    ### 使用JavaScript调用IE浏览器打印和预览功能 在网页开发过程中,经常需要实现文档的打印和预览功能。在Internet Explorer(IE)浏览器中,可以通过JavaScript与ActiveX控件结合来实现这些功能。下面将详细介绍...

    IE的smsx控件,可以通过js控制IE的web打印

    **IE的smsx控件**是一种专为Internet Explorer设计的浏览器控件,它允许开发者通过JavaScript来实现对IE浏览器的Web打印功能的精细控制。在传统的Web应用中,浏览器的打印功能往往比较基础,可能无法满足一些特定的...

    js 打印以及预览功能实现

    首先,我们需要理解JavaScript的`window.print()`方法,这是最基本的打印功能实现。此方法会调用系统的打印对话框,允许用户选择打印机并设置打印选项。例如: ```javascript function printContent() { window....

    ie浏览器 js调用 ocx 异步打印pdf、图片控件

    在“ie浏览器 js调用 ocx 异步打印pdf、图片控件”的场景中,我们将探讨如何利用JavaScript调用OCX控件来实现异步打印功能,特别是针对PDF和图片文件。 首先,我们需要在Web服务器上部署这个OCX控件。部署过程包括...

    IE直接打印源码.rar

    至于压缩包内的文件“IE直接打印源码.txt”,我们可以推测这可能是用文本格式记录的JavaScript代码或者是解释如何实现IE直接打印功能的说明文档。JavaScript是常用于实现浏览器端功能的脚本语言,包括直接打印。这样...

    IEJavascript打印功能

    ### IE Javascript 打印功能详解 #### 一、引言 在B/S(浏览器/服务器)架构下,Web应用程序中的打印功能与传统的桌面应用程序存在显著差异。由于程序运行于浏览器中,而打印机位于用户端,这导致了打印文档时的...

    调用IE自带打印功能实现在线打印

    标题:调用IE自带打印功能实现在线打印 描述:调用WINDOWS的打印功能,实现WEB打印。简单实用 本文将详细介绍如何通过调用Internet Explorer(IE)浏览器的内置打印功能来实现在线打印,这是一种简单而实用的方法...

    转转_js_print_ie

    标题“转转_js_print_ie”暗示我们关注的是一个与JavaScript(js)相关的项目,特别是针对Internet Explorer(ie)浏览器的打印功能。这个项目可能解决在IE浏览器中进行页面打印时遇到的问题或者提供优化的解决方案...

    使用js代码来控制IE中的打印预览效果

    ### 使用JS代码来控制IE中的打印预览效果 在网页开发过程中,为了提供更好的用户体验,开发者经常需要实现一些额外的功能,比如打印预览。本文将详细介绍如何使用JavaScript(简称JS)来控制Internet Explorer...

    JS 实现web分页打印功能

    综上所述,通过合理地使用`Window.print()`方法结合CSS样式控制和JavaScript逻辑,我们可以实现一个强大的Web分页打印功能。确保对各种浏览器进行充分测试,并根据需要进行优化,以提供最佳用户体验。

    IE打印有URL解决方案

    这通常涉及到JavaScript(JS)代码,用于创建一个自定义按钮,当用户点击时,会调用IE的打印功能并自动调整设置。 1. 在网页中添加一个HTML按钮,如: ```html 自定义打印 ``` 2. 编写JavaScript代码处理按钮...

    web 票据打印 ie web 票据打印

    客户端接收到数据后,利用浏览器的打印功能将其呈现到打印机上。 二、IE Web票据打印的特殊性 IE浏览器相对于其他现代浏览器,其打印机制略有不同。IE支持ActiveX控件,这为开发者提供了一种直接控制打印机的手段。...

    javascript,js打印

    在JavaScript(JS)中,打印功能是通过与浏览器的交互来实现的,允许用户将网页内容或者特定元素发送到打印机。这个过程涉及到一系列的技术和方法,包括DOM操作、CSS样式控制以及利用JavaScript库如jQuery来简化操作...

    js操作word打印

    JavaScript可以通过ActiveXObject对象在Internet Explorer中与Word交互,利用Word对象模型来实现打印功能。以下是一个简单的示例代码: ```javascript if (window.ActiveXObject) { var wordApp = new ...

    IE自带打印例子

    以上就是关于“IE自带打印例子”以及如何通过JavaScript实现打印功能的详细讲解。希望这些知识能帮助你在实际工作中更好地理解和运用网页打印技术。在实际开发中,结合这些知识点,可以创建出更加高效、便捷的网页...

    JS实现浏览器打印、打印预览示例

    5. jQuery插件的利用:对于使用jQuery的项目来说,有专门的打印插件如jquery.print.js和jquery.print-preview.js可以方便地实现打印功能。这些插件通常提供了更多的灵活性和控制,如支持局部打印,并且能够更好地与...

    调用IE内置打印组件完成web打印方案及例程

    IE浏览器提供了强大的内置打印功能,通过ActiveX控件可以轻松地控制打印行为。本方案主要依赖于IE中的`WebBrowser`控件,该控件可以通过设置其属性和调用方法来实现对网页内容的打印。 #### 三、实现Web打印的基本...

    js调用word 直接打印预览功能

    本文将深入解析如何利用JavaScript(JS)调用Microsoft Word来实现文档的直接打印预览功能,这不仅能够提升用户体验,还能增强Web应用的功能性。 ### 关键知识点 #### 1. JavaScript与ActiveX对象 在Windows环境...

    chrome浏览器实现打印预览打印功能.zip

    首先,Chrome浏览器的打印功能是通过其内置的`window.print()` JavaScript API来实现的。这个API会触发浏览器的默认打印对话框,允许用户选择打印机、设置页面选项并进行打印。但是,如果仅仅使用`window.print()`,...

    通过调用 JS 打印图片信息

    本文将深入探讨如何利用 JavaScript 实现这一功能,特别是在解决谷歌浏览器首次打印时图片不显示及去除IE浏览器页眉页脚的问题。 首先,我们需要理解为什么在某些情况下,如谷歌浏览器,图片在第一次打印时不显示。...

Global site tag (gtag.js) - Google Analytics