react项目内,要兼容不同的浏览器实现打印、打印预览功能,非IE浏览器统一采用了window.print()方法,IE浏览器采用它自带的ActiveX。代码如下:

const Wtest = (props) =>{const printOpeation = (val) => {switch (val) {case 1://点击打印if (!!window.ActiveXObject || "ActiveXObject" in window) {document.getElementById("factory").printing.portrait = true;//设置打印方向document.all.WebBrowser.ExecWB(6, 1)} else {print('printDiv')}break;case 2: //打印预览if (!!window.ActiveXObject || "ActiveXObject" in window) {document.getElementById("factory").printing.portrait = true;//设置打印方向document.all.WebBrowser.ExecWB(7, 1)} else {print('printDiv')}break;default:break;}}//打印const print = (id) => {var newstr = document.getElementById(id).innerHTML;var oldstr = document.body.innerHTML;document.body.innerHTML = newstr;window.print();document.body.innerHTML = oldstr;//此处针对需求写的,可不写if (myBrowser() !== 'Chrome') {window.location.reload();}}return(<div style={{ width: '600px', margin: 'auto', padding: '20px 0', display: propsData.type ? 'inline-block' : 'block' }}>{/* 将不打印的内容设置noprint样式 */}<div style={{ textAlign: 'center' }} className="Noprint"><object id="WebBrowser" classID="CLSID:8856F961-340A-11D0-A96B-00C04FD705A2" style={{ height: 0, width: 0 }}></object><input type="button" style={{ marginRight: 8 }} value="打印" onClick={() => printOpeation(1)} /><input type="button" style={{ marginRight: 8 }} value="打印预览" onClick={() => printOpeation(2)} /></div><div id='printDiv'>打印的内容</div>)
}

主要代码如上所示,在非IE浏览器内都没有什么问题,window.print()自带预览,也可正常打印,但在IE浏览器内打印预览时只显示第一页的内容,打印也只有一页,研究很久发现是react的问题。
react组件内使用IE的ActiveX会导致多页打印时只显示一页!!!
目前采用的解决办法是针对IE浏览器单独写了一份要打印的页面的html文件,文件内全部采用原生的方法,将文件放入public文件夹内,打包后文件也会存在。
我的项目内在进入打印页面前有一个点击操作,在这里判断浏览器类型,然后直接进入不同的页面。

if (!!window.ActiveXObject || "ActiveXObject" in window) { //判断是否为IE浏览器sessionStorage.setItem('IEDatasource', xxx);//可以将需要的数据存进sessionStoragewindow.open('about:blank').location.href = `http://${window.location.host}/IEPage.html`;return;
}

IE浏览器打印预览只打印第一页相关推荐

  1. html 打印预览跟实际不一样,打印预览和打印出来的不一样(总结自己遇到的问题和解决方法)...

    1.打印预览和打印出来的不一样(表格里面的字出了表格)? 答:我在打监理月报时,经历的一个案例,其实这是因为你设置了居中,结果呢,表格进了下一页,所以这时有可能字就出了表格,只要将此单元格选定,然后选 ...

  2. 在C#里实现DATAGRID的打印预览和打印

    作者Blog:http://blog.csdn.net/qieyj/ 很多人都在论坛里问,如何实现DATAGRID的打印预览和打印,现在我就把这方面的源代码告诉大家.这段代码也花费了我1个晚上的时间, ...

  3. excel 打印预览只能显示一页 打印的字特别小

    excel  打印预览只能显示一页,而且 还  打印的字特别小. 常见小问题,解决. ①问题如图所示 ②解决方法.页面布局 ->  缩放比例     改大.

  4. pdfjs打印预览多出一页空白页

    问题描述: 测试发现,当pdf恰好是一页时,会出现打印预览多出一页空白页的问题,而当页面多时是正常的. 解决方案 修改pdfjs源码/static/pdf/web/viewer.css 原样式: /* ...

  5. 在网页中调用打印预览及打印设置

    在网页中调用打印预览及打印设置 以下内容为程序代码: <OBJECT  id=WB classid=CLSID:8856F961-340A-11D0-A96B-00C04FD705A2 heig ...

  6. java使用Bartender模板btw格式打印预览和打印SDK

    java使用Bartender模板btw格式打印预览和打印SDK 下载 bartender-printer-sdk.jar 支持模板转图像 支持自定义纸张大小 支持局域网打印机打印 支持模板数据源模式 ...

  7. 网页打印问题,打印设置,打印预览,打印分页,纵打,横打及页面的边距

    1.控制"纵打". 横打"和"页面的边距 (1) <object  id="factory"  style="display ...

  8. chrome html 打印预览,Chrome打印预览错误

    我想打印一个html页面.html页面是由我开发的,这个页面可以用mozilla打印,即. 在Chrome中:当按下CTRL + P时会弹出预览窗口,但它会显示:"打印预览失败", ...

  9. C# 打印预览 PrintDocument打印、打印预览

    #region 打印预览#region 变量 常量//以下用户可自定义 //当前要打印文本的字体及字号 private const int HeadHeight = 40;private static ...

最新文章

  1. android中各属性布局,Android里面各布局的属性定义
  2. 继续说说美国互联网版权监管法案(SOPA)
  3. 我的世界一进去就java_我的世界国际java版1.12.2加了光影修复进游戏就直接崩溃...
  4. write up社工进阶
  5. Nginx为什么比Apache Httpd高效
  6. 如何在Eclipse自带的嵌入式Maven和外部安装的Maven之间切换
  7. 并发模式:生产者和消费者
  8. 重磅!这个生信神器助你文章秒出图——miRNA与基因互作数据库
  9. mysql利用binlog删除数据库_MySQL数据库之mysql手动删除BINLOG的方法
  10. 13. 查看网络端口、配置网络
  11. PowerShell在Exchange2010下快速开启邮箱[续]
  12. C语言指针详解(超级详细)
  13. 计量经济学(七)----自相关性Autocorrelation.
  14. CodeForces 645D Robot Rapping Results Report
  15. 考研英语 - word-list-25
  16. 谷歌搜索网站流量_Google搜索升级使网站更难赢得流量
  17. node.js学习笔记3 express基本使用、托管静态资源、express中间件
  18. 更多单词/词组/短语补充和总结
  19. 云队友丨李善友:人生为一件大事而来!
  20. ADB 用法大全 【转】

热门文章

  1. webm和mp4的重要区别
  2. 小方法!教你如何下载喜欢的明星剧照当电脑桌面
  3. VB与各数据库的几种连接方式
  4. JPEG图像文件格式
  5. 加油站收银系统 Java_提升加油站收银效率的收银系统
  6. Android计算器——横屏切换科学计算器
  7. 【ffmpeg】最全简单实用教程|安装音频视频剪切融合拼接抽帧等
  8. 人才招聘网站设计代码(毕业设计和课程设计)
  9. 用python解决微分方程
  10. java 资源映射访问本地磁盘的文件或者访问项目静态资源