web 套打的一些经验ZT

        最近做了一个项目,并不大。但用到WEB打印这方面内容,没想中间遇到很多问题,曾在网上找过许多解决方案,有些控件但是国内的基本都是需要注册收费的,只有国外的一个ScriptX是免费的,看到许多人用,但这个控件被IE等众多的安全工具所困扰,常常需要设置一堆东西,对于电脑水平不是很高客户来说确实很麻烦,不过我也只用它去掉了IE打印的页眉页脚,打印还是用的IE的WEBBROWSER,不说费话了,下面先介绍一下我思路。
        由于是要套打,所以套打的页面不可能给用户看,需要单独制作一个套打的页面,只有要打印的内容,位置用 <DIV     style= "LEFT:   35mm;   FONT:   9pt   宋体;   POSITION:   absolute;   TOP:   75mm "> 打印内容 </DIV> 其中,left   是你打印纸从最左边到内容的距离,top   是从纸最上边到打印内容的距离,这个距离要用尺量好,并且减去19.05,这个数是IE页面设置中页距的上下左右的默认值,不减就对不准了。
        下面是在网上找到一个脚本,专门是用来调用套打页面的,并根据我的需要做了点改动。
window.print   =   printFrame;

//   main   stuff
function   printFrame(frame,   onfinish)   {
 
    if   (   !frame   )   frame   =   window;

    function   execOnFinish()   {
                switch   (   typeof(onfinish)   )   {
                case   "string ":   alert( 'print...   ');   break;//execScript(onfinish)
                case   "function ":   onfinish();
                }
        if   (   focused   &&   !focused.disabled   )   focused.focus();
    }
 

    if   ((   frame.document.readyState   !==   "complete ")   &&(   !frame.document.confirm( "The   document   to   print   is   not   downloaded   yet!   Continue   with   printing? ")   ))
    {
        execOnFinish();
        return;
    }

 
        var   eventScope   =   printGetEventScope(frame);
        var   focused   =   document.activeElement;
         
        window.printHelper   =   function()   {
                execScript( "on   error   resume   next:   printWB.ExecWB   6,   1 ",   "VBScript ");
                printFireEvent(frame,   eventScope,   "onafterprint ");
                printWB.outerHTML   =   " ";
                execOnFinish();
                window.printHelper   =   null;
        }
 
        document.body.insertAdjacentHTML( "beforeEnd ",
                " <object   id=\ "printWB\ "   width=0   height=0   \
                classid=\ "clsid:8856F961-340A-11D0-A96B-00C04FD705A2\ "> ");
         
        printFireEvent(frame,   eventScope,   "onbeforeprint ");
        frame.focus();
        window.printHelper   =   printHelper;
        setTimeout( "window.printHelper() ",   0);
}
function   hideButton()
{
            document.getElementById( "btn_Back ").style.display   =   "none ";
}
 
function   printFixedApp()
{
      if(confirm( '确定要打印吗? '))//这些是我自己加的,业务需要隐藏点过的按钮
        {                      
                document.getElementById( "btn_Back ").style.display   =   "none ";
                document.getElementById( "btn_print ").style.display   =   "none ";            
                document.getElementById( "btn_modify ").style.display   =   "none ";
             
                printHidden( "printPage_fixed.aspx ");//里面是套打的页面
           
        }
}
function   printHidden(url)   {
    document.body.insertAdjacentHTML( "beforeEnd ",
        " <iframe   name=printHiddenFrame   width=0   height=0> </iframe> ");
    var   doc   =   printHiddenFrame.document;
    doc.open();
    doc.write( " <body   onload=\ "parent.onprintHiddenFrame()\ "> ");
    doc.write( " <iframe   name=printMe   width=0   height=0   src=\ " "   +
            url   +   "\ "> </iframe> ");
    doc.write( " </body> ");
    doc.close();
}

function   onprintHiddenFrame()   {
    function   onfinish()   {
        printHiddenFrame.outerHTML   =   " ";
        if   (   window.onprintcomplete   )
        {
                window.onprintcomplete();
                alert( "print   completed! ");
        }
          window.location.href   =   "ApplicationBillView_fixed.aspx ";//打印完成后转到其它页      
    }
    printFrame(printHiddenFrame.printMe,   onfinish);
}

//   helpers
function   printIsNativeSupport()   {
    var   agent   =   window.navigator.userAgent;
    var   i   =   agent.indexOf( "MSIE   ")+5;
    return   parseInt(agent.substr(i))   > =   5   &&   agent.indexOf( "5.0b1 ")   <   0;
}

function   printFireEvent(frame,   obj,   name)   {
    var   handler   =   obj[name];
    switch   (   typeof(handler)   )   {
        case   "string ":   frame.execScript(handler);   break;
        case   "function ":   handler();
    }
}

function   printGetEventScope(frame)   {
    var   frameset   =   frame.document.all.tags( "FRAMESET ");
    if   (   frameset.length   )   return   frameset[0];
    return   frame.document.body;
}
剩下的就等着打印机干活吧。

你可能感兴趣的:(Web,IE,脚本,VBScript)