欢迎来到长沙网站建设——青云网络

网站建设资讯|长沙网站建设|长沙网站建设公司-长沙青云网络网站建设资讯site_news

当前位置:主页 > 网站建设资讯 >做网站页面打印实现方式

做网站页面打印实现方式

文章来源:青云网站建设     作者:青云有梦       发布时间: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,欢迎咨询~!
 
 
上一篇:做网站坚持哪些原则更加有利
下一篇:做网站要避免哪些问题
建站咨询 优化咨询