当前位置: 首页 > news >正文

打印Ext组件中的内容


描述一下大概功能需求:从Ext的GridPanel中选择一条记录,将这条记录的详细信息呈现在Ext的Window当中,将Window中呈现的数据按其格式用打印机打印出来。
要处理这个有两种方式:
1.在前台用JavaScript调用打印机打印
2.在后台服务器端处理
由于需求的原因,这里只允许使用第一种方式。想来应该也不难,JavaScript调用一下window.print()(注意:不是Ext.Window),结果失败了。window.print()打印出来的是整个当前浏览器中所呈现的内容,而不是我所要的Ext.Window中的内容。
(突然在想为什么不让每个dom都有print()方法去打印自身中的内容呢?郁闷…)
既然只能打印浏览器window中的,那我把Ext.Window中要打印的内容赋给浏览器的window,不就可以打印了么。
于是乎开始coding…

var win = new Ext.Window({
 
  title: '明细',
  width: 600,
  height: 400,
  buttons: [{
    text: '打印',
    handler: function(){
      //把当前的页面存起来
      var c = window.document.body.innerHTML;
      //把win中要打印的内容赋给当前浏览器
      window.document.body.innerHTML = win.body.dom.innerHTML;
      //开始打印
      window.print();
      //再转回去
      window.document.body.innerHTML = c;
    }
  }]
});先不说打印是否成功,由于整个项目是Ext做的,这样一来回折腾,整个页面直接变成只能看不能操作了,晕倒~再想办法吧。
coding…

var win = window.open('','printer', '');
win.document.body.innerHTML = win.body.dom.innerHTML;
win.print();没问题,可是弹出来了一个窗口,我想能不能把它隐藏起来呢,可是突然又想到弹窗会被某些浏览器拦截,这个方法也放弃。
还有什么办法呢?再次突然想起frame与frame之间如何用JavaScript传值,一个frame中含有一个window对象,那么…
接着coding…

var win = new Ext.Window({
 
  title: '明细',
  width: 600,
  height: 400,
  html: '<iframe />',
  buttons: [{
    text: '打印',
    handler: function(){
      var c = win.body.first().dom.innerHTML;
      var printer = win.body.last().dom.contentWindow;
      printer.document.body.innerHTML = c;
      printer.print();
    }
  }]
});在Ext.Window中用html配置选项创建一个空iframe标签,在Firebug下可以看到html所配置的内容会出现在win.body中且位于最后,win.body是Ext.Element对象,通过它可以取到要打印的内容c和打印机printer(frame中的window),然后赋值,接着打印。
想的好好的,打印出来的竟然和第一个方式一样,⊙﹏⊙b汗
问题出在哪了?难道因为iframe没有获得焦点?printer.print()之前加上printer.focus(),再打印一张出来,搞定!同理也可以打印Ext.Panel等

 

 

相关文章:

  • C#日期格式转换大全
  • Window.Open参数、返回值
  • 如何在Windows2008 Server服务器上开启Ping或者禁PING?
  • Windows server 2008 r2搭建FTP服务器
  • 64位系统asp连接access数据库
  • asp页面抓取 采集源码内容 不同系统的不同写法
  • MSXML2.XMLHTTP.4.0对象
  • ServerXmlHttp和XmlHttp的一些总结
  • Session值不规律变化的一种可能解决方法
  • visual studio无提示错误发布失败解决方法
  • 应用程序池模板永久性缓存初始化失败
  • .Net IE10 _doPostBack 未定义
  • windows7变成wifi热点带动手机上网的方法
  • Evaluation version of Huge-ASP upload was expired
  • A potentially dangerous Request.Path value was detected from the client 异常
  • [ 一起学React系列 -- 8 ] React中的文件上传
  • [译]CSS 居中(Center)方法大合集
  • 【RocksDB】TransactionDB源码分析
  • 【编码】-360实习笔试编程题(二)-2016.03.29
  • Android Studio:GIT提交项目到远程仓库
  • Android开源项目规范总结
  • codis proxy处理流程
  • ES6简单总结(搭配简单的讲解和小案例)
  • js中的正则表达式入门
  • Mocha测试初探
  • nodejs:开发并发布一个nodejs包
  • Python语法速览与机器学习开发环境搭建
  • 百度小程序遇到的问题
  • 番外篇1:在Windows环境下安装JDK
  • 区块链将重新定义世界
  • 什么软件可以提取视频中的音频制作成手机铃声
  • 时间复杂度与空间复杂度分析
  • 为什么要用IPython/Jupyter?
  • - 转 Ext2.0 form使用实例
  • 曾刷新两项世界纪录,腾讯优图人脸检测算法 DSFD 正式开源 ...
  • 整理一些计算机基础知识!
  • ​iOS实时查看App运行日志
  • #NOIP 2014# day.1 T2 联合权值
  • #我与Java虚拟机的故事#连载01:人在JVM,身不由己
  • (echarts)echarts使用时重新加载数据之前的数据存留在图上的问题
  • (Pytorch框架)神经网络输出维度调试,做出我们自己的网络来!!(详细教程~)
  • (编译到47%失败)to be deleted
  • (附源码)ssm户外用品商城 毕业设计 112346
  • (剑指Offer)面试题41:和为s的连续正数序列
  • (原創) 未来三学期想要修的课 (日記)
  • (正则)提取页面里的img标签
  • (转)Sql Server 保留几位小数的两种做法
  • (转载)hibernate缓存
  • (转载)Linux 多线程条件变量同步
  • (转载)虚函数剖析
  • .Net Core webapi RestFul 统一接口数据返回格式
  • .NET Core中的去虚
  • .Net IOC框架入门之一 Unity
  • .NET 自定义中间件 判断是否存在 AllowAnonymousAttribute 特性 来判断是否需要身份验证
  • .NET单元测试