把这个加入aspx页面,然后再调用相应的函数。
<object classid=CLSID:8856F961-340A-11D0-A96B-00C04FD705A2 height=0 id=WB name=wb width=0 VIEWASTEXT></object> 
<script language="JavaScript">
function printsetup()
{
wb.execwb(8,1);
}
function printpreview()
{
wb.execwb(9,1);
}
function printit()
{
if ( confirm( '确定打印吗?' ) )
{
window.print();
}
}
</script>

解决方案 »

  1.   

    目前没有非常完美的解决方案,如果只是简单的实现打印web页面,用楼上的方法可以实现。
    推荐你看看http://www.microsoft.com/China/Community/TechZone/TechArticle/TechDoc/xmlwebreport.asp
      

  2.   

    http://expert.csdn.net/Expert/topic/1428/1428024.xml?temp=.5034143
      

  3.   

    我个人认为还是将数据做成水晶报表
    然后导出为pdf
    下载到客户端打印比较好
    如果客户端支持安装了什么acrobat reader,效果真的不错
      

  4.   

    用水晶报表,我是实现了,可是我碰到这样一件事,就是明明在WEB页上看到数据了。但就是在打印时就是一片空白。以前有时也有这种问题。我不知这如何来解决
      

  5.   

    1.最初解决WEB打印的出发点很简单,即把生成的客户端HTML按程式代码所定义的格式打印出来。如自定义页首尾,报表首尾,页边距,纸张,等等。其实这也是在WEB应用上最最常用的打印需求,当然,这不会很专业,但是可以解决一般的应用管理系统需求。通过不断的调试以及性能分析比较,大致总结了各个打印解决方案的优劣,以备参考:
     一、利用IE内部打印组件: 这个方案也许是最简单的,当然不会很“专业”。我们假设客户端是IE6.0版本,因为在IE6.0中才完全体现我们所要应用的“打印模板机制”。它在精确控制页面边界,文本间隔,以及打印的统一性上,功能更为完备。   至于这种方案的实现也相当简单,它主要只涉及到DEVICERECT,LAYOUTRECT两种行为方式,分别用来定义整体页面风格及单个页面内容风格。而我们所要打印的HTML可以通过LAYOUTRECT的CONTENTSRC属性来指定。可喜的是即使我们有1000个页面要打印,也可以简单的通过我们的打印模板添加动态修建HTML功能,实现单模板控制多文件风格。(请参考本文所附代码)。这个方案在CSDN有详细的介绍,但没有附示例。示例文件可以在MSDN上下载得到。
    二、利用外部DLL打印组件:   此类方案实现倒也不很复杂,只是利用DLL本身内部类函数操作,创建报表、格式并进行打印,而无需考虑内部实现环节。但对于WEB打印来说,似乎不合适。我个人认为在WEB上创建报表的HTML,然后利用客户端IE打印是最好的解决方式。而如果你的C#或VB不是很好,那么外部DLL的类型解决是一个很让人头疼的事情,何况还要应用到WEB环境下。这种方案我用傻儿的打印组件调试过,但没成功。 
    三、利用外部OCX类控件   这类方案和第二种差不多,也是建立在别人的成果的基础上,但是在ASP.net下,如果没有这个控件的说明书,我相信你也会和我一样,不知道该从哪里下手开始设计。 
    四、利用XML解析打印   这种解决方案在微软家园有很详细的介绍,其原理就是解析出定义好的XML格式标记,解读出文件中标记的参数定义,最后将这些信息还原成打印机输出的图形格式。很简单的理解,例如你要打印一个简单的表格,那么我们将表格解析成为文本和表格两部分,程式设计时我们遇到文本文本则输出文本到打印机,遇到表格标签即输出LINE到打印机。如此你可以自定义一些特殊的标签,如图片,特殊形状等。这种方案开发起来很简单,而且很“专业”,不过其缺点:客户端需要安装.NET FrameWork.(傻了。。) 
    五、转化为PDF文件,利用PDF打印   转化为其它类型的文件输出,是打印方案很常用的一种方式,而PDF文件格式以其优异的“品质”(打印品质)和“性能”(应用功能)无疑是一种很经济的方式。而且从WEB向PDF转换不是很困难,资源占用也不是很严重,这是它在同类方案中的优点,也是异类方案中的缺点。如此你可以去PDFCHINA上搜寻相关可用信息。 
    六、利用外部设计器设计报表,内部程式码控制打印   这里我针对思路来讲这种方案,并针对VISUAL DESIGNER报表组件。我们预先得利用设计器做好报表的格式,尔后在程式码里面住报表各表单“套值”,就这么简单。有点像ACCESS里面的报表设计方式。我所在公司的管理系统就是ACCESS写的,所以我其实挺喜欢这种方案。至于VISUAL DESIGNER可以在CSDN下载到,并有开发说明书。 
    七、自己写专业报表打印组件   这是*不得已的作法,当然更符合自己的要求,但是如果你不是专业的开发人员或有其它特殊目的,这些时间就不要花了。很罗索的。如果你有兴趣写,那么我建议你先看看第五种方案的思路和说明文档。
       WEB打印至今还没有完美的解决方案,我个人期待IE在这一方面再加改进,以方便我们这一群“劳苦大众”。 (摘)
      

  6.   

    可以考虑smart client,也就是将WINFORM程序通过WEB方式来运行,但是要求客户端都要有FRAMEWORK。
      

  7.   

    to:greystar(greystar) 
    我也实现了,但可能运气比人好些
    所以打印出来还是有数据的,网上关于使用水晶报表的文章很多你可以找找试试
    下面的文章也是一位网友发给我的(飞刀原作)我们采用下面的几步使用Push模式执行水晶报表:1. 设计一个DataSet2. 创建一个.rpt文件同时将其指定给上一步建立的DataSet。3. 在aspx页面中拖放一个CrystalReportViewer控件同时将其与前面的rpt文件建立联系。4. 在代码中访问数据库并把数据存入DataSet5. 调用DataBind方法。 设计一个DataSet1) 右击“解决方案浏览器”,选择“添加”--“添加新项”-->“数据集” 2) 从“服务器资源管理器”中的“SQL Server”中拖放“Stores”表(位于PUBS数据库中)。 3) 此时在数据集中就会有一个Stores表的结构图。- .xsd文件中仅仅包含一个结构图,但是不会有任何数据在里面。创建 .rpt 文件 :4) 使用上面的介绍过的方法创建此文件,唯一的不同就是使用数据集来代替前面的直接连接数据。5)建立.rpt文件之后,右击“详细资料”-->"添加/删除数据库“6) 在”数据库专家“窗口中,展开”项目数据“(代替以前的OleDb),展开“ADO.Net数据集”--"DataSet1“,选择”Stores“表。7) 将”Stores"表添加到“选定的表”中,点击“OK”   8) 使用PULL模式下的方法,建立一个WebForm建立一个Crystal Report Viewer 控件9) 建立一个Crystal Report Viewer 控件,并设定其属性,此处与PULL模式下是一致的。Code Behind 代码:10) 在Page_Load方法中使用下面的子函数:VB.Net代码:    Sub BindReport()        Dim myConnection As New SqlClient.SqlConnection()         myConnection.ConnectionString= "server= (local)\NetSDK;database=pubs;Trusted_Connection=yes"        Dim MyCommand As New SqlClient.SqlCommand()        MyCommand.Connection = myConnection        MyCommand.CommandText = "Select * from Stores"        MyCommand.CommandType = CommandType.Text        Dim MyDA As New SqlClient.SqlDataAdapter()        MyDA.SelectCommand = MyCommand        Dim myDS As New Dataset1()       '这就是我们在设计模式上使用的DataSet             MyDA.Fill(myDS, "Stores")           '你不得不使用与你前面DataSet相同名字。        Dim oRpt As New CrystalReport1()         ' 水晶报表绑定        oRpt.SetDataSource(myDS)         ' 设定水晶报表的ReportSource        CrystalReportViewer1.ReportSource = oRpt    End SubC#代码:private void BindReport(){    string strProvider = "Server=(local);DataBase=pubs;UID=sa;PWD=";    CrystalReport1 oCR = new CrystalReport1();    Dataset1 ds = new Dataset1();    SqlConnection MyConn = new SqlConnection(strProvider);    MyConn.Open();    string strSel = "Select * from Stores";    SqlDataAdapter MyAdapter = new SqlDataAdapter(strSel,MyConn);    MyAdapter.Fill(ds,"stores");    oCR.SetDataSource(ds);    this.CrystalReportViewer1.ReportSource = oCR;} 注意:在上面的代码中,你得注意一下oRpt是"Strongly Typed"的报表文件。如果你需要使用"UnTyped"报表,你得使用ReportDocument对象,然后再调用报表文件。 运行你的程序。 
    其中常见的一个错误是登录失败,你只要能保证在dataAdapter.fill方法时填入表名就可以了
      

  8.   

    给你提供一个解决方案:
    可以使用Tcp协议,我们刚做完一个B/S系统,先做一个WINDOWS服务程序--打印机服务器,在有打印机上启动,然后在程序的服务器上写一个WEB SERVICE,在打印机服务上调用此方法,另外将所有的报表文件和数据集都加到这个打印机服务器上,当用户打开网页需要打印报表的时候就会向打印机服务器发送请求,打印机服务器就会从程序的服务器上获取相应的数据,将报表打印出来。这里所用的报表是水晶报表
      

  9.   

    TO:smartyyp(smartyyp) 正欲学习学习,可否给我一套?[email protected]    谢谢!
      

  10.   

    寻找中
    [email protected]
    谢谢!
      

  11.   

    我认为将打印内容导出EXCEL,能够打出相当专业的报表,我有例子!
      

  12.   

    网上也看到有一些好的打印方法.
    xml的。
    不过也没试过
      

  13.   

    自己做打印控件好一点,也可以先导入xml在打印