ASP.NET页面打印(20041117)
一个系统肯定会有报表或查询,那么也就意味着要用到打印,而ASP.NET页面的打印怎么实现呢?通过我的实践,归纳如下:
1.水晶报表
优点:功能强大,可灵活定义报表.
缺点:不容易部署(移植不方便,需要重新引用组件并输入Licenet等),实现烦琐
实现:首先建立报表(.rpt文件)并在要打印的页面上放一个CrystalReportViewer控件,在打印前将报表源指定给页面控件.
2.打印页面
优点:实现简单且使用方便.
缺点:页面设置不灵活.
实现:在打印时传递参数给打印页面(预先设置好报表样式),并显示所要打印数据,然后直接按工具栏中的"打印"即可.但默认情况下,打印时带有页眉与页脚,要想使其在打印时取掉(当然可以手工设置,如果客户愿意的话),程序实现也有两种方法,但必须是客户端代码实现,因为如果服务端代码实现的话将修改的是服务器的设置,分别如下:
a.修改注册表
<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 Wsh=new ActiveXObject("WScript.Shell");
HKEY_Key="header";
Wsh.RegWrite(HKEY_Root+HKEY_Path+HKEY_Key,"");
HKEY_Key="footer";
Wsh.RegWrite(HKEY_Root+HKEY_Path+HKEY_Key,"");
}
catch(e){}
}
//设置网页打印的页眉页脚为默认值
function PageSetup_Default()
{
try
{
var Wsh=new ActiveXObject("WScript.Shell");
HKEY_Key="header";
Wsh.RegWrite(HKEY_Root+HKEY_Path+HKEY_Key,"&w&b页码,&p/&P");
HKEY_Key="footer";
Wsh.RegWrite(HKEY_Root+HKEY_Path+HKEY_Key,"&u&b&d");
}
catch(e){}
}
</script>
建立上面两个函数后,再点击打印时调用相应函数即可.
b.用ActiveX控件
网上有一个ScriptX.cab控件,调用其内的函数可调出"页面设置"对话框进行设置,详细说明可从网上获得,没做测试.
但以上两种方法都将需要将IE安全级设置为最低.