我是利用IE直接打印的,打印出来的内容有的部分串了,上面的内容串到了下面,事先说明,利用IE预览的时候也没问题,打印机没问题,就2台机器打印出来有问题,其他的机器没问题,所以我想多找些打印的方法或者第三方的打印控件,只要好用就给分

解决方案 »

  1.   

    1、利用word或者excel来实现web打印(如果不修改ie设置,可以在web服务器端生成xls文件,然后通过xlBook = xls.Workbooks.Open(remotePath) 获取对象打印)
       实现过程:先将需要打印的数据导入到word或者excel中,再利用word或者excel的打印功能来实现web打印。
       下面以excel为例实现如何打印的过程
       将网页中数据导入excel中的方法有很多,这里先介绍一种,利用ActiveX控件的方式,即 Excel.Application, 这个控件是MS为excel提供的编程接口,在很多种编程语言种都可以通过该接口来操纵excel表格。
       下面用javascript脚本来实现一个简单的例子。
    < script language="javascript">function ExcelPrint(){var excelApp;//存放Excel对象var excelBook;//存放Excel工件簿文件var excelSheet;//存放Excel活动工作表try{excelApp = new ActiveXObject("Excel. Application");//创建Excel对象}catch(e){alert("请启用ActiveX控件设置!");return;}excelBook = excelApp.Workbooks.Add();//创建Excel工作簿文件excelSheet = excelBook.ActiveSheet;//激活Excel工作表var rowLen = printTable.rows.length;//table对象的行数for (var i=0;i< rowLen;i++){var colLen = printTable.rows(i).cells.length;//table对象的列数for (var j=0;j< colLen;j++)//为Excel表的单元格赋值excelSheet.Cells(i+1,j+1).value = printTable.rows(i).cells(j).innerText;} //将表格中的每个单元格的innerText导入到excel的单元格中excelApp.Visible = true;//设置Excel对象可见}excelSheet.PrintOut(); //打印工作表excelBook.Close(true); //关闭文档excelApp.Quit(); //结束excel对象excelApp=null;  //释放excel对象 < /script>
      
       注意:
       运行该程序的前提是 IE要允许对没有标记为安全的Activex控件进行初始化和脚本运行。设置方法如下:
       打开控制面板→Internet选项→安全性→自定义级别→对没有标记为安全的ActiveX控件进行初始化和脚本运行→选中启用,这样我们的程序就可以运行了。如果没有启用该ActiveX控件设置,那么程序在执行创建Excel对象时会抛出一个异常,这时可以通过catch()语句来捕获这个异常,并且做出相应的处理。
       运行该程序必须客户端安装了MS EXCEL,否则Activex驱动不了。
      
      
      
    2、利用浏览器自带的打印控件来实现web打印
       实现过程:直接调用IE的打印功能或者在程序中调用window.print()来实现web打印,页眉和页脚会有网页标题、页码、网址,日期等信息,这些打印时如果不需要,怎样能去掉呢。做法其实很简单,只有在IE的文件菜单中打开页码设置对话框,去掉页眉页脚中设置的哪些信息,就可以了。但是这需要每个客户端都去手动设置一次。如果不想让每个客户端都手动去设置一次,也可以用代码通过修改注册表的键值来实现。
       下面是用VBScript来实现的修改注册表的过程:
       < script language="VBScript">dim path, reg'path存放IE打印设置的注册表地址, reg存放WScript.Shell组件的对象path = "HKEY_CURRENT_USER\Software\Micro-soft\Internet Explorer\PageSetup"'通过注册表修改打印设置,只修改页眉、页脚和各边界的值'参数说明:header--页眉,footer--页脚,margin_left--左边界'margin_top--上边界,margin_right--右边界,margin_bottom--下边界'页边距的设置中 1对应25.4mm,即margin_left=1表示实际值的25.4mmfunction pagesetup(header, footer, margin_left, margin_top, margin_right, margin_bottom)On Error Resume NextSet reg = CreateObject("WScript.Shell")if err.Number>0 thenMsgBox "不能创建WScript.Shell对象!"exit functionend ifreg.RegWrite path+"\header", header'设置页眉reg.RegWrite path+"\footer", footer '设置页脚reg.RegWrite path+"\margin_left", margin_left'设置左边界reg.RegWrite path+"\margin_top", margin_top'设置上边界reg.RegWrite path+"\margin_right", margin_right'设置右边界reg.RegWrite path+"\margin_bottom", margin_bottom'设置下边界end function< /script>还有一点需要注意的是,利用window.print()这样的方法来打印,是直接弹出打印对话框,而不是打印预览的窗口。一般来说用户希望先打印预览一下,然后再打印。或者有的格式固定的,每次都是一样的格式,就希望不弹出打印对话框,直接就打印出来。
    还有的用户希望每个打印都是直接和一种纸张绑定好,打印时候直接就调用那种类型的纸张来打印,这样window.print()显然远远不够。3、利用第三方的控件或者报表软件来实现web打印
       实现过程:第三方控件将打印的参数和方法封装成对象,在页面中可以方便的直接调用,例如ScriptX.cab,ReYoPrint.cab 都是这种类型的控件。可以直接用代码实现web打印页眉页脚的设置,web打印纸张的绑定,web打印边距的设置,web打印预览,直接web打印。
       web打印格式设置,web打印分页,web打印换页重新打印某些信息,某些信息只能第一页打印,某些信息只能最后一页打印等等这些,也都解决方案。 Scriptx没有处理这些的方案,webprint有webgrid和ReYoPrint两种解决方案,行列规则的表格式的可以简单webgrid来处理,复杂格式的可以用ReYoPrint来设计格式。
      

  2.   


    <script language=javascript>    
    function doPrint() {    
    bdhtml=window.document.body.innerHTML;    
    sprnstr="<!--startprint-->";    
    eprnstr="<!--endprint-->";    
    prnhtml=bdhtml.substr(bdhtml.indexOf(sprnstr)+17);    
    prnhtml=prnhtml.substring(0,prnhtml.indexOf(eprnstr));    
    window.document.body.innerHTML=prnhtml;    
    window.print();   
    }    
    </script> 
    <!--startprint-->
       [color=#00FFFF]要打印内容
     
    <!--endprint--> 
    [/color]
      

  3.   

    在b/s中,那就直接用IE自带的打印或者其他文档自带的打印就得了,干嘛非要自己用js写一个打印的