不指定src, 用js生成 iFrame/新窗口 里面的内容(可用于scriptX打印部分页面等)

原创 2007年09月14日 10:57:00

有如下需求: 要打印页面之中的某个表格,而且还要自动横打(所以用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() ;

使用ScriptX控件进行Web打印总结

转自:http://xiaofengtoo.iteye.com/blog/778863 第三方控件ScriptX:http://www.meadroid.com/scriptx/ 官方手册:http...
  • ruixue0117
  • ruixue0117
  • 2016年11月07日 09:30
  • 2774

ScriptX打印控件的使用

对于B/S架构的项目中,Web打印最是让程序员头痛的技术,在这次项目中运用了第三方控件ScriptX解决了此技术包括各种汇总表,详细清单等等,但最大弊端就是打印的格式是死的,你要打印出怎样的格式必须自...
  • lanqibaoer
  • lanqibaoer
  • 2013年11月15日 17:03
  • 1288

js打印页面指定区域内容

js打印页面指定区域
  • wangbo54979
  • wangbo54979
  • 2016年09月19日 10:09
  • 1929

js打印html页面中的指定内容?

js打印html页面中的指定内容? 文章发布日期: 2017-12-20 文章更新日期:2017-01-08 添加demo下载 下载地址 传送门->点击去下载 声明,所...
  • my_study_everyday
  • my_study_everyday
  • 2017年12月20日 17:09
  • 164

ScriptX控件如何在不跳转页面的情况下将要打印的内容打印出来

需求:如医生给患者开了很多的处方,在处方总列表界面有发送按钮,发送到收费系统的时候要求系统自动打印所有的处方 西药草药检查治疗等打印格式是不一样的,分别有对应的html打印文件,如果在每一个打印文件...
  • itlsq
  • itlsq
  • 2017年03月03日 11:37
  • 370

使用ScriptX实现特殊效果的页面打印功能

使用ScriptX实现特殊效果的页面打印功能 1、ScriptX简介      在WEB项目中有很多要求用到页面打印的功能,如果没有特殊格式打印的情况下,基本使用windown对象的print方法...
  • Hansongxue
  • Hansongxue
  • 2014年07月16日 19:34
  • 315

JavaScript-给iframe里的内容定义样式 获取元素

案例1: 做一个通用的反馈表单应用在其它页面的框架里, 要求在框架外面可以定义框架里面的页面样式。 程序代码 var temp_css; temp_css=""; temp_css+="bo...
  • sure_viola
  • sure_viola
  • 2015年06月02日 16:59
  • 3561

【HTML】使用Iframe标签显示目标网页(内容)的某区域

【HTML】使用Iframe标签显示目标网页(内容)的某区域      有些时候我们并不需要显示iframe标签属性src指定的目标网页的所有内容,往往只需要显示某一特定区域。现有两种实现方法提供,...
  • dyllove98
  • dyllove98
  • 2013年05月27日 23:01
  • 9936

在新窗口中打开页面?小心有坑!

用简单地方式(背景中提到的)在新窗口中打开新页面会有一些问题。问题分为安全和性能两方面。机智的读者会发现上面的两个例子中分别复现了安全和性能问题(讲道理,第2个例子同时展现了安全和性能问题)...
  • IMWebteam
  • IMWebteam
  • 2016年12月26日 19:46
  • 716

JS判断页面所有Iframe是否全部请求完成加载完成

JS判断页面所有Iframe是否全部请求完成,加载完成。
  • jjkliu
  • jjkliu
  • 2015年06月29日 17:50
  • 991
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:不指定src, 用js生成 iFrame/新窗口 里面的内容(可用于scriptX打印部分页面等)
举报原因:
原因补充:

(最多只允许输入30个字)