Vue使用html2Canvas+printJS实现分页导出,打印

1.插件引入

npm i html2canvas
npm i print-js

2.使用模板

<template><div class="dymb"><el-button @click="getPdf()">导出PDF</el-button><el-button @click="goPrint()">打印PDF</el-button><div class="pdfContent " id="pdfDom" ref="print"><!-- 正面模板 --><div class="content marginBottom" style="page-break-after:always"><!-- <div v-for="i in 83" :key="i">{{i}}</div> --></div><!-- 背面模板 --><div class="content content2 " style="page-break-after:always"><!-- <div v-for="i in 83" :key="i">{{i}}</div> --></div></div></div></template><script>
import html2Canvas from 'html2Canvas'
import printJS from 'print-js'
export default {name: 'dymb',data () {return {htmlTitle: '标题',}},watch: {},created () {},mounted () {},methods: {goPrint () {this.isPrint = truehtml2Canvas(this.$refs.print, {allowTaint: true,taintTest: false,useCORS: true,dpi: window.devicePixelRatio * 4,scale: 4}).then((canvas) => {const url = canvas.toDataURL('image/jpeg', 1.0)printJS({printable: url, // 要打印的idtype: 'image',style: '@page{size:auto;margin: 1.5cm 1cm 1.5cm 1cm;}' //去除页眉页脚})this.isPrint = false})}}
}
</script><style lang="scss" scoped>
//  @page {//    size: auto;
//    margin: 0 5px;
//  }
.dymb {width: 100%;height: 100%;overflow: auto;.pdfContent {width: 1240px;margin: 0 auto;box-sizing: border-box;}.content {width: 1240px;height: 1754px;border: 1px #1c1 solid;box-sizing: border-box;// margin: 0 auto;}.content2 {width: 1240px;height: 1700px;border: 1px #1c1 solid;box-sizing: border-box;}.marginBottom {margin-bottom: 30px;}.zm {}.bm {}
}
</style>

3.导出方法封装

// htmlToPdf.js
// 导出页面为PDF格式
import html2Canvas from 'html2canvas'
import JsPDF from 'jspdf'
export default {install (Vue, options) {Vue.prototype.getPdf = function () {var title = this.htmlTitle  //DPF标题html2Canvas(document.querySelector('#pdfDom'), {allowTaint: true,taintTest: false,useCORS: true,y: 1, // 对Y轴进行裁切// width:1200,// height:5000,// width: 1240,// height: 3508,dpi: window.devicePixelRatio * 4, //将分辨率提高到特定的DPI 提高四倍scale: 4 //按比例增加分辨率 }).then(function (canvas) {let contentWidth = canvas.widthlet contentHeight = canvas.heightlet pageHeight = contentWidth / 592.28 * 841.89let leftHeight = contentHeightlet position = 0let imgWidth = 595.28let imgHeight = 592.28 / contentWidth * contentHeightlet pageData = canvas.toDataURL('image/jpeg', 1.0)let PDF = new JsPDF('', 'pt', 'a4')if (leftHeight < pageHeight) {PDF.addImage(pageData, 'JPEG', 0, 0, imgWidth, imgHeight)} else {while (leftHeight > 0) {PDF.addImage(pageData, 'JPEG', 0, position, imgWidth, imgHeight)leftHeight -= pageHeightposition -= 841.89if (leftHeight > 0) {PDF.addPage()}}}PDF.save(title + '.pdf')})}}
}

4.main.js引入

// 导出
import htmlToPdf from './utils/htmlToPDF.js'
Vue.use(htmlToPdf)

如有不足,请多指教,
未完待续,持续更新!
大家一起进步!

Vue实现分页导出,打印相关推荐

  1. WEB页面导出为Word文档后分页横向打印的方法

    < html >      < HEAD >          < title >WEB页面导出为Word文档后分页&横向打印的方法  </ titl ...

  2. java分页导出excel_报表中利用API来实现导出excel列后分页

    在报表中,当统计报表统计的指标非常多,在页面上展现的时候,整个报表会变得非常的长,经常会通过设置滚动条拖拽来查看整个报表,当这时用不分页导出excel后,查看excel中报表被导出到一个sheet中, ...

  3. vue 实现Excel 导出

    前言 数据表格的导出,是实际开发的常见功能,前后端都可以实现表格导出,讲解自己在用的一种. 获取数据源,可以通过后端接口实现,也可以利用分页查询的表格接口来实现. 处理数据,对excel表格的表头(最 ...

  4. ABP vNext 对接 Ant Design Vue 实现分页查询

    本文内容 ABP vNext中的分页查询 STable组件中的分页查询 实现参数转换层 最终对接效果 在 上一篇 博客中,博主和大家分享了如何在 EF Core 中实现多租户架构.在这一过程中,博主主 ...

  5. Qt编写物联网管理平台42-数据查询导出打印

    一.前言 本系统存储的三大类记录,运行日志.报警日志.用户日志,这些不同类似的记录,都需要提供查询功能,可以按照记录的时间范围等条件查询,查询的记录需要做分页显示,为了分页显示还特意花了很多时间专门封 ...

  6. Vue导出word附表部分横向显示(承接上一篇Vue纯前端导出word)

    Vue纯前端导出word直通车 1. 引入js import htmlDocx from "@/utils/html-docx"; 2. page-break-before:alw ...

  7. vue实现pdf导出,解决生成canvas模糊等问题

    vue实现pdf导出,解决生成canvas模糊等问题 参考文章: (1)vue实现pdf导出,解决生成canvas模糊等问题 (2)https://www.cnblogs.com/jsonYoung/ ...

  8. vue+element-ui文件导出模板及导入xlsx文件

    vue文件的导出与导入 前言 一.导出模板和导入xlsx文件 二.导出JS方法,单独写示例 1.接口方法 2.页面调用导出方法 三.导入表格JS代码 前言 当我们做后台管理的时候,不免会遇到导出模版, ...

  9. ant design vue table分页

    ant design vue table分页设置 1.设置pagination <a-table :columns="columns" :dataSource="d ...

最新文章

  1. 使用Python制作酷炫的二维码
  2. Python中多层List展平为一层
  3. linux ubuntu 开机自动启动 fixfox 并打开指定网站
  4. wordpress评论插件:多说
  5. mongoengine.NotUniqueError
  6. 一步一步学Silverlight 2系列(33):Silverlight 2应用Web Service两例
  7. JavaScript的一些小技巧(转)
  8. byte与或运算 java_java中byte转换int时为何与0xff进行与运算
  9. UI自动化测试篇 :ReportNG替代TestNG自带html版测试报告初探
  10. WIN10系统右下角网络连接图标消失解决方案
  11. LinearLayout和RelativeLayout布局中使用android:orientation
  12. 鸿蒙使用体验 2.0,鸿蒙的到来与华为的破局
  13. 量子计算机五条原则,量子信息科学:量子计算机、隐形传物与人脑量子运算
  14. 异常检测中的浅层模型与深度学习模型综述(A Unifying Review of Deep and Shallow Anomaly Detection)
  15. 如何合并多个PDF文件?这几个小妙招快来码住吧
  16. 最全的固态硬盘ssd安装win10专业版指南
  17. 二级域名共享主机IP和端口
  18. 浙大PTA-Python题库 编程题第五章(5-1~5-11)题解
  19. 路由与交换技术期末上机考核
  20. 高级语言,汇编语言,机器语言

热门文章

  1. 计算机二级ppt乒乓球答案,2017年9月计算机二级VB临考测试题及答案
  2. 2022.12四级真题第2套的听力原文(中英文都有)
  3. 微处理器走进多内核时代
  4. VLSI 基础知识梳理
  5. agx 安装ros opencv_玩转软路由 篇二:虚拟机ESXI中Mikrotik RouterOS(ROS)的安装设置_路由器...
  6. 外挂电容触摸屏总结(一)
  7. 项目经理如何提高团队的开发效率?
  8. The class java.lang.IllegalArgumentException may be caused by the wrapped ProcessingEnvironment obje
  9. 中英混串转拼音 源码
  10. 秋招准备之——(软件测试)