zoukankan      html  css  js  c++  java
  • 不指定src, 用js生成 iFrame/新窗口

    有如下需求: 要打印页面之中的某个表格,而且还要自动横打(所以用scriptX等控件,因为window.print是竖打)?
    
    解决办法:将这部分表格(或者div等)提取出来,专门放到一个新的窗口中去,然后根据这些内容自动生成一个包含打印控件iFrame, 再调用控件的打印方法打印该Ifrme;
    
    ____________________________________________________________
    
    动态生成iframe的代码:
    
        var ifr = document.createElement("iframe");
        document.body.appendChild(ifr);
        var ifrdoc = ifr.contentWindow.document;
        ifrdoc.open();
        ifrdoc.write("<BODY>");
        ifrdoc.write("<object id='factory' style='display:none' classid='clsid:1663ed61-23eb-11d2-b92f-008048fdd814' ></object> ");
        ifrdoc.write("</BODY>");
        ifrdoc.close() ;
    
    
    _____________________________________________________
    
    实现打印的函数(可直接拷贝调用):
    
    function PrintPart(controlId, isPortrait) //isPortrait =false 代表横打
    
    {
    
    //以下先生成一个Docment Fragment, 不是必须
    
        var sdiv = document.getElementById(controlId);
        var dc = document.createDocumentFragment();
        var dcBd = dc.createElement("BODY")
        for(var i=0;i<=sdiv.childNodes.length-1;i++)
        {
            dcBd.appendChild(sdiv.childNodes[i]);
        }
        
        dc.appendChild(dcBd);
    
    //根据传入的内容生成一个iFrame并打印
    
        var ifr = document.createElement("iframe");
        document.body.appendChild(ifr);
    
        ifr.style.pixelWidth = 1;
        ifr.style.pixelHeight = 1;
    
    
        var ifrdoc = ifr.contentWindow.document
        ifrdoc.open();
        ifrdoc.write("<BODY>");
        ifrdoc.write("<object id='factory' style='display:none' classid='clsid:1663ed61-23eb-11d2-b92f-008048fdd814' ></object> ");
        ifrdoc.write(dc.body.innerHTML); //如果上面没有生成DocumentFragment,则用sdiv 对象的outerHtml属性
        ifrdoc.write("</BODY>");
        ifrdoc.close() ;
    
    
        //以下调用iframe中创建的打印控件实现打印
        var fc = ifrdoc.getElementById("factory");
        fc.printing.portrait = isPortrait; //是否横向打印
        fc.printing.Print();     
        
        document.body.removeChild(ifr); 
    
    }
    
    ______________________________________________________
    
    将以上代码稍加修改,就可以实现除打印之外的其它功能。主要的方法是document.write方法,动态生成新窗口,也类似:
    
            var ow = window.open("", "newwin", "height=1, width=1");//top=10000,left=10000");
            ow.document.write("<BODY>")
            ow.document.write("<object id='factory' style='display:none' classid='clsid:1663ed61-23eb-11d2-b92f-008048fdd814' ></object> ")
            ow.document.write(dc.body.innerHTML);
            ow.document.write("</BODY>");
            ow.document.close() ;
    
    
    
    
  • 相关阅读:
    可变参数函数总结
    小例子一步一步解释“函数调用过程中栈的变化过程”
    自己动手实现C标准库中sqrt()函数
    无符号整数翻转函数实现reverse_bits(unsigned int value)
    stdarg.h源代码
    判断两个字符串s1 s2所含字符是否相同
    亚马逊20120915网上机试第一题:atoi函数
    [wp7软件]wp7~~HTC官方软件~~集合贴~~
    [wp7软件]wp7~~相册加密软件~~集合贴~~
    [wp7软件]wp7~~密码管理软件~~集合贴~~
  • 原文地址:https://www.cnblogs.com/554006164/p/1863428.html
Copyright © 2011-2022 走看看