5.5 其他报表打印方案
除了以上介绍的Excel报表打印方案、XML技术报表打印方案和Crystal Report水晶报表打印方案,在ASP程序中还可以应用其他技术来实现报表打印的功能。本节将介绍Word报表打印、自定义ActiveX组件打印Access报表、图形报表打印以及套打报表。
5.5.1 Word报表打印
Microsoft Word是微软公司推出的Microsoft Office办公软件中的一个组件,它是一个功能强大的文字处理软件,可以进行文字输入、编辑、排版和打印操作等。在ASP程序中,可以创建Word的相关对象将网页中的内容导入到Word中,也可以调用Word中的数据报表,然后进行报表打印。
1.方案分析
在Web服务器上安装了Microsoft Word软件后,ASP就可以创建Word的相关对象,从而应用该对象的属性和方法对网页中的数据或者Word文档中的数据进行操作了。
网页上显示的数据一般都是从数据库中读取出来的,创建Word的Application对象可以将网页中具有一定显示格式的数据导入到Word文档中,然后进行报表打印的操作。
在一些实际工作中,用户可能会应用Word文档来存储一些数据报表(如:制作商务表格等),并进行排版工作等,为了方便用户查看Word文档中的内容,ASP可以编写动态代码打开指定的Word文档,然后再执行打印命令。
Word报表打印的流程图,如图5.34所示。
图5.34 Word报表打印的流程图
2.实施过程
Microsoft Word在文字编辑、打印方面的应用很广泛,ASP通过调用Word的相关对象可以访问Word文档中的数据内容。下面介绍两种在ASP程序中通过Word进行报表打印的方法,分别是将网页内容导入到Word和打印Word报表。
l 方法一 将网页内容导入到Word
实例位置:光盘/mr/5/5.5/5.5.1/01
在本章的5.2节中介绍了Excel报表打印方案,在ASP中不仅可以将网页中的内容保存到Excel中,还可以将网页中指定的内容导入到Word中。下面以企业内部管理系统的库存管理模块为例,介绍将网页中显示的数据导入到Word,然后再进行打印操作的过程。运行结果如图5.35所示。
图5.35 将网页内容导入到Word
在库存商品信息查看页面中,可以浏览到从库存商品信息表中读取到的数据信息。代码如下:
例程5-27 代码位置:光盘/mr/5/5.5/5.5.1/01/index.asp
<%
Set rs=Server.CreateObject("ADODB.Recordset")
sqlstr="select * from tb_store"
rs.open sqlstr,conn,1,1
do while not rs.eof
%>
<tr align="center">
<td height="26"><%=rs("Gname")%></td>
<td height="26"><%=rs("Gunit")%></td>
<td width="93" height="26"><%=rs("Gstd")%></td>
<td width="167" height="26"> <%=rs("Gprovide")%></td>
<td width="85" height="26"> <%=rs("Gconect")%></td>
</tr>
<%
rs.movenext
loop
rs.close
Set rs=Nothing
%>
<div align="center"><a href="vbscript:" onClick="vbscript:SaveDoc()">Word报表打印</a></div>
单击页面中的“Word报表打印”超链接,就可以将表格中的数据写入到Word文档中,同时生成的临时Word文档会自动打开。运行效果如图5.36所示。
图5.36 保存网页内容的Word文档
在程序处理页面的客户端VBScript脚本中,自定义一个子过程用于将网页中的表格数据写入到Word文档中。具体的实现步骤如下:
(1)创建一个Word的Application对象实例,再调用Word的Documents集合的Add方法建立一个新的文档,并将页面中的表格数据存储在一个数组中。
(2)将表格的标题写入到Word中,并增添一个空行。
(3)在Word文档中建立一个表格,并将数组中的内容填写在该表格中。
(4)保存新建立的Word文档。
代码如下:
例程5-28 代码位置:光盘/mr/5/5.5/5.5.1/01/index.asp
<script language="vbscript">
Sub SaveDoc
Dim Table1
Set table1=document.all.data
row=Table1.rows.length
set wdapp=CreateObject("Word.Application") //创建Word应用程序
wdapp.visible=true
set wddoc=wdapp.documents.add //添加新的文档
colnum =Table1.rows(1).cells.length
将页面中表格的内容存放在数组中。
reDim theArray(colnum,row)
For i=0 to row-1
For j=0 to colnum-1
thearray(j+1,i+1)=table1.rows(i).cells(j).innerHTML
next
next
intNumrows=row
将表格的标题信息写入到Word文档中,并设置其字体样式。
wdapp.application.activedocument.paragraphs.add.range.insertbefore("库存商品记录表")
set rngpara=wdapp.application.activedocument.paragraphs.add.range
with rngpara
.paragraphformat.alignment=1
.font.name="arial"
.font.size=9
End with
Set rngPara=wdapp.Application.ActiveDocument.Paragraphs(1).Range
With rngPara
.Bold=True
.ParagraphFormat.Alignment=1
.Font.Name="Arial"
.Font.Size=12
End With
在文档的指定段落的区域内,添加一表格,将数组中的数据写入到表格中。
set rngcurrent=wdapp.application.activedocument.paragraphs(3).range
set tabCurent=wdapp.application.activedocument.tables.add(rngcurrent,intnumrows,colnum)
For i=1 To row
For j=1 to colnum wdapp.application.activeDocument.Tables(1).Rows(i).Cells(j).Range.InsertAfter theArray(j,i) wdapp.application.activeDocument.Tables(1).Rows(i).Cells(j).Range.paragraphFormat.alignment=1
next
next
保存建立的Word文档。
wdapp.application.activeDocument.SaveAs "NewDoc.doc",0,false,"",true,"",false,false,false,false,false
End sub
</script>
将网页中的内容导入到Word文档后,用户可以根据实际需要再对数据报表进行编辑操作,然后打印报表。
l 方法二 打印Word报表
实例位置:光盘/mr/5/5.5/5.5.1/02
在ASP中不仅可以调用Word的相关对象将网页中的内容导入到Word,还可以打开Word文档直接进行打印操作。下面以企业营销管理系统的销售报表模块为例,介绍如何打开指定的Word报表文件,并进行打印操作。运行效果如图5.37所示。
图5.37 打印Word报表
在销售报表查看和打印页面中,首先选择相关的Word文档,然后单击“Word报表打印”按钮,这时选择的Word文档将自动打开,并处于打印的状态中。
为了便于读者理解,下面以列表的形式给出销售报表查看页面index.asp中所涉及到的表单及表单元素,如表5.8所示。
表5.8 销售报表查看页面index.asp中的表单及表单元素
名称 | 元素类型 | 重要属性 | 含义 |
form | form | action="" method="post" enctype="multipart/form-data" | 选择需要打印的Word文档 |
file1 | input | type="file" id="file1" size="20" | 确定Word文档的路径 |
| input | type="submit" id="print" onClick="openWord(file1.value)" | Excel文件路径 |
在页面中单击“Word报表打印”按钮后的运行效果如图5.38所示。
图5.38 打开指定的Word文档
在程序处理页面中的客户端VBScript脚本中,自定义一个子过程用于打开并打印指定的Word文档。在该子过程中,首先创建Word的Application对象实例,再调用Documents集合的Open方法打开Word文档,最后调用Printout方法打印Word文档。代码如下:
例程5-29 代码位置:光盘/mr/5/5.5/5.5.1/02/index.asp
<script language="vbscript">
Sub openWord(filename)
Set wrd=CreateObject("word.Application")
wrd.visible=true
wrd.Documents.Open(filename)
wrd.Application.Printout()
wrd=null
End Sub
</script>
3.补充说明
Microsoft Word是常用的文字编辑工具,使用Word可以进行记录会议内容、起草协议等工作。为了用户操作方便,在ASP中可以调用Word直接打印页面中的数据信息,即将用户在表单中输入的信息直接封装到Word中,然后再进行打印操作。如图5.39所示。
图5.39 调用Word进行Web打印
自定义一个VBScript脚本子过程,在该子过程中,首先获取页面中表单的数据信息,然后在客户端VBScript脚本中创建Word的Document对象,应用对象的相应方法将页面内容装入到Word文档中,并直接进行打印操作。代码如下:
<script language="vbscript">
Sub word_print
Set objWordDoc=CreateObject("Word.Document")
title=document.all.form1.txt_title.value&CHR(10)
nowtime=document.all.form1.txt_time.value&CHR(10)
table=title&nowtime&document.all.form1.txt_content.value
objWordDoc.Application.ActiveDocument.Paragraphs.Add.Range.InsertBefore(table)
objWordDoc.Application.ActiveDocument.Paragraphs.Add.Range.InsertBefore("")
Set rngPara=objworddoc.Application.ActiveDocument.Paragraphs(1).Range
objworddoc.Application.ActiveDocument.SaveAs "如何调用Word进行Web打印"
objWordDoc.application.printout()
End Sub
</script>
5.5.2 打印Access报表
在Microsoft Access数据库中,用户可以根据数据表创建Access报表,从而快速、准确地掌握数据信息。在ASP应用程序中,通过调用Access的相关对象可以打印指定的Access报表。
1.方案分析
Microsoft Access数据库不仅具有强大的数据存储功能,还拥有完善的报表功能,它支持子报、表、多栏报表、图形报表等多种复杂元素。在ASP中,调用Access的Application对象,可以开发直接打印Access报表的程序。
打印Access报表的流程图,如图5.40所示。
图5.40 打印Access报表流程图
2.实施过程
实例位置:光盘/mr/5/5.5/5.5.2
在ASP应用程序中直接打印Access报表,可以方便用户对数据库的一些相关操作。下面以新闻网站为例,介绍ASP调用Access的Application对象实现打印Access数据库中新闻报表的功能。运行效果如图5.41所示。
图5.41 打印Access报表
在Microsoft Access数据库中,可以使用向导创建报表。下面介绍具体创建报表的步骤:
(1)打开Access数据库,单击左侧面板中的“报表”对象,在右侧选择“使用向导创建报表”的命令,打开“报表向导”窗口,在此窗口中选择表及字段名称,如图5.42所示。
图5.42 选择表及指定字段
(2)单击“下一步”按钮,可在打开的窗口中“确定是否添加分组类别”。再单击“下一步”按钮,在打开的窗口中可以确定记录所用的排序次序,如图5.43所示。
图5.43 确定记录所用的排序次序
(3)单击两次“下一步”按钮,分别确定报表的布局方式和所用样式。然后在下一个窗口中为报表指定标题,这里输入“打印新闻报表”,如图5.44所示。最后,单击“完成”按钮成功创建Access报表。
图5.44 定义报表标题
创建Access报表后,在ASP页面中建立表单。在表单中,用户通过选择所要操作的数据库文件以及输入Access数据库中报表的名称,来触发打印Access报表的程序。下面给出表单中关键元素的代码:
例程5-30 代码位置:光盘/mr/5/5.5/5.5.2/index.asp
<form action="" method="post" name="form1" onSubmit="PrintReport()">
Access数据库路径:<input name="txt_db" type="file" id="txt_db">
Access数据库中报表名称:<input name="txt_report" type="text" id="txt_report" title="Access数据库中报表名称">
<input type="submit" name="Submit" value="打印Access报表" onClick="return Mycheck(this.form)">
<input type="reset" name="Submit2" value="重置表单内容"></td>
</form>
在ASP页面中,自定义一个客户端VBScript脚本的sub过程。在该过程中,首先创建Access的Application对象实例,然后调用对象的OpenCurrentDatabase方法连接所指定的Access数据库,再调用OpenReport方法打印指定名称的Access报表,最后给出打印成功的提示信息。代码如下:
例程5-31 代码位置:光盘/mr/5/5.5/5.5.2/index.asp
<script language="vbscript">
sub PrintReport()
Set pr = CreateObject("Access.Application")
pr.OpenCurrentDatabase document.all.txt_db.value
pr.DoCmd.OpenReport document.all.txt_report.value
pr.CloseCurrentDatabase
Set pr = Nothing
Msgbox "恭喜您,打印Access报表成功!"
end sub
</script>
3.补充说明
编写ASP应用程序所采用的VBScript语言是一种简单的脚本语言,只能实现有限的功能。而使用一些开发工具编写的组件,可以调用各种系统资源,实现较为复杂的功能。微软公司的ASP具有良好的可扩展性,而扩展ASP最有效的途径就是开发自定义的DLL组件,使用DLL组件的优势如下:
(1)实现代码封装技术。在开发程序时,ASP代码是嵌入在HTML语言中的,如果页面设计有变动,设计人员很难对嵌有代码的页面做改动,如果将代码封装在组件中,既方便设计人员进行页面布局,又增强程序的可读性。
(2)起到保护页面源码的作用。ASP程序是无须编译的,即它是以源码的形式存储在服务器上的,源程序很容易被他人获取。而组件是经过编译的,服务器端只有一个编译的DLL文件,保证源代码不被泄漏。
(3)编译好的组件可以重复使用,节约开发时间。
(4)用户将程序开发代码封装在组件中,可以申请知识产权保护其利益。
读者可以尝试使用Visual Basic软件来自定义ActiveX组件,然后调用该组件来实现特定的功能模块。
5.5.3 图形报表打印
图形报表是一种非常直观的数据表现形式,它是通过柱状图、饼型图、折线图等多种图表格式来统计数据的报表形式。在ASP中,可以利用图形报表来统计和处理数据,并进行打印操作等。
1.方案分析
在实际工作中,为了使用户能够以直观的方式查看到数据报表的内在结构,并能够明确报表所表达的含义,可以使用图形报表作为报表的表现形式。在ASP应用程序中,可以调用Visual Basic软件中内置的MSChart组件(MSChart组件是Microsoft提供的ActiveX组件之一,可以使用图形方式显示数据的图表),将数据库中的数据信息以图形的方式展现在页面中,从而实现图形报表打印的功能。
图形报表打印的流程图,如图5.45所示。
图5.45 图形报表打印流程图
2.实施过程
实例位置:光盘/mr/5/5.5/5.5.3
在ASP中可以引用外部组件,使用柱状图、折线图等形式将统计数据展现在网页中。下面以网站的销售管理模块为例,介绍在选择查询条件并对商品销售情况进行统计核实时,利用图形报表显示查询结果的过程。运行效果如图5.46所示。
图5.46 图形报表打印
在商品销售统计页面中,提供了按月、按年或者按照具体日期进行销售统计的功能。在默认情况下,是针对所有商品进行销售统计的,用户也可以输入具体的商品编号只针对一种商品进行销售统计。
在程序处理页面中,首先根据选择的统计类型,确定对应的SQL查询语句;然后使用<object>标记嵌入MSChart组件;再通过JavaScript脚本语言设定MSChart组件的各属性值,使查询到的结果以图形方式显示在页面中。代码如下:
例程5-32 代码位置:光盘/mr/5/5.5/5.5.3/index.asp
<%
If Not Isempty(Request("btt_sell")) Then
txt_Gnum=Request.Form("txt_Gnum")
txt_type=Request.Form("txt_type")
txt_amount=Request.Form("txt_amount")
txt_start=Request.Form("txt_start")
txt_end=Request.Form("txt_end")
如果用户在商品编号文本框中输入内容,则判断此商品编号是否存在。
If txt_Gnum<>"" Then
Set rs=Server.CreateObject("ADODB.Recordset")
sqlstr="select Gnum from tb_sell where Gnum='"&txt_Gnum&"'"
rs.open sqlstr,conn,1,1
If rs.eof or rs.bof Then
Response.Write("<script language='javascript'>alert('此商品没有销售信息,请重新输入!');history.back();</script>")
End If
rs.close
Set rs=Nothing
End If
根据用户选择的统计类型,确定SQL查询语句。获取到的变量txt_type的值如果值为1,则按照商品的销售月份进行分组查询,并统计指定月份的销售金额;如果值为2,则按照商品的销售年份进行分组查询,并统计指定年份的销售金额。
Select case txt_type
case "1"
fig="个月"
If txt_Gnum<>"" Then
sqlstr="select * from (select top "&txt_amount&" sum(Smoney) as totals,Month(Sdate) as IssueDate from tb_sell where Gnum='"&txt_Gnum&"' group by Month(Sdate) order by Month(Sdate) desc) as a order by a.IssueDate"
Else
sqlstr="select * from (select top "&txt_amount&" sum(Smoney) as totals,Month(Sdate) as IssueDate from tb_sell group by Month(Sdate) order by Month(Sdate) desc) as a order by a.IssueDate"
End If
case "2"
fig="年"
If txt_Gnum<>"" Then
sqlstr="select * from (select top "&txt_amount&" sum(Smoney) as totals,Year(Sdate) as IssueDate from tb_sell where Gnum='"&txt_Gnum&"' group by Year(Sdate) order by Year(Sdate) desc) as a order by a.IssueDate"
Else
sqlstr="select * from (select top "&txt_amount&" sum(Smoney) as totals,Year(Sdate) as IssueDate from tb_sell group by Year(Sdate) order by Year(Sdate) desc) as a order by a.IssueDate"
End If
End Select
通过日期区间统计商品销售情况。
If txt_start<>"" and txt_end<>"" Then
If txt_Gnum<>"" Then
sqlstr="select * from (select sum(Smoney) as totals,Sdate as IssueDate from tb_sell where Gnum='"&txt_Gnum&"' and Sdate between #"&txt_start&"# and #"&txt_end&"# group by Sdate order by Sdate desc) as a order by a.IssueDate"
Else
sqlstr="select * from (select sum(Smoney) as totals,Sdate as IssueDate from tb_sell where Sdate between #"&txt_start&"# and #"&txt_end&"# group by Sdate order by Sdate desc) as a order by a.IssueDate"
End If
End If
Set rs=Server.CreateObject("ADODB.Recordset")
rs.open sqlstr,conn,1,1
counts=rs.recordcount
%>
使用<object>标记引用MSChart组件,并在JavaScript脚本中定义组件的各属性值,从而将查询到的结果以图表的形式显示在页面表格中。
<table width="600" border="1" align="center" cellpadding="0" cellspacing="0" bordercolor="#FFFFFF" bordercolorlight="#9CA6C6" bordercolordark="#CCE3FF">
<tr bgcolor="#FF9933">
<td height="10" colspan="6" class="word_white"> </td>
</tr>
<tr align="center" bgcolor="#C8E3FF">
<td height="14">
<%
if counts>0 then
sum=0
%>
<object classid="clsid:3A2B370C-BA0A-11D1-B137-0000F8753F5D" name="chart" width="100%" height="300">
<%'定义对象,该对象命名为chart%>
</object>
<% for i=1 to counts
If txt_amount="" Then txt_amount=1
If fig="" Then fig="企业"
%>
<script language="javascript">
chart.chartType=1;
chart.ColumnCount=1;
chart.TitleText="最近 "+<%=txt_amount%>+"<%=fig%>"+" 商品销售情况显示图表 : ";
chart.rowcount=<%=counts%>;
chart.row=<%=i%>;
chart.rowlabel="<%=rs("IssueDate")%>(月/年/日期)";
chart.Data=<%=rs("totals")%>;
chart.Footnote="注:纵坐标为销售金额";
</script>
<%sum=sum+rs("totals")
rs.movenext
next
%>
</td>
</tr>
<tr>
<td height="30" colspan="6"> 最近<%Response.Write(txt_amount&fig)%>的销售金额为 <%=sum%>元 </td>
</tr>
</table>
<br>
引用WebBrowser组件,打印页面中的图形报表。
<object id=WebBrowser classid=ClSID:8856F961-340A-11D0-A96B-00C04Fd705A2 width="0" height="0"></object>
<div align="center"><a href="#" onClick="document.all.WebBrowser.Execwb(8,1)" class="Noprint">页面属性</a> <a href="#" onClick="document.all.WebBrowser.Execwb(7,1)" class="Noprint">打印预览</a> <a href="#" onClick="document.all.WebBrowser.Execwb(6,1)" class="Noprint">打印</a></div>
<%End IF
End IF
%>
3.补充说明
在网络应用程序中,经常会遇到由浏览者自己输入日期的情况,如注册页面中的生日、商品销售中售货日期等,如果输入的日期格式不正确,数据则不能正确保存。为了方便用户操作及保证输入日期格式的正确性,可以在需要输入日期的位置加入Visual Basic的日期拾取组件(Microsoft Date and Time Picker),由用户自己选择日期。如图5.47所示。
图5.47 调用Microsoft Date and Time Picker组件
DateTimePicker组件是Microsoft提供的ActiveX组件之一,可以返回格式化的日期字段,使得选择日期很容易。在使用DateTimePicker组件之前,应注册MSCOMCT2.OCX文件并安装Visual Basic软件。调用日历组件及获取选择的日期的关键代码如下:
<form name="myform" method="post" action="">
<tr bgcolor="#FFFFFF">
<td width="107" height="22" align="right">您选择的日期为:</td>
<td width="286" height="22"><input name="Date_time" type="text" id="Date_time" onMouseOver="myevent()" onFocus="myevent()"></td>
</tr>
</form>
<tr bgcolor="#FFFFFF">
<td height="22" align="right">选择日期:</td>
<td height="22">
<script language="javascript">
function myevent(){
var date=new Date(mydate.value) ;
year=date.getUTCFullYear();
month=date.getUTCMonth()+1;
day=date.getUTCDate();
myform.Date_time.value=year+"-"+month+"-"+day;
//myform.submit();
}
</script>
<object classid="clsid:20DD1B9E-87C4-11D1-8BE3-0000F8754DA1" name="mydate" width="110" height="20">
<param name="format" value=1>
</object></td>
</tr>
5.5.4 套打报表
套打是现在应用较为广范的一种打印方式,它是一种在印制有凭证、账簿、报表格式、证书等纸张上进行打印的打印方式,以这种方式进行打印时,无须打印表格的表格线及其他固定的格式内容,有利于加快打印速度、节约打印耗材、延长打印机的使用寿命等。
1.方案分析
在一些工作领域中(例如通信、邮政、商务洽谈、财务等),为了加快工作效率,并为用户提供方便,工作人员通常会将一些常用的业务事项或流程、凭证等事先打印出来,再由用户按照上面的提示进行填写、核实等。
使用ASP开发动态网站时,可以在页面中设计出所需要的格式,然后从数据库中读取所需要的数据,并将数据放置在页面指定的位置,从而实现套打报表的功能。套打报表的流程图,如图5.48所示。
图5.48 套打报表流程图
2.实施过程
实例位置:光盘/mr/5/5.5/5.5.4
在生活和工作过程中,当人们邮寄一些快件时,首先要在快递单上填写邮件的基本信息。在开发动态网站时,为了满足用户需求,可以提供实时打印快递单的功能。下面以电子商务网站的订单信息管理模块为例,介绍套打快递单的实现过程。运行效果如图5.49所示。
图5.49 套打快递单
在套打快递单页面中,用户可以通过填写寄件人或收件人的姓名来查询快递单的详细信息。程序处理页面根据获取到的表单数据,确定查询的SQL语句,然后将从数据库中读取到的数据添加到页面中指定位置,并应用打印技术执行套打操作。代码如下:
例程5-33 代码位置:光盘/mr/5/5.5/5.5.4/index.asp
<%
Dim SendTime,SendAddress,ReceiveAddress,SendTel,Sender,ReceiveTel,Receiver,ThingsName,PayMoney,ThingsNumber,ThingsWeight,ThingsPrice
sql_type=Trim(Request.Form("type"))
txt_name=Trim(Request.Form("txt_name"))
Set rs=Server.CreateObject("ADODB.Recordset")
sqlstr="select * from tb_info where 1=1"
根据用户填写的查询条件,确定SQL查询语句。
If txt_name<>"" then
select case sql_type
case "0"
sqlstr=sqlstr&" and sender='"&txt_name&"'"
case "1"
sqlstr=sqlstr&" and receiver='"&txt_name&"'"
end select
End If
rs.open sqlstr,conn,1,1
If rs.eof or rs.bof Then
Response.Write("<p align=center>暂时不能提供任何信息!</p>")
Response.End
End if
对查询到信息的进行分页处理。
rs.pagesize=1 '定义每页显示的记录数
pages=clng(Request("pages")) '获得当前页数
If pages<1 Then pages=1
If pages>rs.recordcount Then pages=rs.recordcount
showpage rs,pages '执行分页子程序showpage
Sub showpage(rs,pages) '分页子程序showpage(rs,pages)
rs.absolutepage=pages '指定指针所在的当前位置
For i=1 to rs.pagesize '循环显示记录集中的记录SendTime=Now()
SendAddress=rs("sendAddress")
ReceiveAddress=rs("ReceiveAddress")
SendTel=rs("SendTel")
Sender=rs("Sender")
ReceiveTel=rs("ReceiveTel")
Receiver=rs("Receiver")
ThingsName=rs("ThingsName")
PayMoney=rs("PayMoney")
ThingsNumber=rs("ThingsNumber")
ThingsWeight=rs("ThingsWeight")
ThingsPrice=rs("ThingsPrice")
SendTime=rs("sendTime")
%>
…略,表格信息
<%
rs.movenext
If rs.eof Then Exit For
Next
End Sub
%>
<br>
<table width="450" height="25" border="0" align="center" cellpadding="-2" cellspacing="0" class="print">
<tr valign="middle" bgcolor="#FFFFFF">
<%If Not (rs.eof and rs.bof) Then%>
<td width="280" height="28"><% if pages<>1 then %>
<a href=?pages=1>第一页</a> <a href=?pages=<%=(pages-1)%>>上一页</a>
<%end if
if pages<>rs.pagecount then %>
<a href=?pages=<%=(pages+1)%>>下一页</a> <a href=?pages=<%=rs.pagecount%>>最后一页</a>
<%end if%></td>
<%If not(rs.Eof and rs.Bof) Then%>
<td width="220" height="28" align="right" class="word_grey">[<%=pages%>/<%=rs.PageCount%>] 每页<%=rs.PageSize%>条 共<%=rs.RecordCount%>条信息</td>
<%End If
rs.close
Set rs=Nothing
End If
%>
</tr>
<tr bgcolor="#000000">
<td colspan="2" valign="bottom" height="1"></td>
</tr>
</table>
<br>
应用WebBrowser组件进行套打报表的操作。
<object id=WebBrowser classid=ClSID:8856F961-340A-11D0-A96B-00C04Fd705A2 width="0" height="0"> </object>
<div align="center"><a href="#" onClick="document.all.WebBrowser.Execwb(8,1)" class="Noprint">页面设置</a> <a href="#" onClick="document.all.WebBrowser.Execwb(7,1)" class="Noprint">打印预览</a> <a href="#" onClick="document.all.WebBrowser.Execwb(6,1)" class="Noprint">打印</a></div>
3.补充说明
使用WebBrowser组件执行打印报表操作时,根据报表的实际结构,用户可以通过“页面设置”来定义打印选项,从而使打印能够顺利进行。例如,当纸张纵向打印不适合报表的宽度时,可以调整为“横向”打印;可以设置“页边距”,使报表在指定的纸张位置处进行打印;可以设置打印页面的页眉页脚等。
“页面设置”所包含的选项,如图5.50所示。