js 打印设置

JavaScript022

js 打印设置,第1张

ps:去除页眉页脚后打印显示不全处理

在打印内容处设置padding 单位mm (此处不能设置margin会有多打印一页空白bug)

js打印设置打印方向、去除页眉页脚

去除页眉页脚横向打印

去除页眉页脚纵向打印

基于web的套打,难度在于要将浏览器中呈现的html,精确地打印到票据中,而且能够实现对分页位置的控制。下面就ie浏览器所能采用的套打解决方案,来个汇总分析,希望对大家有所帮助。

一、浏览器的打印功能菜单

这种方案的优势是不需要对浏览器作任何扩充,是最简单的办法,但问题也最多,如:

不能精确分页。浏览器一般是根据用户设置的页面大小,web页面的内容多少,来自行决定分页位置,程序员很难控制。会有页脚页眉干扰。

不能准确对齐边边距及打印文字。

不能解决连续打印。比如,不是仅打印一张票据,而是连续一次打印若干个票据。

二、使用webbrowser控件+ javascript

这实际上,是浏览器打印功能菜单的一种程序调用,与打印功能菜单没什么两样。分页的问题仍然存在,只不过,可以让用户不用去点菜单,直接在网页中的一个按钮,或一个链接里面调用罢了。

三 、使用print css

这是一种最理想的实现web套打的方法。这种方法通过在html文档中,嵌入打印相关的css样式,来实现对html文档输出打印的控制,比如设置纸张大小,纸张纵横方向,打印边距,分页等。显而易见,这种方式成本小,不需要下载任何插件,而且跨平台性非常好。print css推出已经有些时日,但遗憾的是,至今没有一个厂商的浏览器很好地实现了这些标准,这使得程序员目前还不能利用print css进行实际的开发。

四 、使用PDF文件

用这种方式,就是从服务器端下载一个pdf文件流,在IE中用adobe插件打开,然后用adobe的打印菜单进行打印,虽然这种方案,也能实现精确套打,但需要下载adobe插件。这是国外报表工具经常推荐的一种打印方法,但在pdf不那么普及的中国,这种方案不是最好选择。

五 、采用纯ActiveX

这种方案就是下载一个控件,票据的数据不再以html方式呈现,而是呈现在ActiveX中。这种方案的优点是打印的精确度高,分页的可控性好,但缺点也是很明显的,嵌入ActiveX控件破坏了web应用的整体html风格,且这样的控件比较大(一般超过1M),下载颇费时间)。市场上的非java类报表产品,一般都采用这种方案。

六 、采用Applet方式

采用Applet方式,分页或精确打印,都可以做到完美,但缺点也很明显,表现在:

安装Applet成本巨大。需要下载十几M的文件。

打印报表时,需要重新向服务器检索数据,效率低。因为Applet方案,一般采用html方式呈现数据,打印时Applet必须向服务器检索同一张票据的数据,看上去,是打印了当前页的票据,实际上,Applet根本不会用当前html页的数据来打印,而是向服务器下载数据到Applet中来打印。也就是说,打印的话,必须两次请求,一次html呈现,一次用来打印。

不能解决连续打印。比如,不是仅打印一张票据,而是连续一次打印若干个票据。

不能解决打印机设置问题,如存在多台打印机时,总是需要手工选择,打印到哪一台打印机。

市场上java类的报表工具,一般推荐Applet方式来实现打印。

七 、轻量级的ActiveX打印方式

-----ScriptX-----

ScriptX的免费版本好点,已经能满足大部分的需求.

MeadCo's ScriptX控件有两种使用方式,一种是做为免费版本使用,一种是做为收费版本使用,免费版本支持的功能要少些,不过最重要也是最常用的页面设置,它还是提供的,因此使用免费版本即可。不过这两个版本用的都是同一个cab文件,只不过在代码设置中有一些不同。

-----PAZU (四方)-----

PAZU 个人或者商业使用均真正免费授权,无IP或者域名限制。

PAZU自2009年6月起采用免费的许可,申请时,您必须有确定的IP地址或者域名(主机名),PAZU是绑定IP或者域名的,IP或域名尚未确定的我们不能颁发授权,另外,授权一经颁发就不能修改绑定。 绑定的IP和域名必须是最终用户的,所以,最终用户的应用网站必须和4Fang网站做好链接,否则 PAZU会因为无法验证授权的合法性而不能正常工作(内网应用除外)。

企业可以购买开发集成版(适合项目集成或者产品开发公司,提供KeyGen工具,自己生成许可授权,不限制发行)

-----jatoolsPrinter(杰表.打印控件)-----

免费版本只能在192.168.*** 网段使用,2.0之前的版本有免费版本,2.0之后是收费的。目前最新版本是4.2.他们可以通过web脚本来选择输出打印机,纸张大小,打印方向等,不必每次手工设定。

对于简单的打印,我们用IE的功能就可以了,对于需要复杂的设置的,建议使用轻量级的ActiveX打印方式。在接下来的系列教程里,我们会一一介绍。

---------------------------------------二 使用IE的打印功能进行一般的网页打印-----------------------------

在我们进行web开发的时候,通常会需要用到打印,然而,由于web技术的限制及考虑到安全的问题,一直以来,web打印的功能都是非常弱的,对此,我们也只能接受。也许你在开发过程中经常会遇见客户对你说,“你们系统的打印太差了,你看看excel的打印多好啊,”,面对这样的用户,我们除了苦笑,还能说什么呢?如果你对着他们去解释什么是BS架构,什么是CS架构,不但不能够解决问题,反而会招致用户的反感。

那么,我们是不是就什么都不能做了呢?答案当然是否定的。利用现有的web技术,再加上针对求的灵活实现,我们也可以做出漂亮的打印出来。

在接下来的几篇文章里,我将分别介绍几种打印的方法或技术。这些方法有的很简单,有的稍微复杂一点。我们还是从基础做起,先了解最简单的打印技术,然后再一步一步提高,这样也有利于消化技术。

本篇内容讲述利用IE提供的简单的打印功能,进行打印的设置以及打印。

在IE里打印,我们可以通过javascript来调用window.print()函数实现。下面是一个简单的代码示例。

Java代码 收藏代码

<input type='button' value='打印' onclick='javascript:window.print()'/> 

点击“打印”后,即可弹出打印窗口,如下图

通过这个函数,可以实现最简单的打印功能。如果我们要对纸张,页边距进行设置,那该怎么做呢? 我们知道,我们可以方便地通过 Internet Explorer 用户界面更改页边距、页眉和页脚设置和默认 Internet Explorer 打印机,IE也提供了一个叫WebBrowser 控件来供我们调用,通过调用,可以在页面上调出打印的设置窗口,在设置窗口里,用户可以更改页边距、页眉和页脚设置等。(但是,在 Internet Explorer 或 WebBrowser 控件下没有以编程方式更改这些设置的方法。在本系列教程的第三篇,我将介绍如何在页面上通过编程的方式来更改设置。)我们可以在页面上输入如下代码来调用WebBrowser 控件。

Java代码 收藏代码

<OBJECT classid="CLSID:8856F961-340A-11D0-A96B-00C04FD705A2" id=wb name=wb ></OBJECT> 

<input type='button' value='打印' onclick='javascript:wb.ExecWB(6,1)'/>

<input type='button' value='打印预览' onclick='javascript:wb.ExecWB(7,1)'/>

<input type='button' value='页面设置' onclick='javascript:wb.ExecWB(8,1)'/>

上例中的OBJECT就是IE提供的打印控件,叫WebBrowser,我们在网页中可以用我们设置的id或name来引用它。

这个对象有很用法,其中涉及到打印的有下面三项。

wb.ExecWB(6,1) 打印

wb.ExecWB(7,1) 打印预览

wb.ExecWB(8,1) 打印页面设置

点击“打印”按钮,即可弹出和window.print()函数一样的窗口。 点击打印预览,即可预览当前页面。

点击“页面设置”,即可弹出页面设置窗口,在设置窗口里,可以对边距,页眉等进行详细设置。

通过以上三个功能,我们就可以进行简单的打印和设置了,对于一般的打印需求来说基本足够。

这里需要说明的是,“页面设置”中的各个值,是存储在用户的注册表中。

需要调用其它的插件,我只知道ScriptX,免费的功能有:四个边距,横打竖打,页眉,页脚

其它功能是收费的

如果需要可以到http://www.meadroid.com/scriptx/ 下载和查看相关文档

1、控制"纵打"、 横打”和“页面的边距。

(1)<script defer>

function SetPrintSettings() {

// -- advanced features

factory.printing.SetMarginMeasure(2) // measure margins in inches

factory.SetPageRange(false, 1, 3) // need pages from 1 to 3

factory.printing.printer = "HP DeskJet 870C"

factory.printing.copies = 2

factory.printing.collate = true

factory.printing.paperSize = "A4"

factory.printing.paperSource = "Manual feed"

// -- basic features

factory.printing.header = "This is MeadCo"

factory.printing.footer = "Advanced Printing by ScriptX"

factory.printing.portrait = false

factory.printing.leftMargin = 1.0

factory.printing.topMargin = 1.0

factory.printing.rightMargin = 1.0

factory.printing.bottomMargin = 1.0

}

</script>

(2)

<script language="javascript">

function printsetup(){

// 打印页面设置

wb.execwb(8,1)

}

function printpreview(){

// 打印页面预览

wb.execwb(7,1)

}

function printit()

{

if (confirm('确定打印吗?')) {

wb.execwb(6,6)

}

}

</script>

</head>

<body>

<OBJECT classid="CLSID:8856F961-340A-11D0-A96B-00C04FD705A2"

height=0 id=wb name=wb width=0></OBJECT>

<input type=button name=button_print value="打印"

onclick="javascript:printit()">

<input type=button name=button_setup value="打印页面设置"

onclick="javascript:printsetup()">

<input type=button name=button_show value="打印预览"

onclick="javascript:printpreview()">

<input type=button name=button_fh value="关闭"

onclick="javascript:window.close()">

------------------------------------------------

关于这个组件还有其他的用法,列举如下:

WebBrowser.ExecWB(1,1) 打开

Web.ExecWB(2,1) 关闭现在所有的IE窗口,并打开一个新窗口

Web.ExecWB(4,1) 保存网页

Web.ExecWB(6,1) 打印

Web.ExecWB(7,1) 打印预览

Web.ExecWB(8,1) 打印页面设置

Web.ExecWB(10,1) 查看页面属性

Web.ExecWB(15,1) 好像是撤销,有待确认

Web.ExecWB(17,1) 全选

Web.ExecWB(22,1) 刷新

Web.ExecWB(45,1) 关闭窗体无提示

2、分页打印

<HTML>

<HEAD>

<STYLE>

P {page-break-after: always}

</STYLE>

</HEAD>

<BODY>

<%while not rs.eof%>

<P><%=rs(0)%></P>

<%rs.movenext%>

<%wend%>

</BODY>

</HTML>

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

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

(2)<HTML>

<HEAD>

<TITLE> New Document </TITLE>

<META NAME="Generator" CONTENT="EditPlus">

<META NAME="Author" CONTENT="YC">

<script language="VBScript">

dim hkey_root,hkey_path,hkey_key

hkey_root="HKEY_CURRENT_USER"

hkey_path="\Software\Microsoft\Internet Explorer\PageSetup"

'//设置网页打印的页眉页脚为空

function pagesetup_null()

on error resume next

Set RegWsh = CreateObject("WScript.Shell")

hkey_key="\header"

RegWsh.RegWrite hkey_root+hkey_path+hkey_key,""

hkey_key="\footer"

RegWsh.RegWrite hkey_root+hkey_path+hkey_key,""

end function

'//设置网页打印的页眉页脚为默认值

function pagesetup_default()

on error resume next

Set RegWsh = CreateObject("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"

end function

</script>

</HEAD>

<BODY>

<br/>

<br/>

<br/>

<br/>

<br/>

<br/><p align=center>

<input type="button" value="清空页码" onclick=pagesetup_null()>

<input type="button" value="恢复页吗"

onclick=pagesetup_default()><br/>

</p>

</BODY>

</HTML>

4、浮动帧打印

<SCRIPT LANGUAGE=javascript>

function button1_onclick() {

var odoc=window.iframe1.document

var r=odoc.body.createTextRange()

var stxt=r.htmlText

alert(stxt)

var pwin=window.open("","print")

pwin.document.write(stxt)

pwin.print()

}

</SCRIPT>

4、用FileSystem组件实现WEB应用中的本地特定打印

<script Language=VBScript>

function print_onclick //打印函数

dim label

label=document.printinfo.label.value //获得HTML页面的数据

set objfs=CreateObject("Scripting.FileSystemObject") //创建FileSystem组件对象的实例

set objprinter=objfs.CreateTextFile ("LPT1:",true) //建立与打印机的连接

objprinter.Writeline("__________________________________") //输出打印的内容

objprinter.Writeline("| |")

objprinter.Writeline("| 您打印的数据是:"&label& " |”)

objprinter.Writeline("| |")

objprinter.Writeline("|_________________________________|")

objprinter.close //断开与打印机的连接

set objprinter=nothing

set objfs=nothing // 关闭FileSystem组件对象

end function

</script>

服务器端脚本:

<%………

set conn=server.CreateObject ("adodb.connection")

conn.Open "DSN=nameUID=XXXXPWD=XXXX"

set rs=server.CreateObject("adodb.recordset")

rs.Open(“select ……”),conn,1,1

……….%> //与数据库进行交互

HTML页面编码:

<HTML>

………

<FORM ID=printinfo NAME="printinfo" >

<INPUT type="button" value="打印>>" id=print name=print > //调用打印函数

<INPUT type=hidden id=text1 name=label value=<%=………%>> //保存服务器端传来的数据

………

</HTML>