[*] Hello Snoopy

.NET and Flash Blog
[源代码]ASP.NET中实现Web打印的方案
实现Web打印的方案,有些地方还需完善。
using System;
using System.Data;
using System.Web;
using System.Text;
using System.Collections;
using System.Web.UI;
using System.Data.SqlClient;
using System.Web.UI.WebControls;
using System.Web.UI.HtmlControls;
using System.IO;

namespace WebPrint
{
/// <summary>
/// 这是一个完全利用IE自身对象实现Web打印的方案,主体数据来源于DataGrid控件绑定的数据
/// 同时,用户可以自定义标题、页眉、页脚、每页打印行数等一般报表的基本要素
/// 作者:KG 
/// 日期:2005.1.1
/// 来源:www.domanage.com.
/// </summary>

public class clsPrint: System.Web.UI.Page
{
private string[] sShoulderLeft;
private string[] sShoulderCenter;
private string[] sShoulderRight;



private string[] sFooterLeft;
private string[] sFooterCenter;
private string[] sFooterRight;



private string sPageTitle = "";
private string sSpanColumnList = "";

private int iPageNumber = 30;

private DataGrid MyDataGrid;

private static string pageUrlBase; //Page基本的URL 

public clsPrint()
{
try
{
string urlSuffix = Context.Request.Url.Host ;
urlSuffix 
= urlSuffix + (Context.Request.Url.Port.ToString()=="" ? "" : ":"+ Context.Request.Url.Port);
urlSuffix 
= urlSuffix + (Context.Request.ApplicationPath.ToString()=="/" ? "" :Context.Request.ApplicationPath);
pageUrlBase 
= @"http://" + urlSuffix; 

}

catch
{
// for design time
}
 
}



每页显示的行数



页的标题

网格控键要合并的列集合



左页眉标题,数组类型[0][1] 显示顺序从上至下



中页眉标题,数组类型[0][1] 显示顺序从上至下



右页眉标题,数组类型[0][1] 显示顺序从上至下



左页脚标题,数组类型[0][1] 显示顺序从上至下



中页脚标题,数组类型[0][1] 显示顺序从上至下



右页脚标题,数组类型[0][1] 显示顺序从上至下



打印的网格控件名称



修改模板文件的内容,构造打印数据,重写打印模板



打印主函数,构造要打印的页面的所有打印项目(标题,列标题,网格数据,shoulder,footer)



增加一行数据到表格中,生成要打印网格数据的行数据

添加打印网格数据的列标题



添加页眉



添加页脚



添加页的标题



添加页的换页符,打印换页

重写模板文件,恢复打印模板样式
}

}





使用方法:



private static clsPrint m_clsPrint = new clsPrint();

private void Page_Load(object sender, System.EventArgs e)
{
if(!IsPostBack)

BindGrid();
}
 
}




private void DisplayGrid()
{



MyDataGrid.DataBind();
m_clsPrint.dgDataGrid 
= MyDataGrid;



}




private void btnPrint_Click(object sender, System.EventArgs e)
{
可使用方法和属性如下:

m_clsPrint.PageTitle 
= "权限列表";
m_clsPrint.PageNumber 
= 30;

string[] sShoulderLeft = new string[3];
string[] sShoulderCenter = new string[1];
string[] sShoulderRight = new string[2];

sShoulderLeft[
0= "左页眉一";
sShoulderLeft[
1= "左页眉二";
sShoulderLeft[
2= "左页眉三";

sShoulderCenter[
0= "中页眉一 ";

sShoulderRight[
0= "右页眉一";
sShoulderRight[
1= "右页眉二(共计XXXX名)";

m_clsPrint.ShoulderLeft 
= sShoulderLeft;
m_clsPrint.ShoulderCenter 
= sShoulderCenter;
m_clsPrint.ShoulderRight 
= sShoulderRight;

string[] sFooterLeft = new string[3];
string[] sFooterCenter = new string[1];
string[] sFooterRight = new string[2];

sFooterLeft[
0= "左页脚一制表人:XXX 制表日期:";
sFooterLeft[
1= "左页脚二复核人:XXX 复核日期:";
sFooterLeft[
2= "左页脚三XXX教学服务站(中心)XXXX入学年级";

sFooterCenter[
0= "中页脚一";

sFooterRight[
0= "右页脚一2009年18月40";
sFooterRight[
1= "右页脚二(共计XXXX名)";

m_clsPrint.FooterLeft 
= sFooterLeft;
m_clsPrint.FooterCenter 
= sFooterCenter;
m_clsPrint.FooterRight 
= sFooterRight;
m_clsPrint.SpanColumnList
="0,1";

m_clsPrint.PrintView();

Page.RegisterStartupScript(
"show""<script languge='javascript'>window.open('"+PageBase.UrlBase+"/printWindow.htm','_blank');</script>");

}


其中:PageBase.UrlBase是自己定义的返回的当前站点的URL

posted on 2005-02-18 09:46  HelloSnoopy  阅读(5138)  评论(6编辑  收藏  举报