WEB如何打印下在文件 打印服务器端,要下在的文件都可以,只要是文件就可以,不能是HTM页面. 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 只会用IE自带的打印功能,感觉一般也够用了,在这里算是提醒一下大家使用时要注意的问题吧首先在网页中添加: <OBJECT id="WebBrowser" height="0" width="0" classid="CLSID:8856F961-340A-11D0-A96B-00C04FD705A2" VIEWASTEXT> </OBJECT>然后就可以依次加入功能按钮了:<input onclick="document.all.WebBrowser.ExecWB(6,1)" type="button" value="打印"> <input onclick="document.all.WebBrowser.ExecWB(6,6)" type="button" value="直接打印"> <input onclick="document.all.WebBrowser.ExecWB(8,1)" type="button" value="页面设置"> <input onclick="document.all.WebBrowser.ExecWB(7,1)" type="button" value="打印预览"> <INPUT type="button" value="关闭窗口" onclick="javascript:window.close()">将这两块东西放到<center class=noprint></center>就不会打印这些按钮了。当然要定义noprint了:<style media="print">.Noprint { DISPLAY: none }</style>只要把不想打印的东西的css设置成noprint就可以了。现在就实现了基本的web打印,需要注意的情况如下:必须将ie的internet选项的安全设置中对于没有标记为安全的ActiveX控件进行...设置成提示或者启用,否则会报错,导致不可用。如果在vs.net编辑环境下编辑该页面,它经常自动的给object添加多余的参数,有了这些东西,打印就会出错,所以要记得最后保存的时候删除它们。为了简便并且达到最好的效果,我们可以在一个页面实现编辑和打印,这时候会需要很多的textbox,我们把它的css设置成.edittext { overflow-y:visible; width: 100%; border-top: none; border-right: none; border-bottom: none; border-left: none;}就可以实现在打印的时候不显示边框和multiline的textbox不显示滚动条了。还有一些小经验就是在设置标格宽度的时候,对于A4纸张,横打用920,竖打用640,效果最好。 实现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基本的URLpublic 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} }每页显示的行数#region 每页显示的行数/**//// <summary>/// 每页显示的行数/// </summary>public int PageNumber {get { return iPageNumber; }set { iPageNumber =value;}}#endregion 页的标题#region 页的标题/**//// <summary>/// 页的标题/// </summary>public string PageTitle{get { return sPageTitle; }set { sPageTitle =value;}}#endregion网格控键要合并的列集合#region 网格控键要合并的列集合/**//// <summary>/// 网格控键要合并的列集合,格式如: 1,2,3,4用逗号分割/// </summary>public string SpanColumnList{get { return sSpanColumnList; }set { sSpanColumnList =value;}}#endregion 左页眉标题,数组类型[0][1] 显示顺序从上至下#region 左页眉标题,数组类型[0][1] 显示顺序从上至下/**//// <summary>/// 页的标题/// </summary>public string[] ShoulderLeft{get { return sShoulderLeft; }set { sShoulderLeft =value;}}#endregion 中页眉标题,数组类型[0][1] 显示顺序从上至下#region 中页眉标题,数组类型[0][1] 显示顺序从上至下/**//// <summary>/// 页的标题/// </summary>public string[] ShoulderCenter{get { return sShoulderCenter; }set { sShoulderCenter =value;}}#endregion 右页眉标题,数组类型[0][1] 显示顺序从上至下#region 右页眉标题,数组类型[0][1] 显示顺序从上至下/**//// <summary>/// 页的标题/// </summary>public string[] ShoulderRight{get { return sShoulderRight; }set { sShoulderRight =value;}}#endregion 左页脚标题,数组类型[0][1] 显示顺序从上至下#region 左页脚标题,数组类型[0][1] 显示顺序从上至下/**//// <summary>/// 页的标题/// </summary>public string[] FooterLeft{get { return sFooterLeft; }set { sFooterLeft =value;}}#endregion 中页脚标题,数组类型[0][1] 显示顺序从上至下#region 中页脚标题,数组类型[0][1] 显示顺序从上至下/**//// <summary>/// 页的标题/// </summary>public string[] FooterCenter{get { return sFooterCenter; }set { sFooterCenter =value;}}#endregion 右页脚标题,数组类型[0][1] 显示顺序从上至下#region 右页脚标题,数组类型[0][1] 显示顺序从上至下/**//// <summary>/// 页的标题/// </summary>public string[] FooterRight{get { return sFooterRight; }set { sFooterRight =value;}}#endregion 打印的网格控件名称#region 打印的网格控件名称/**//// <summary>/// 打印的网格控件名称/// </summary>public DataGrid dgDataGrid{get { return MyDataGrid; }set { MyDataGrid =value;}}#endregion 修改模板文件的内容,构造打印数据,重写打印模板#region 修改模板文件的内容,构造打印数据,重写打印模板/**//// <summary>/// 修改模板文件的内容,构造打印数据,重写打印模板/// </summary>public void PrintView(){ClearView();StringBuilder htmltext=new StringBuilder(); try { using (StreamReader sr = new StreamReader( Server.MapPath(Context.Request.ApplicationPath) + "\\printWindow.htm")) { String line; while ((line = sr.ReadLine()) != null) { htmltext.Append(line); } sr.Close(); } } catch { Response.Write("<Script>alert('读取文件错误')</Script>"); } //----------替换htm里的标记为你想加的内容 htmltext.Replace("Model",PintPage()); //----------生成htm文件------------------―― try { using(StreamWriter sw=new StreamWriter( Server.MapPath(Context.Request.ApplicationPath) + "\\printWindow.htm",false,System.Text.Encoding.GetEncoding("GB2312"))) { sw.WriteLine(htmltext); sw.Flush(); sw.Close(); //Response.Write("<script languge='javascript'>alert('111');window.open('"+pageUrlBase+"/printWindow.htm','_blank');</script>"); } } catch { Response.Write ("The file could not be wirte:"); } //Response.Write("<script languge='javascript'>alert('111');window.open('"+pageUrlBase+"/printWindow.htm','_blank');</script>");//Page.RegisterStartupScript("show111", "<script languge='javascript'>alert('"+pageUrlBase+"');window.open('"+pageUrlBase+"/printWindow.htm','_blank');</script>");}#endregion 打印主函数,构造要打印的页面的所有打印项目(标题,列标题,网格数据,shoulder,footer)#region 打印主函数,构造要打印的页面的所有打印项目(标题,列标题,网格数据,shoulder,footer)/**//// <summary>/// 打印主函数/// </summary>/// <returns></returns>private string PintPage(){int iTableIndex = 1;string[] ColumnList ; string sTable="<object ID='WebBrowser' WIDTH=0 HEIGHT=0 CLASSID='CLSID:8856F961-340A-11D0-A96B-00C04FD705A2'></object>\n\n"; //添加页的标题sTable = sTable + AddPageTitle(); //添加页眉sTable = sTable + AddShoulder(); //添加网格数据第一页sTable = sTable + "<table id=\"table1\" class=\"print-body\" cellspacing=\"0\" cellpadding=\"0\" border=\"0\" width=\"100%\">";//添加该页的列标题sTable = sTable + AddTableTitle(); //初始化行号int iStartItemIndex = 0;int iItemIndex = iStartItemIndex;//主体数据int i = 0;DataTable dt = new DataTable();if(this.MyDataGrid.DataSource is DataSet){dt = ((DataSet)this.MyDataGrid.DataSource).Tables[0];}else if( this.MyDataGrid.DataSource is DataView){dt=((DataView)this.MyDataGrid.DataSource).Table;}else if(this.MyDataGrid.DataSource is DataTable){dt = ((DataTable)this.MyDataGrid.DataSource);} foreach(DataRow row in dt.Rows){if(i > 0 && i%iPageNumber==0){//上一页结束sTable = sTable + "</table>";if(sSpanColumnList!=""){ColumnList = sSpanColumnList.Split(',');for(int ii = 0 ; ii < ColumnList.Length ; ii++){sTable = sTable + "<script languge='javascript'>TableRowSpan(\"table"+iTableIndex.ToString()+"\","+ColumnList[ii].ToString()+");</script>\n\n";}} sTable = sTable + AddFooter();//换页sTable = sTable + AddPageBreak();//添加页的标题sTable = sTable + AddPageTitle();//添加页眉sTable = sTable + AddShoulder();iTableIndex++;//创建新一轮的表格sTable = sTable + "<table id=\"table"+iTableIndex.ToString()+"\" class=\"print-body\" cellspacing=\"0\" cellpadding=\"0\" border=\"0\" width=\"100%\">";//添加该页的列标题sTable = sTable + AddTableTitle();}//将记录添加到表格的一行中sTable = sTable + AddItemToTable(row);//行号加一iItemIndex++;i++;} sTable = sTable + "</table>\n\n";if(sSpanColumnList!=""){ColumnList = sSpanColumnList.Split(',');for(int ii = 0 ; ii < ColumnList.Length ; ii++){sTable = sTable + "<script languge='javascript'>TableRowSpan(\"table"+iTableIndex.ToString()+"\","+ColumnList[ii].ToString()+");</script>\n\n";//sTable = sTable + "<script languge='javascript'>TableRowSpan(\"table"+iTableIndex.ToString()+"\",0);</script>\n\n";}}//添加页脚sTable = sTable + AddFooter(); sTable = sTable + "<script languge='javascript'>WebBrowser.ExecWB(7,1); window.opener=null;window.close();</script>"; return sTable ;}#endregion http://old.blog.edu.cn/user3/janpo/archives/2006/1330443.shtml 谢谢您的热心,但我想要打印的是一个文件,用STREAM冲出来的文件,这个文件是个DWG图纸或者一个WORD文档.怎么弄? FineReport有完美打印解决方案:服务器端打印:客户端打印方式(flash打印,applet打印,pdf打印) sqldatareader 重复读取 出错。100献上 请高手帮忙 Winform中有没有这样的控件 zedgraph x轴问题 MDI窗体如何让有的窗体最大化,有的窗体正常显示 关于asp.net中RSA加密的应用问题 为什么sizeof(char)是2,char a = 't';Marshal.SizeOf(a)却是1 调用存储过程问题 windown.open()&Session的问题 请教FileStream读取相对路径的问题?谢谢了^_^ 对于static本人还是不太理解,希望各位大虾能够帮忙看看下面这段代码 datagridview的显示问题 不玩了,散分
VIEWASTEXT>
</OBJECT>然后就可以依次加入功能按钮了:<input onclick="document.all.WebBrowser.ExecWB(6,1)" type="button" value="打印"> <input onclick="document.all.WebBrowser.ExecWB(6,6)" type="button" value="直接打印">
<input onclick="document.all.WebBrowser.ExecWB(8,1)" type="button" value="页面设置">
<input onclick="document.all.WebBrowser.ExecWB(7,1)" type="button" value="打印预览"> <INPUT type="button" value="关闭窗口" onclick="javascript:window.close()">将这两块东西放到<center class=noprint></center>就不会打印这些按钮了。当然要定义noprint了:<style media="print">.Noprint { DISPLAY: none }</style>只要把不想打印的东西的css设置成noprint就可以了。现在就实现了基本的web打印,需要注意的情况如下:必须将ie的internet选项的安全设置中对于没有标记为安全的ActiveX控件进行...设置成提示或者启用,否则会报错,导致不可用。
如果在vs.net编辑环境下编辑该页面,它经常自动的给object添加多余的参数,有了这些东西,打印就会出错,所以要记得最后保存的时候删除它们。
为了简便并且达到最好的效果,我们可以在一个页面实现编辑和打印,这时候会需要很多的textbox,我们把它的css设置成.edittext
{
overflow-y:visible;
width: 100%;
border-top: none;
border-right: none;
border-bottom: none;
border-left: none;
}就可以实现在打印的时候不显示边框和multiline的textbox不显示滚动条了。还有一些小经验就是在设置标格宽度的时候,对于A4纸张,横打用920,竖打用640,效果最好。
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基本的URLpublic 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
}
}
每页显示的行数#region 每页显示的行数
/**//// <summary>
/// 每页显示的行数
/// </summary>
public int PageNumber
{
get
{
return iPageNumber;
}
set
{
iPageNumber =value;
}
}
#endregion 页的标题#region 页的标题
/**//// <summary>
/// 页的标题
/// </summary>
public string PageTitle
{
get
{
return sPageTitle;
}
set
{
sPageTitle =value;
}
}
#endregion网格控键要合并的列集合#region 网格控键要合并的列集合
/**//// <summary>
/// 网格控键要合并的列集合,格式如: 1,2,3,4用逗号分割
/// </summary>
public string SpanColumnList
{
get
{
return sSpanColumnList;
}
set
{
sSpanColumnList =value;
}
}
#endregion 左页眉标题,数组类型[0][1] 显示顺序从上至下#region 左页眉标题,数组类型[0][1] 显示顺序从上至下
/**//// <summary>
/// 页的标题
/// </summary>
public string[] ShoulderLeft
{
get
{
return sShoulderLeft;
}
set
{
sShoulderLeft =value;
}
}
#endregion 中页眉标题,数组类型[0][1] 显示顺序从上至下#region 中页眉标题,数组类型[0][1] 显示顺序从上至下
/**//// <summary>
/// 页的标题
/// </summary>
public string[] ShoulderCenter
{
get
{
return sShoulderCenter;
}
set
{
sShoulderCenter =value;
}
}
#endregion
/**//// <summary>
/// 页的标题
/// </summary>
public string[] ShoulderRight
{
get
{
return sShoulderRight;
}
set
{
sShoulderRight =value;
}
}
#endregion 左页脚标题,数组类型[0][1] 显示顺序从上至下#region 左页脚标题,数组类型[0][1] 显示顺序从上至下
/**//// <summary>
/// 页的标题
/// </summary>
public string[] FooterLeft
{
get
{
return sFooterLeft;
}
set
{
sFooterLeft =value;
}
}
#endregion 中页脚标题,数组类型[0][1] 显示顺序从上至下#region 中页脚标题,数组类型[0][1] 显示顺序从上至下
/**//// <summary>
/// 页的标题
/// </summary>
public string[] FooterCenter
{
get
{
return sFooterCenter;
}
set
{
sFooterCenter =value;
}
}
#endregion 右页脚标题,数组类型[0][1] 显示顺序从上至下#region 右页脚标题,数组类型[0][1] 显示顺序从上至下
/**//// <summary>
/// 页的标题
/// </summary>
public string[] FooterRight
{
get
{
return sFooterRight;
}
set
{
sFooterRight =value;
}
}
#endregion 打印的网格控件名称#region 打印的网格控件名称
/**//// <summary>
/// 打印的网格控件名称
/// </summary>
public DataGrid dgDataGrid
{
get
{
return MyDataGrid;
}
set
{
MyDataGrid =value;
}
}
#endregion 修改模板文件的内容,构造打印数据,重写打印模板#region 修改模板文件的内容,构造打印数据,重写打印模板
/**//// <summary>
/// 修改模板文件的内容,构造打印数据,重写打印模板
/// </summary>
public void PrintView()
{
ClearView();StringBuilder htmltext=new StringBuilder();
try
{
using (StreamReader sr = new StreamReader( Server.MapPath(Context.Request.ApplicationPath) + "\\printWindow.htm"))
{
String line;
while ((line = sr.ReadLine()) != null)
{
htmltext.Append(line);
}
sr.Close();
}
}
catch
{
Response.Write("<Script>alert('读取文件错误')</Script>");
} //----------替换htm里的标记为你想加的内容 htmltext.Replace("Model",PintPage()); //----------生成htm文件------------------――
try
{
using(StreamWriter sw=new StreamWriter( Server.MapPath(Context.Request.ApplicationPath) + "\\printWindow.htm",false,System.Text.Encoding.GetEncoding("GB2312")))
{
sw.WriteLine(htmltext);
sw.Flush();
sw.Close();
//Response.Write("<script languge='javascript'>alert('111');window.open('"+pageUrlBase+"/printWindow.htm','_blank');</script>");
}
}
catch
{
Response.Write ("The file could not be wirte:");
}
//Response.Write("<script languge='javascript'>alert('111');window.open('"+pageUrlBase+"/printWindow.htm','_blank');</script>");
//Page.RegisterStartupScript("show111", "<script languge='javascript'>alert('"+pageUrlBase+"');window.open('"+pageUrlBase+"/printWindow.htm','_blank');</script>");
}
#endregion 打印主函数,构造要打印的页面的所有打印项目(标题,列标题,网格数据,shoulder,footer)#region 打印主函数,构造要打印的页面的所有打印项目(标题,列标题,网格数据,shoulder,footer)
/**//// <summary>
/// 打印主函数
/// </summary>
/// <returns></returns>
private string PintPage()
{
int iTableIndex = 1;
string[] ColumnList ; string sTable="<object ID='WebBrowser' WIDTH=0 HEIGHT=0 CLASSID='CLSID:8856F961-340A-11D0-A96B-00C04FD705A2'></object>\n\n"; //添加页的标题
sTable = sTable + AddPageTitle(); //添加页眉
sTable = sTable + AddShoulder(); //添加网格数据第一页
sTable = sTable + "<table id=\"table1\" class=\"print-body\" cellspacing=\"0\" cellpadding=\"0\" border=\"0\" width=\"100%\">";
//添加该页的列标题
sTable = sTable + AddTableTitle(); //初始化行号
int iStartItemIndex = 0;
int iItemIndex = iStartItemIndex;
//主体数据
int i = 0;
DataTable dt = new DataTable();
if(this.MyDataGrid.DataSource is DataSet)
{
dt = ((DataSet)this.MyDataGrid.DataSource).Tables[0];
}
else if( this.MyDataGrid.DataSource is DataView)
{
dt=((DataView)this.MyDataGrid.DataSource).Table;
}
else if(this.MyDataGrid.DataSource is DataTable)
{
dt = ((DataTable)this.MyDataGrid.DataSource);
} foreach(DataRow row in dt.Rows)
{
if(i > 0 && i%iPageNumber==0)
{
//上一页结束
sTable = sTable + "</table>";
if(sSpanColumnList!="")
{
ColumnList = sSpanColumnList.Split(',');
for(int ii = 0 ; ii < ColumnList.Length ; ii++)
{
sTable = sTable + "<script languge='javascript'>TableRowSpan(\"table"+iTableIndex.ToString()+"\","+ColumnList[ii].ToString()+");</script>\n\n";
}
} sTable = sTable + AddFooter();
//换页
sTable = sTable + AddPageBreak();
//添加页的标题
sTable = sTable + AddPageTitle();
//添加页眉
sTable = sTable + AddShoulder();
iTableIndex++;
//创建新一轮的表格
sTable = sTable + "<table id=\"table"+iTableIndex.ToString()+"\" class=\"print-body\" cellspacing=\"0\" cellpadding=\"0\" border=\"0\" width=\"100%\">";
//添加该页的列标题
sTable = sTable + AddTableTitle();
}
//将记录添加到表格的一行中
sTable = sTable + AddItemToTable(row);
//行号加一
iItemIndex++;
i++;
} sTable = sTable + "</table>\n\n";
if(sSpanColumnList!="")
{
ColumnList = sSpanColumnList.Split(',');
for(int ii = 0 ; ii < ColumnList.Length ; ii++)
{
sTable = sTable + "<script languge='javascript'>TableRowSpan(\"table"+iTableIndex.ToString()+"\","+ColumnList[ii].ToString()+");</script>\n\n";
//sTable = sTable + "<script languge='javascript'>TableRowSpan(\"table"+iTableIndex.ToString()+"\",0);</script>\n\n";
}
}
//添加页脚
sTable = sTable + AddFooter(); sTable = sTable + "<script languge='javascript'>WebBrowser.ExecWB(7,1); window.opener=null;window.close();</script>"; return sTable ;
}
#endregion