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 WebPrinter
... {
/**//// <summary>
/// WebPrinter 的摘要说明。
/// </summary>
public class WebPrint
...{
private DataGrid dgPrintGrid;
private int nHeaderLines;
private int nLinesPerPage;
private string sTitle, sBottomTitle;
private int opCode;
private string sUserPage;
private string sPath;
public WebPrint()
...{
}
设置要打印的表格#region 设置要打印的表格
/**//// <summary>
/// 设置要打印的表格
/// </summary>
public DataGrid Grid
...{
get...{return dgPrintGrid;}
set...{dgPrintGrid = value;}
}
#endregion
设置要将表格开头的多少行作为标题行#region 设置要将表格开头的多少行作为标题行
/**//// <summary>
/// 设置要将表格开头的多少行作为标题行
/// </summary>
public int HeaderLines
...{
get...{return nHeaderLines;}
set...{nHeaderLines = value;}
}
#endregion
设置每页打印多少行,为0时表示不限.#region 设置每页打印多少行,为0时表示不限.
/**//// <summary>
/// 设置每页打印多少行,为0时表示不限.
/// </summary>
public int LinesPerPage
...{
get...{return nLinesPerPage;}
set...{nLinesPerPage = value;}
}
#endregion
设置打印的标题,为""时不打印标题.#region 设置打印的标题,为""时不打印标题.
/**//// <summary>
/// 设置打印的标题,为""时不打印标题.
/// </summary>
public string PrintTitle
...{
get...{return sTitle;}
set...{sTitle = value;}
}
#endregion
设置打印的底部标题,为""时不打印标题.#region 设置打印的底部标题,为""时不打印标题.
/**//// <summary>
/// 设置打印的底部标题,为""时不打印标题.
/// </summary>
public string BottomTitle
...{
get...{return sBottomTitle;}
set...{sBottomTitle = value;}
}
#endregion
操作代码:0页面设置,1预览,2打印.#region 操作代码:0页面设置,1预览,2打印.
/**//// <summary>
/// 操作代码:0页面设置,1预览,2打印.
/// </summary>
public int OperateCode
...{
get...{return opCode;}
set...{opCode = value;}
}
#endregion
当前用户的打印文件名称,可用该用户的IP地址或用户名.#region 当前用户的打印文件名称,可用该用户的IP地址或用户名.
/**//// <summary>
/// 当前用户的打印文件名称,可用该用户的IP地址或用户名.
/// </summary>
public string UserPage
...{
get...{return sUserPage;}
set...{sUserPage = value;}
}
#endregion
主目录路径#region 主目录路径
/**//// <summary>
/// 主目录路径
/// </summary>
public string Path
...{
get...{return sPath;}
set...{sPath = value;}
}
#endregion
根据Grid生成表格内容.#region 根据Grid生成表格内容.
/**//// <summary>
/// 根据Grid生成表格内容.
/// </summary>
/// <returns></returns>
private string getTable()
...{
string sTable="";
string sTemp="", sTemp2;
string sCssName = dgPrintGrid.CssClass;
string sLF = System.Environment.NewLine;
//表格
sTable = sTable + "<table class='"+sCssName+"' width='"+dgPrintGrid.Width.ToString()+"' >" + sLF;
//标题
if (sTitle != "")
...{
sTable = sTable + "<tr>" + sLF;
sTable = sTable + "<td style='font-size:16px'>"+sTitle+"</td>" + sLF;
sTable = sTable + "</tr>" + sLF;
}
//主内容
sTable = sTable + "<tr>" + sLF;
sTable = sTable + "<td valign='top'>" + sLF;
sTable = sTable + "<table class='"+sCssName+"' width='"+dgPrintGrid.Width.ToString()+"' border='0' cellspacing='0' cellpadding='0'>" + sLF;
//表头
sTable = sTable + "<THEAD style='display:table-header-group;'>" + sLF;
sTable = sTable + "<tr>";
sTemp2 = dgPrintGrid.HeaderStyle.HorizontalAlign.ToString();
for(int j=0; j<dgPrintGrid.Columns.Count; j++)
if (dgPrintGrid.Columns[j].Visible)
...{
sTable = sTable + "<td style='border:1px solid #000000' align='"+sTemp2+"'>"+dgPrintGrid.Columns[j].HeaderText+"</td>";
}
sTable = sTable + "</tr>" + sLF;
for(int i=0; i<HeaderLines-1; i++)
...{
sTable = sTable + "<tr>";
for(int j=0; j<dgPrintGrid.Columns.Count; j++)
if (dgPrintGrid.Columns[j].Visible)
sTable = sTable + "<td style='border:1px solid #000000' align='"+sTemp2+"'>"+dgPrintGrid.Items[1+i].Cells[j].Text+"</td>";
sTable = sTable + "</tr>" + sLF;
}
sTable = sTable + "</THEAD>" + sLF;
//行内容
sTemp2 = dgPrintGrid.ItemStyle.HorizontalAlign.ToString();
int nLines = 0;
for(int j=HeaderLines-1; j<dgPrintGrid.Items.Count; j++)
...{
if (nLinesPerPage!=0 && nLines!=0 && nLines%nLinesPerPage == 0)
sTable = sTable + "<tr style='page-break-before:always'>";
else
sTable = sTable + "<tr>";
for(int i=0; i<dgPrintGrid.Columns.Count; i++)
if (dgPrintGrid.Columns[i].Visible)
...{
if(dgPrintGrid.Columns[i] is System.Web.UI.WebControls.TemplateColumn)
...{
//要增加对其他控件的支持可修改这里。
if (dgPrintGrid.Items[j].Cells[i].Controls[1] is System.Web.UI.WebControls.TextBox)
sTemp = ((System.Web.UI.WebControls.TextBox)dgPrintGrid.Items[j].Cells[i].Controls[1]).Text;
else if (dgPrintGrid.Items[j].Cells[i].Controls[1] is System.Web.UI.WebControls.Label)
sTemp = ((System.Web.UI.WebControls.Label)dgPrintGrid.Items[j].Cells[i].Controls[1]).Text;
else if (dgPrintGrid.Items[j].Cells[i].Controls[1] is System.Web.UI.WebControls.DropDownList)
sTemp = ((System.Web.UI.WebControls.DropDownList)dgPrintGrid.Items[j].Cells[i].Controls[1]).SelectedItem.Text;
}
else if (dgPrintGrid.Columns[i] is System.Web.UI.WebControls.BoundColumn)
sTemp = dgPrintGrid.Items[j].Cells[i].Text;
sTable = sTable + "<td style='border:1px solid #000000' align='"+sTemp2+"'>"+sTemp+"</td>";
}
sTable = sTable + "</tr>" + sLF;
nLines++;
}
//尾部
sTable = sTable + "</table>" + sLF;
sTable = sTable + "</td>" + sLF;
sTable = sTable + "</tr>" + sLF;
//底部标题
if (sBottomTitle != "")
...{
sTable = sTable + "<tr>" + sLF;
sTable = sTable + "<td>"+sBottomTitle+"</td>" + sLF;
sTable = sTable + "</tr>" + sLF;
}
sTable = sTable + "</table>" + sLF;
//选择操作
sTable = sTable + "<script>" + sLF;
if (OperateCode ==0)
...{
sTable = sTable + "function window.onload()" + sLF;
sTable = sTable + "{" + sLF;
sTable = sTable + " pageSetup();" + sLF;
sTable = sTable + " window.opener=null;window.close();" + sLF;
sTable = sTable + "}" + sLF;
}
else if (OperateCode ==1)
...{
sTable = sTable + "function window.onload()" + sLF;
sTable = sTable + "{" + sLF;
sTable = sTable + " preView();" + sLF;
sTable = sTable + " window.opener=null;window.close();" + sLF;
sTable = sTable + "}" + sLF;
}
else if (OperateCode ==2)
...{
sTable = sTable + "function window.onload()" + sLF;
sTable = sTable + "{" + sLF;
sTable = sTable + " print();" + sLF;
sTable = sTable + " window.opener=null;window.close();" + sLF;
sTable = sTable + "}" + sLF;
}
sTable = sTable + "</script>" + sLF;
return sTable;
}
#endregion
打印表格.#region 打印表格.
/**//// <summary>
/// 打印表格.
/// </summary>
/// <param name="Response"></param>
public void PrintGrid(System.Web.HttpResponse Response)
...{
StringBuilder htmltext=new StringBuilder();
try
...{
if(!File.Exists(sPath + "/PrintFile/" + sUserPage))
...{
FileStream fs = File.Create(sPath + "/PrintFile/" + sUserPage);
fs.Close();
}
//读出模板内容
using (StreamReader sr = new StreamReader(sPath + "/PrintTemp.htm"))
...{
string sLine = "";
while ((sLine = sr.ReadLine()) != null)
...{
htmltext.Append(sLine);
}
sr.Close();
}
//替换模板的主体内容
htmltext.Replace("PrintTempBody", getTable());
//生成打印文件并打开.
using (StreamWriter sw = new StreamWriter(sPath + "/PrintFile/"+sUserPage,false,System.Text.Encoding.GetEncoding("GB2312")))
...{
sw.WriteLine(htmltext);
sw.Flush();
sw.Close();
Response.Write("<script languge='javascript'>window.open('PrintFile/"+sUserPage+"','_blank');</script>");
}
}
catch(Exception ex)
...{
Response.Write("<Script>"+ex.Message+"</Script>");
}
}
#endregion
}
}
在生成的HTML文件中要用到的JAVASCRIPT代码:
var hkey_root,hkey_path,hkey_key
hkey_root = " HKEY_CURRENT_USER "
hkey_path = " SoftwareMicrosoftInternet ExplorerPageSetup "
// 设置网页打印的页眉页脚为空
function pagesetup_null()
... {
try
...{
var RegWsh = CreateObject("WScript.Shell");
hkey_key="header";
RegWsh.RegWrite(hkey_root+hkey_path+hkey_key,"");
hkey_key=" ooter";
RegWsh.RegWrite(hkey_root+hkey_path+hkey_key,"");
}
catch(e)
...{
//alert("您的浏览器不支持此功能");
}
}
// 预览
function prepare()
... {
try
...{
//top.MainFrame.focus();
WB.ExecWB(7,1)
}
catch(e)
...{
//alert("您的浏览器不支持此功能")
}
}
// 打印预览
function preView()
... {
pagesetup_null();
prepare();
}
// 页面设置
function pageSetup()
... {
try...{WB.ExecWB(8,1)}catch(e)...{alert("您的浏览器不支持此功能")}
}
// 打印
function print()
... {
try...{WB.ExecWB(6,6)}catch(e)...{alert("您的浏览器不支持此功能")}
}
调用例子:
WebPrint pr = new WebPrint();
pr.Grid = DataGrid1;
pr.HeaderLines = nHeaderLines;
pr.LinesPerPage = nLinesPerPage;
pr.OperateCode = 2 ;
pr.Path = sPath;
pr.PrintTitle = sTitle;
pr.BottomTitle = sBottomTitle;
pr.UserPage = sUserPage;
pr.PrintGrid(Response);
文章引用自:
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 WebPrinter
... {
/**//// <summary>
/// WebPrinter 的摘要说明。
/// </summary>
public class WebPrint
...{
private DataGrid dgPrintGrid;
private int nHeaderLines;
private int nLinesPerPage;
private string sTitle, sBottomTitle;
private int opCode;
private string sUserPage;
private string sPath;
public WebPrint()
...{
}
设置要打印的表格#region 设置要打印的表格
/**//// <summary>
/// 设置要打印的表格
/// </summary>
public DataGrid Grid
...{
get...{return dgPrintGrid;}
set...{dgPrintGrid = value;}
}
#endregion
设置要将表格开头的多少行作为标题行#region 设置要将表格开头的多少行作为标题行
/**//// <summary>
/// 设置要将表格开头的多少行作为标题行
/// </summary>
public int HeaderLines
...{
get...{return nHeaderLines;}
set...{nHeaderLines = value;}
}
#endregion
设置每页打印多少行,为0时表示不限.#region 设置每页打印多少行,为0时表示不限.
/**//// <summary>
/// 设置每页打印多少行,为0时表示不限.
/// </summary>
public int LinesPerPage
...{
get...{return nLinesPerPage;}
set...{nLinesPerPage = value;}
}
#endregion
设置打印的标题,为""时不打印标题.#region 设置打印的标题,为""时不打印标题.
/**//// <summary>
/// 设置打印的标题,为""时不打印标题.
/// </summary>
public string PrintTitle
...{
get...{return sTitle;}
set...{sTitle = value;}
}
#endregion
设置打印的底部标题,为""时不打印标题.#region 设置打印的底部标题,为""时不打印标题.
/**//// <summary>
/// 设置打印的底部标题,为""时不打印标题.
/// </summary>
public string BottomTitle
...{
get...{return sBottomTitle;}
set...{sBottomTitle = value;}
}
#endregion
操作代码:0页面设置,1预览,2打印.#region 操作代码:0页面设置,1预览,2打印.
/**//// <summary>
/// 操作代码:0页面设置,1预览,2打印.
/// </summary>
public int OperateCode
...{
get...{return opCode;}
set...{opCode = value;}
}
#endregion
当前用户的打印文件名称,可用该用户的IP地址或用户名.#region 当前用户的打印文件名称,可用该用户的IP地址或用户名.
/**//// <summary>
/// 当前用户的打印文件名称,可用该用户的IP地址或用户名.
/// </summary>
public string UserPage
...{
get...{return sUserPage;}
set...{sUserPage = value;}
}
#endregion
主目录路径#region 主目录路径
/**//// <summary>
/// 主目录路径
/// </summary>
public string Path
...{
get...{return sPath;}
set...{sPath = value;}
}
#endregion
根据Grid生成表格内容.#region 根据Grid生成表格内容.
/**//// <summary>
/// 根据Grid生成表格内容.
/// </summary>
/// <returns></returns>
private string getTable()
...{
string sTable="";
string sTemp="", sTemp2;
string sCssName = dgPrintGrid.CssClass;
string sLF = System.Environment.NewLine;
//表格
sTable = sTable + "<table class='"+sCssName+"' width='"+dgPrintGrid.Width.ToString()+"' >" + sLF;
//标题
if (sTitle != "")
...{
sTable = sTable + "<tr>" + sLF;
sTable = sTable + "<td style='font-size:16px'>"+sTitle+"</td>" + sLF;
sTable = sTable + "</tr>" + sLF;
}
//主内容
sTable = sTable + "<tr>" + sLF;
sTable = sTable + "<td valign='top'>" + sLF;
sTable = sTable + "<table class='"+sCssName+"' width='"+dgPrintGrid.Width.ToString()+"' border='0' cellspacing='0' cellpadding='0'>" + sLF;
//表头
sTable = sTable + "<THEAD style='display:table-header-group;'>" + sLF;
sTable = sTable + "<tr>";
sTemp2 = dgPrintGrid.HeaderStyle.HorizontalAlign.ToString();
for(int j=0; j<dgPrintGrid.Columns.Count; j++)
if (dgPrintGrid.Columns[j].Visible)
...{
sTable = sTable + "<td style='border:1px solid #000000' align='"+sTemp2+"'>"+dgPrintGrid.Columns[j].HeaderText+"</td>";
}
sTable = sTable + "</tr>" + sLF;
for(int i=0; i<HeaderLines-1; i++)
...{
sTable = sTable + "<tr>";
for(int j=0; j<dgPrintGrid.Columns.Count; j++)
if (dgPrintGrid.Columns[j].Visible)
sTable = sTable + "<td style='border:1px solid #000000' align='"+sTemp2+"'>"+dgPrintGrid.Items[1+i].Cells[j].Text+"</td>";
sTable = sTable + "</tr>" + sLF;
}
sTable = sTable + "</THEAD>" + sLF;
//行内容
sTemp2 = dgPrintGrid.ItemStyle.HorizontalAlign.ToString();
int nLines = 0;
for(int j=HeaderLines-1; j<dgPrintGrid.Items.Count; j++)
...{
if (nLinesPerPage!=0 && nLines!=0 && nLines%nLinesPerPage == 0)
sTable = sTable + "<tr style='page-break-before:always'>";
else
sTable = sTable + "<tr>";
for(int i=0; i<dgPrintGrid.Columns.Count; i++)
if (dgPrintGrid.Columns[i].Visible)
...{
if(dgPrintGrid.Columns[i] is System.Web.UI.WebControls.TemplateColumn)
...{
//要增加对其他控件的支持可修改这里。
if (dgPrintGrid.Items[j].Cells[i].Controls[1] is System.Web.UI.WebControls.TextBox)
sTemp = ((System.Web.UI.WebControls.TextBox)dgPrintGrid.Items[j].Cells[i].Controls[1]).Text;
else if (dgPrintGrid.Items[j].Cells[i].Controls[1] is System.Web.UI.WebControls.Label)
sTemp = ((System.Web.UI.WebControls.Label)dgPrintGrid.Items[j].Cells[i].Controls[1]).Text;
else if (dgPrintGrid.Items[j].Cells[i].Controls[1] is System.Web.UI.WebControls.DropDownList)
sTemp = ((System.Web.UI.WebControls.DropDownList)dgPrintGrid.Items[j].Cells[i].Controls[1]).SelectedItem.Text;
}
else if (dgPrintGrid.Columns[i] is System.Web.UI.WebControls.BoundColumn)
sTemp = dgPrintGrid.Items[j].Cells[i].Text;
sTable = sTable + "<td style='border:1px solid #000000' align='"+sTemp2+"'>"+sTemp+"</td>";
}
sTable = sTable + "</tr>" + sLF;
nLines++;
}
//尾部
sTable = sTable + "</table>" + sLF;
sTable = sTable + "</td>" + sLF;
sTable = sTable + "</tr>" + sLF;
//底部标题
if (sBottomTitle != "")
...{
sTable = sTable + "<tr>" + sLF;
sTable = sTable + "<td>"+sBottomTitle+"</td>" + sLF;
sTable = sTable + "</tr>" + sLF;
}
sTable = sTable + "</table>" + sLF;
//选择操作
sTable = sTable + "<script>" + sLF;
if (OperateCode ==0)
...{
sTable = sTable + "function window.onload()" + sLF;
sTable = sTable + "{" + sLF;
sTable = sTable + " pageSetup();" + sLF;
sTable = sTable + " window.opener=null;window.close();" + sLF;
sTable = sTable + "}" + sLF;
}
else if (OperateCode ==1)
...{
sTable = sTable + "function window.onload()" + sLF;
sTable = sTable + "{" + sLF;
sTable = sTable + " preView();" + sLF;
sTable = sTable + " window.opener=null;window.close();" + sLF;
sTable = sTable + "}" + sLF;
}
else if (OperateCode ==2)
...{
sTable = sTable + "function window.onload()" + sLF;
sTable = sTable + "{" + sLF;
sTable = sTable + " print();" + sLF;
sTable = sTable + " window.opener=null;window.close();" + sLF;
sTable = sTable + "}" + sLF;
}
sTable = sTable + "</script>" + sLF;
return sTable;
}
#endregion
打印表格.#region 打印表格.
/**//// <summary>
/// 打印表格.
/// </summary>
/// <param name="Response"></param>
public void PrintGrid(System.Web.HttpResponse Response)
...{
StringBuilder htmltext=new StringBuilder();
try
...{
if(!File.Exists(sPath + "/PrintFile/" + sUserPage))
...{
FileStream fs = File.Create(sPath + "/PrintFile/" + sUserPage);
fs.Close();
}
//读出模板内容
using (StreamReader sr = new StreamReader(sPath + "/PrintTemp.htm"))
...{
string sLine = "";
while ((sLine = sr.ReadLine()) != null)
...{
htmltext.Append(sLine);
}
sr.Close();
}
//替换模板的主体内容
htmltext.Replace("PrintTempBody", getTable());
//生成打印文件并打开.
using (StreamWriter sw = new StreamWriter(sPath + "/PrintFile/"+sUserPage,false,System.Text.Encoding.GetEncoding("GB2312")))
...{
sw.WriteLine(htmltext);
sw.Flush();
sw.Close();
Response.Write("<script languge='javascript'>window.open('PrintFile/"+sUserPage+"','_blank');</script>");
}
}
catch(Exception ex)
...{
Response.Write("<Script>"+ex.Message+"</Script>");
}
}
#endregion
}
}
在生成的HTML文件中要用到的JAVASCRIPT代码:
var hkey_root,hkey_path,hkey_key
hkey_root = " HKEY_CURRENT_USER "
hkey_path = " SoftwareMicrosoftInternet ExplorerPageSetup "
// 设置网页打印的页眉页脚为空
function pagesetup_null()
... {
try
...{
var RegWsh = CreateObject("WScript.Shell");
hkey_key="header";
RegWsh.RegWrite(hkey_root+hkey_path+hkey_key,"");
hkey_key=" ooter";
RegWsh.RegWrite(hkey_root+hkey_path+hkey_key,"");
}
catch(e)
...{
//alert("您的浏览器不支持此功能");
}
}
// 预览
function prepare()
... {
try
...{
//top.MainFrame.focus();
WB.ExecWB(7,1)
}
catch(e)
...{
//alert("您的浏览器不支持此功能")
}
}
// 打印预览
function preView()
... {
pagesetup_null();
prepare();
}
// 页面设置
function pageSetup()
... {
try...{WB.ExecWB(8,1)}catch(e)...{alert("您的浏览器不支持此功能")}
}
// 打印
function print()
... {
try...{WB.ExecWB(6,6)}catch(e)...{alert("您的浏览器不支持此功能")}
}
调用例子:
WebPrint pr = new WebPrint();
pr.Grid = DataGrid1;
pr.HeaderLines = nHeaderLines;
pr.LinesPerPage = nLinesPerPage;
pr.OperateCode = 2 ;
pr.Path = sPath;
pr.PrintTitle = sTitle;
pr.BottomTitle = sBottomTitle;
pr.UserPage = sUserPage;
pr.PrintGrid(Response);
文章引用自: