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);文章引用自: