最近在做后台管理系统时,遇到一个需求就是用A4纸张,将特定的内容打印出来。

遇到这种需求,一般都是通过window.print()的方式来处理。

window.print——默认打印body中的全部内容

如果要打印特定dom中的内容,可以通过:

function printpage() {//打印的整体思路是:获取body的内容进行存储,然后获取打印区域的内容填充到body中,进行打印,打印完成后,再将之前存储的body内容重新赋值给body即可。windown.print()默认打印的内容是body的内容。let oldStr = window.document.body.innerHTML;let newStr = document.getElementById('printContent').innerHTML;window.document.body.innerHTML = newStr;window.print();window.document.body.innerHTML = oldStr;
}

但是我在使用过程中,用到了elementUi中的dialog弹层,打印的内容是弹层中的内容。如果用上面的方法就会遇到问题,导致弹层无法正常的关闭和打开。原因就是执行完window.print()后,重新给body赋值dom时,破坏了原有的结构。

为了能够正常的实现此功能,我最终采用了layer.open()打开一个新的页面,在此页面中所有的内容都是直接位于dody中的,因此可以直接打印,不需要给body中的dom获取后重新赋值的操作。

预览页面

window.print()打印页面

1.通过layer.open()打开新的页面——打印内容在新的页面中

 layer.open({type: 2,title: '物料清单',closeBtn: 1,shadeClose: true,content: 'DeliveryPrint?id=' + row.id,area: ['100%', '100%'],end: (index, layero) => {layer.close(index);}
})

2.新页面中在mounted中执行下面的代码

mounted(){//获取打印页面的内容接口this.getBillList(this.id);setTimeout(()=> {$(document).ready(()=> {//页面加载成功后,延迟打印setTimeout(()=> {window.print();//获取窗口索引,然后通过layer的方法进行关闭var index = parent.layer.getFrameIndex(window.name); parent.layer.close(index);return false;}, 100);});}, 2000);
}

3.css部分代码

@media print {body {height: auto;}.nextPageCls {page-break-after: always;}@page {overflow: visible;size: portrait;margin: 1cm 0.5cm -1cm 0.5cm;}
}

body{height:auto}设置此样式才能让页面打印多张,否则只能打印第一张

page-break-after: always;设置此样式表示要在此元素后面添加换页符

@page设置的是页面超出部分是否隐藏,页面横向或纵向,以及页边距等参数

上面的css样式中,为了能够将底部一个小方块(不知道哪里来的)隐藏掉,所以将底部的margin设置为负数,问题解决!

@page {overflow: visible;size: portrait;margin: 1cm 0.5cm -1cm 0.5cm;
}

最终功能实现!!!

window.print()+layer.open()——实现打印A4纸张内容的功能——功能实现相关推荐

  1. css打印适应纸张_使用原生css+js+html实现打印A4纸张的功能页面

    有时候我们需要使用html+css实现打印A4纸张的功能页面,以下代码实现 A4打印页面 /*横向*/ .a4-endwise{ margin: 0 auto; width: 1070px; heig ...

  2. html 多个分页连续打印机,web使用window.print()实现分页批量打印。

    写了有关于web客户端打印物料条码的功能.想着以后可能会用到,就把他给写下来了. 主要参考了:https://blog.csdn.net/ww130929/article/details/719771 ...

  3. web使用window.print()实现分页批量打印。

    写了有关于web客户端打印物料条码的功能.想着以后可能会用到,就把他给写下来了. 主要参考了:https://blog.csdn.net/ww130929/article/details/719771 ...

  4. window.print() 前端实现网页打印详解

    前言 print作为浏览已经比较成熟的技术可以经常被用来打印页面的部分内容,我们可以在MDN上查看到相关的简单介绍. 一.print()方法 print() 方法用于打印当前窗口的内容.调用 prin ...

  5. window.print() 表格打印 完美实现分页

    问题描述: 采用js打印页面,表格过长 会出现分页,表格就会被裁减(那种每行固定就一行展示的简单,每个分页给他多少条数据就完事了),这里的问题是数据从后台获取,而且每一列都可能出现换行,多的可能达到1 ...

  6. window.print() 文字过多会打印不全_明天开始打印准考证,你需要注意这些!

    准考证打印时间&登录网址 准考证下载时间:2019年12月14日-23日 唯一下载网址:中国研究生招生信息网(https://yz.chsi.com.cn/) 视频版打印流程 准考证打印超全流 ...

  7. html打印指定区域内容,js print打印网页指定区域内容

    比较简单的办法 使用CSS,定义一个.noprint的class,将不打印的内容放入这个class内. 细如下: 代码如下 .noprint{visibility:hidden} 要打印的内容.哈哈! ...

  8. web打印window.print

    这几天一直在研究通过web程序打印条形码到标签上,由于打印机和显示器不同,碰到了各种坑,现一一列出来,给各位参考. web打印有很多的方式,比如生成pdf打印.JQuery插件.window.prin ...

  9. window.print()前端实现打印功能

    方法介绍 window.print()方法用于打印当前窗口的内容. 默认打印页面中body里的所有内容. 调用 print() 方法会产生一个打印预览弹框,让用户可以设置打印配置. 1. 打印方法 1 ...

最新文章

  1. Grid Infrastructure 的较好的例子
  2. spring mvc 实现单文件 || 多文件上传
  3. 华为发布会: 牛逼鸿蒙,吹水的大会
  4. Linux Ubuntu 查看cpu信息
  5. MATLAB基本信号的产生
  6. [十二省联考2019]希望
  7. DXP-2004软件安装
  8. css苹果手机字号变大,css – 智能手机字体大小不一致
  9. 常用邮箱的SMTP、POP3域名及其端口号
  10. pm runtime
  11. 美团校招,百度校招经历
  12. 哈工大csapp计算机系统大作业
  13. MySQL installer直接解决安装(包括不想安在c盘也OK)、更新、卸载问题
  14. 常用语言注释使用格式
  15. 中琅条码打印软件如何制作条形码
  16. 台式计算机突然连接不到网络,电脑突然网络感叹号导致不能上网的解决方法
  17. r软件 linux,分享|Linux 上好用的 R 语言 IDE
  18. 百度地图根据经纬度绘制轨迹
  19. HDU 4435(charge-station)(BFS+最小花费)
  20. DDD如何设计落地?(库存,产品账示例)

热门文章

  1. python变成exe需要python环境吗_[Python]py程序发布——Python环境移植和exe程序生成(无环境依赖性),pythonPy,以及,EXE...
  2. 安卓电子书格式_纯干货|提升电子书阅读体验的四点感受
  3. 移动终端3D地图应用普及或带来app产业心蓝海
  4. (4.6.14)android 插桩基本概念plugging or Swap
  5. 字体样式font-style的介绍
  6. 如何使用SIGFOX技术连接物联网?
  7. yolo 深度学习_YoLo v1-v3深度学习网络-结构简介
  8. 谷歌日语输入法、中文输入法之间的切换
  9. Python 打开/关闭其他应用程序方法
  10. QA团队和测试团队的关系