在前端开发中,想打印当前网页的指定区域内容,或将网页导出为多页的PDF,可以借助print.js实现,该插件轻量、简单、手动引入、不依赖其他库。示范项目github:https://github.com/lemoncool/print-demo。打印或导出PDF后效果很好,下图是对比图:

关于print.js
功能:网页打印插件,支持打印或不打印指定区域,并且它还支持将网页导出为pdf。前提是可以接受该交互效果。

已实现:
  原生js书写

不依赖其他库可指定打印(或不打印)的区域

支持定制css,内联、外联均可

支持select、input(text、redio、checkbox)、textarea获取参数

待验证:
  目前测试谷歌浏览器运行正常,其他低版本浏览器兼容性待验证

如何使用
本插件可在 js 或 vue 项目中使用,其他框架未验证。两种使用场景引入的 js 大同小异。

1、声明打印区域:
可通过设置 class 类名或 id 指定打印区域,但vue项目涉及到打包部署,推荐使用 ref 获取DOM节点,如果使用 id 或 class 获取,打包部署后打印内容可能显示空白。

<div class="printDom">指定打印区域</div><div id="printDom">指定打印区域</div><div ref="printDom">指定打印区域</div>

2、调用打印方法:
2.1 js 项目
// 引入

<script src="print.js"></script>

// 调用

Print('#printDom',{});

2.2 vue 项目
main.js引入,xx.vue页面引用

//main.js
import Print from './print';
Vue.use(Print);

// xx.vue

this.$print(this.$refs.printDom, {});

复制代码
3、声明不打印区域:
js 和 vue 项目通用

3.1 声明"no-print"类名
print方法中,不需要特意声明,在打印时默认会剔除.no-print区域。

<div class="no-print">不打印区域</div>Print('#printDom');

3.2 自定义类名
此时需要在print方法中通过"noPrint"属性指定不打印区域。

<div class="no-print-box">自定义不打印区域类名</div>Print('#printDom',{noPrint:'.no-print-box'});

4、参数说明:
js 和 vue 项目通用,以 vue 项目为例。

this.$print(this.$refs.printDom, {noPrint: '.noPrint',onStart: () => {console.log('打印开始');},onEnd: () => {onsole.log('打印完成');}
});

参数位置
属性
说明
参数1
类名、id、ref声明dom
打印区域

noPrint
不打印区域,默认’.no-print’
参数2
onStart
打印前回调函数

onEnd
打印后回调函数,确定和取消都会触发
5、vue项目可能遇到的问题,见下图:

1、el-select中,文本过长,超出了显示宽度。这种情况在网页上,可以通过下拉框选项看完整文本。但是此时导出页面是没有交互的。

解决办法:尽可能把下拉框宽度调宽,如果效果仍然不好,可以考虑在下拉框同级写个textarea,在打印时,控制下拉框和文本域的显示隐藏。

2、选项的背景色没有正常显示。

解决办法:为打印区域的最外层容器设置样式,如果项目中安装了node-sass,也可直接为body加样式。两种方式任选其一。

<style>
.printContainer {-webkit-print-color-adjust: exact;}
</style>
<!--以下方式需要项目引入node-sass-->
<style lang="scss">
@media print {body {-webkit-print-color-adjust: exact;}
}
</style>

3、在打印预览时,显示高度错误。

原因:vue页面中,打印区域的宽度大于打印预览时页面宽度。在生成打印预览文件时,textarea没有重新计算,直接将vue页面下的height搬了过来,从而引发了打印时textarea文本展示高度不够的问题。

解决办法:可以的话,为打印区域的最外层容器设置宽度。值接近打印预览时宽度,700px左右即可。或者想办法在打印的一瞬间,让该文本域先隐藏,再展示,也可以触发重新计算,也可规避此问题。

4、vue页面中,显示"打印"按钮,在打印时不想打印该按钮。

解决办法:见本文上述第三节提到的指定不打印指定区域。

5、打印预览时显示undefined。

检查是否把 ref 绑定在了el-xx 标签上,如果是,试试外层包一个div,ref 绑在div上。

6、打印预览时,显示空白。

检查一下print.js文件,toPrint 方法中, 是否有load方法。因为我在其他网页链接中看到过不同版本的print.js。

前端网页打印插件print.js相关推荐

  1. 原生js打印插件Print.js

    网页打印功能在很多的网站系统中都会使用到.比如说报表打印功能等. 以下是在Jquery插件库中找到的一款原生js打印插件,代码清洁简单,封装的代码也很好理解. index.html页面代码 <! ...

  2. vue封装打印插件print.js实现打印组件功能

    代码 插件地址:https://github.com/xyl66/vuePlugs_printjs 1. 打印插件属性方法 定义-print.js // 打印类属性.方法定义 /* eslint-di ...

  3. jq jqprint 设置页脚_jquery打印插件jqprint.js使用教程

    最近的项目要使用web前端打印,本来在网上搜索了一下采用的js:window.print()局部打印网页的方法,但是经过实际测试发现兼容性不好,无奈只好再找其他方法,终于被我找到了一款基于jquery ...

  4. 网页打印非常优秀的插件 Print.js

    前言:最近需要在网页上打印,网上找了很多,刚开始使用的 lodop打印插件来打印,没有达到理想的要求,它需要下载.区分浏览器的位数来安装.在vue使用时候必须写成内部样式,在笔记本样式失效等问题,使我 ...

  5. web打印插件 js打印插件 网页打印插件

    平常浏览网页和文档的时候,随处可见打印两个字,有时候不小心点到,就会弹出一个打印的页面,如果连接了打印机,可以直接调用到打印机进行真实的打印.做为开发人员我们在网页开发过程中经常会有打印页面的需求,目 ...

  6. 浏览器打印功能print.js

    插件文档:https://printjs.com/ npm文档: https://www.npmjs.com/package/print-js npm install print-js --save ...

  7. window.print();html 打印 之 print.js

    插件地址:Print.js - Javascript library for HTML elements, PDF and image files printing. 最近顾客需要把html打印,用w ...

  8. 网页分享插件 share.js 国外常用

    这两天做推广,要求实现页面分享到国外各大社交媒体的功能.自己去翻各大厂的文档的话,实现起来时间相当长. github 上找了个插件,很6. 地址: https://github.com/ellison ...

  9. Blender 3D 打印插件Print Toolbox

    Blender 3D Print Toolbox Statistics 统计,可以提算出模型的体积,可供打印备料参考. Error Checking 错误检查 Solid 检查模型是否完整正确,是否有 ...

最新文章

  1. POJ 1661 Help Jimmy(递推DP)
  2. padding和卷积的区别_池化、池化与卷积异同、zero-padding
  3. 全栈、均栈、MERN栈,哪个才是下一代Web项目的正确栈
  4. .net使用SqlBulkCopy类操作DataTable批量插入数据库数据,然后分页查询坑
  5. drupal linux安装,在Debian 10(Buster) Linux服务器中安装drupal 8.8.0的说明
  6. 服务器缺少storportSYS文件,Windows操作系统蓝屏日志分析方法
  7. matlab中fminunc函数使用方法,关于Matlab:了解fminunc参数和匿名函数,函数处理程序...
  8. D. Multiplication Table 二分查找
  9. Pix4D生成正射影像记录
  10. 安装GitExtentions KDiff3已配置为合并工具,kdiff3的路径未配置
  11. LRC歌词文件读取代码
  12. linux请求超时 ping_linux下ping命令使用详解
  13. 动态磨砂玻璃渐变背景
  14. 全志D1-H芯片 如何在tina使用tplayerdemo 进行rtsp拉流说明?
  15. matlab 把图像变成二维的,matlab图像怎么变成二维矩阵
  16. First-chance exception at 0x774CEB23 (ntdll.dll) in XXX.exe: 0xC0000005: Access violation writing
  17. 利用python自动生成证件照
  18. “Go 仅是 Google 的编程语言,而不是程序员的!”
  19. 嵌入式数据库SQLite
  20. Excel自动为有值的单元格添加边框

热门文章

  1. 国庆假期看了一系列图像分割Unet、DeepLabv3+改进期刊论文,总结了一些改进创新的技巧
  2. yxc_第二章 数据结构(一)_链表
  3. oeasy教您玩转python - 012 - # 刷新时间
  4. 淘宝“蓝鲸计划”细节内容曝光 收编谷歌中国资源
  5. 抱薪者说 | 卫斯理:出发,从“好玩”开始
  6. matlab中制作软件,在matlab app designer中制作多个3d图形动画
  7. 像素与照片尺寸、分辨率之间的关系
  8. 计算机应用简答,计算机应用基础简答题.doc
  9. termite:从零开始的go语言学习生活
  10. 面试问题总结——关于OpenCV