做网站页面打印实现方式
文章来源:青云网站建设 作者:青云有梦 发布时间:2018-11-21 11:20:14 返回列表
做Web开发的人员1定都会面临1个共同的困难,那就是打印。的确,相对Windows桌面利用程序来说,Web利用程序的打印有种种限制,技术人员在项目开发进程中常常会遇到用户这样或那样的需求. 做过桌面利用开发的人都会非常熟习水晶报表、Active Report之类的报表控件,它们不但有简单灵活的设计界面,更具有非常强大的报表功能,能满足各种报表的打印需求。而Web利用则由于其特殊的显现方式,只能寻求其他的解决方案。现在我们来分析1下目前已成形的Web打印方案:
现有的Web打印控制技术分成几种方案:
1.自定义控件完成打印
利用IE 自带的WebBrowser 控件实现打印
利用第3方控件实现打印
1、自定义控件方式
自定义控件方式就是利用VB 或VC 等工具生成COM 组件,用定义好的打印格式来分析打印源文件从而实现打印。只有将生成的组件下载并注册到客户机上,才能实现在客户真个
打印。
难点主要是定义打印格式、如何来分析打印源文件。现有的比较好的方法是利用XML 技术来全面的解决问题,利用XML 可以非常容易地定义打印目标的文本、表格等内容的格式。
但对程序员的开发要求高,难度比较大。
2、利用WebBrowser 实现Web打印
WebBrowser是IE 内置的阅读器控件,无需用户下载。本文档所讨论的是有关IE6.0 版本 的WebBrowser 控件技术内容。与其相干的技术要求有:打印文档的生成、页面设置、打印操作的实现等几个环节。
(1)、打印文档的生成
1、客户端脚本方式
客户端脚本分为VBScript、JavaScript、JScript 几种脚本语言。在IE 下开发利用使用的语法为JScript 的语法,由于它和JavaScript 几近没有甚么区分,所以也可以称其为JavaScript(下面简写为JS)。1般情况下,主要使用JS 来实现DOM 文档的分析,DOM 为微软提出的1种Web文档模型,主要用来实现Web脚本编程。
利用JS 可以分析源页面的内容,将欲打印的页面元素提取出来,实现打印。通过分析源文档的内容,可以生成打印目标文档。
优点:客户端独立完成打印目标文档的生成,减轻服务器负荷;
缺点:源文档的分析操作复杂,并且源文档中的打印内容要有约定;
2、服务器端程序方式
服务器端程序方式,主要是利用后台代码从数据库中读取打印源,生成打印目标文档。当的页面生成时,还应适当斟酌使用CSS 来实现强迫分页控制。
优点:可以生成内容非常的丰富的打印目标文档,目标文档的内容的可控性强。由于打印内容是从数据库中取得的,所以生成操作相对简单;
缺点:服务器端负载比较大;
(2)、页面设置
页面设置主要是指设置打印文档的页边距、页眉、页脚、纸张等内容。页面设置将直接影响到打印文档版面的生成效果,所以它和打印文档的生成有着密切的关系。比如:表格的
行数、大小、位置、字体的大小等。
现有的技术是利用IE6.0 内置的打印模板方式来控制页面设置,其可以对打印目标文档产生非常大的影响。打印模板可以控制页边距、页眉、页脚、奇偶页等内容,并可以将用户的设置取得,还可以将设置发送到服务器端。
打印模板技术可以自定预览窗口和打印格式,最大限度地影响目标文档和打印效果。
(3)、打印操作的实现
此功能的实现主要是利用WebBrowser控件的函数接口来实现打印、打印预览(默许的)、
页面设置(默许的)。
object ID= WebBrowser1 WIDTH=0 HEIGHT=0
CLASSID= CLSID:8856F961-340A-11D0-A96B-00C04FD705A2
//打印
WebBrowser1.ExecWB(6,1);
//打印设置
WebBrowser1.ExecWB(8,1);
//打印预览
WebBrowser1.ExecWB(7,1);
3、1个实例项目采取的打印方案
服务器端程序方式、打印预览接口调用,下面为例, 主要参考项目中的:
pageErrorPrint.aspx.vb 文件
主调用页
function PrintPage(iPageIndex,strQuery)
{
var strURL;
strURL = PageErrorPrint.aspx?PageIndex= + iPageIndex + QueryString= +
strQuery;
winPrint=window.open(strURL, , left=2000,top=2000,fullscreen=3
}
打印页HTML 源中的预览控制
SCRIPT language= javascript
document.write( object ID= WebBrowser WIDTH=0 HEIGHT=0
CLASSID= CLSID:8856F961-340A-11D0-A96B-00C04FD705A2 /object
WebBrowser.ExecWB(7,1);
window.opener=null;
window.close();
/SCRIPT
程序头
首先声明表格容器
Protected WithEvents phContainer As System.Web.UI.WebControls.PlaceHolder
每一个表格中的记录数量
Private Const ItemPerTable As Integer = 20
关键的实现部份
创建1个符合打印要求的表格
tabPagePrint = NewPrintTable()
将表头添加到此表格中
Call AddTableTitle(tabPagePrint)
初始化记录器
i = 0
iItemIndex = iStartPoint
For Each clsItem In clsAllData.ErrorCollection
If i 0 And i Mod ItemPerTable = 0 Then
添加表格控件到页面中
phContainer.Controls.Add(tabPagePrint)
在页面中添加1个换行符
Call AddPageBreak()
创建新1轮的表格
tabPagePrint = NewPrintTable()
Call AddTableTitle(tabPagePrint)
End If
将记录添加到表格中
Call AddItemToTable(iItemIndex, tabPagePrint, clsItem)
iItemIndex = iItemIndex + 1
i = i + 1
Next
添加表格控件到页面中
phContainer.Controls.Add(tabPagePrint)
支持函数
功能:添加页的换行符
Private Sub AddPageBreak()
Dim ltBreak As LiteralControl
ltBreak = New LiteralControl( p >phContainer.Controls.Add(ltBreak)
End Sub
2、利用IE本身打印
这类方式比较简单,也经常使用的打印方式,只需要将报表页面设计好,用户通过IE菜单中的打印功能完成打印。优点是简单,容易实现,缺点是不灵活,不能控制分页,不能控制好页眉和页脚。
3、将报表导出成Word,Excel或PDF情势打印
这类方式需要将页面导出成Office文档或pdf,最低的要求是客户端已安装用以打开Word、Excel或Pdf文档的软件。这类方式可以通过水晶报表组件或其他1些第3方控件非常容易地实现。导出成Pdf情势后打印质量和效果都很好,导出成Word或Excel后用户可以自定义打印的内容和格式。
总之,现有的打印方案各有所长,在开发进程中应根据用户的需求作选择,利用IE打印简单,容易实现,在用户需求简单或打印内容较少的情况下采取此方案比较适合。利用自定义控件打印可以实现完全自定义,但需要较高的技术要求和开发周期。利用导出的方式则可以满足用户需要1点自定义或打印内容有多页的需求。<br>-------------------------------------------------------------<br>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= 打印
quot;javascript:printit()
input type=button name=button_setup value= 打印页面设置
quot;javascript:printsetup();
input type=button name=button_show value= 打印预览
quot;javascript:printpreview();
input type=button name=button_fh value= 关闭
quot;javascript:window.close();
------------------------------------------------
关于这个组件还有其他的用法,罗列以下:
WebBrowser.ExecWB(1,1) 打开
Web.ExecWB(2,1) 关闭现在所有的IE窗口,并打开1个新窗口
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
p align=center
input type= button value= 清空页码 agesetup_null() input type= button value= 恢复页吗 agesetup_default() /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=name;UID=XXXX;PWD=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
这就是我们长沙网站建设公司青云网络给大家提供的网站建设知识,如有需要进行长沙网站建设、长沙网站制作、长沙网站设计、长沙app开发、长沙seo优化、长沙微信小程序开发的可以直接联系我们,我们长沙网站建设公司青云网络是专业的网络公司,青云网络官网www.sqingyun.com,客服电话及微信:13595460312,客服QQ:1141057371,欢迎咨询~!
现有的Web打印控制技术分成几种方案:
1.自定义控件完成打印
利用IE 自带的WebBrowser 控件实现打印
利用第3方控件实现打印
1、自定义控件方式
自定义控件方式就是利用VB 或VC 等工具生成COM 组件,用定义好的打印格式来分析打印源文件从而实现打印。只有将生成的组件下载并注册到客户机上,才能实现在客户真个
打印。
难点主要是定义打印格式、如何来分析打印源文件。现有的比较好的方法是利用XML 技术来全面的解决问题,利用XML 可以非常容易地定义打印目标的文本、表格等内容的格式。
但对程序员的开发要求高,难度比较大。
2、利用WebBrowser 实现Web打印
WebBrowser是IE 内置的阅读器控件,无需用户下载。本文档所讨论的是有关IE6.0 版本 的WebBrowser 控件技术内容。与其相干的技术要求有:打印文档的生成、页面设置、打印操作的实现等几个环节。
(1)、打印文档的生成
1、客户端脚本方式
客户端脚本分为VBScript、JavaScript、JScript 几种脚本语言。在IE 下开发利用使用的语法为JScript 的语法,由于它和JavaScript 几近没有甚么区分,所以也可以称其为JavaScript(下面简写为JS)。1般情况下,主要使用JS 来实现DOM 文档的分析,DOM 为微软提出的1种Web文档模型,主要用来实现Web脚本编程。
利用JS 可以分析源页面的内容,将欲打印的页面元素提取出来,实现打印。通过分析源文档的内容,可以生成打印目标文档。
优点:客户端独立完成打印目标文档的生成,减轻服务器负荷;
缺点:源文档的分析操作复杂,并且源文档中的打印内容要有约定;
2、服务器端程序方式
服务器端程序方式,主要是利用后台代码从数据库中读取打印源,生成打印目标文档。当的页面生成时,还应适当斟酌使用CSS 来实现强迫分页控制。
优点:可以生成内容非常的丰富的打印目标文档,目标文档的内容的可控性强。由于打印内容是从数据库中取得的,所以生成操作相对简单;
缺点:服务器端负载比较大;
(2)、页面设置
页面设置主要是指设置打印文档的页边距、页眉、页脚、纸张等内容。页面设置将直接影响到打印文档版面的生成效果,所以它和打印文档的生成有着密切的关系。比如:表格的
行数、大小、位置、字体的大小等。
现有的技术是利用IE6.0 内置的打印模板方式来控制页面设置,其可以对打印目标文档产生非常大的影响。打印模板可以控制页边距、页眉、页脚、奇偶页等内容,并可以将用户的设置取得,还可以将设置发送到服务器端。
打印模板技术可以自定预览窗口和打印格式,最大限度地影响目标文档和打印效果。
(3)、打印操作的实现
此功能的实现主要是利用WebBrowser控件的函数接口来实现打印、打印预览(默许的)、
页面设置(默许的)。
object ID= WebBrowser1 WIDTH=0 HEIGHT=0
CLASSID= CLSID:8856F961-340A-11D0-A96B-00C04FD705A2
//打印
WebBrowser1.ExecWB(6,1);
//打印设置
WebBrowser1.ExecWB(8,1);
//打印预览
WebBrowser1.ExecWB(7,1);
3、1个实例项目采取的打印方案
服务器端程序方式、打印预览接口调用,下面为例, 主要参考项目中的:
pageErrorPrint.aspx.vb 文件
主调用页
function PrintPage(iPageIndex,strQuery)
{
var strURL;
strURL = PageErrorPrint.aspx?PageIndex= + iPageIndex + QueryString= +
strQuery;
winPrint=window.open(strURL, , left=2000,top=2000,fullscreen=3
}
打印页HTML 源中的预览控制
SCRIPT language= javascript
document.write( object ID= WebBrowser WIDTH=0 HEIGHT=0
CLASSID= CLSID:8856F961-340A-11D0-A96B-00C04FD705A2 /object
WebBrowser.ExecWB(7,1);
window.opener=null;
window.close();
/SCRIPT
程序头
首先声明表格容器
Protected WithEvents phContainer As System.Web.UI.WebControls.PlaceHolder
每一个表格中的记录数量
Private Const ItemPerTable As Integer = 20
关键的实现部份
创建1个符合打印要求的表格
tabPagePrint = NewPrintTable()
将表头添加到此表格中
Call AddTableTitle(tabPagePrint)
初始化记录器
i = 0
iItemIndex = iStartPoint
For Each clsItem In clsAllData.ErrorCollection
If i 0 And i Mod ItemPerTable = 0 Then
添加表格控件到页面中
phContainer.Controls.Add(tabPagePrint)
在页面中添加1个换行符
Call AddPageBreak()
创建新1轮的表格
tabPagePrint = NewPrintTable()
Call AddTableTitle(tabPagePrint)
End If
将记录添加到表格中
Call AddItemToTable(iItemIndex, tabPagePrint, clsItem)
iItemIndex = iItemIndex + 1
i = i + 1
Next
添加表格控件到页面中
phContainer.Controls.Add(tabPagePrint)
支持函数
功能:添加页的换行符
Private Sub AddPageBreak()
Dim ltBreak As LiteralControl
ltBreak = New LiteralControl( p >phContainer.Controls.Add(ltBreak)
End Sub
2、利用IE本身打印
这类方式比较简单,也经常使用的打印方式,只需要将报表页面设计好,用户通过IE菜单中的打印功能完成打印。优点是简单,容易实现,缺点是不灵活,不能控制分页,不能控制好页眉和页脚。
3、将报表导出成Word,Excel或PDF情势打印
这类方式需要将页面导出成Office文档或pdf,最低的要求是客户端已安装用以打开Word、Excel或Pdf文档的软件。这类方式可以通过水晶报表组件或其他1些第3方控件非常容易地实现。导出成Pdf情势后打印质量和效果都很好,导出成Word或Excel后用户可以自定义打印的内容和格式。
总之,现有的打印方案各有所长,在开发进程中应根据用户的需求作选择,利用IE打印简单,容易实现,在用户需求简单或打印内容较少的情况下采取此方案比较适合。利用自定义控件打印可以实现完全自定义,但需要较高的技术要求和开发周期。利用导出的方式则可以满足用户需要1点自定义或打印内容有多页的需求。<br>-------------------------------------------------------------<br>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= 打印
quot;javascript:printit()
input type=button name=button_setup value= 打印页面设置
quot;javascript:printsetup();
input type=button name=button_show value= 打印预览
quot;javascript:printpreview();
input type=button name=button_fh value= 关闭
quot;javascript:window.close();
------------------------------------------------
关于这个组件还有其他的用法,罗列以下:
WebBrowser.ExecWB(1,1) 打开
Web.ExecWB(2,1) 关闭现在所有的IE窗口,并打开1个新窗口
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
p align=center
input type= button value= 清空页码 agesetup_null() input type= button value= 恢复页吗 agesetup_default() /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=name;UID=XXXX;PWD=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
这就是我们长沙网站建设公司青云网络给大家提供的网站建设知识,如有需要进行长沙网站建设、长沙网站制作、长沙网站设计、长沙app开发、长沙seo优化、长沙微信小程序开发的可以直接联系我们,我们长沙网站建设公司青云网络是专业的网络公司,青云网络官网www.sqingyun.com,客服电话及微信:13595460312,客服QQ:1141057371,欢迎咨询~!