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

前端实现将多个页面导出为pdf(分页)

一、需要用到两个插件,需要安装
vue框架中实现导出pdf

npm install --save html2canvas       // Dom转canvas再转image
npm install jspdf --save             // image转pdf

二、实现方法
分别获取每个页面的DOM元素,并转为canvas再转image,通过jsPDF插件把图片添加进来,再实现导出即可

jsPDF提供了一个很有用的API,addPage(),我们可以通过pdf.addPage(),来添加一页pdf,然后通过pdf.addImage(…),将图片赋予这页pdf来显示。

三、完整代码

<template><div class="main"><el-button @click="download">下载</el-button><div id="page1"><img src="@/assets/images/page1.png" alt="page1" /></div><div id="page2"><img src="@/assets/images/page2.png" alt="page2" /></div><div id="page3"><img src="@/assets/images/page3.png" alt="page3" /></div></div>
</template><script setup lang="ts">
import JsPDF from "jspdf";
import html2canvas from "html2canvas";const download = () => {let pageDom1 = document.getElementById("page1") as HTMLElement;let pageDom2 = document.getElementById("page2") as HTMLElement;let pageDom3 = document.getElementById("page3") as HTMLElement;let listDom = [html2canvas(pageDom1), html2canvas(pageDom2), html2canvas(pageDom3)]; // dom转canvasPromise.all(listDom).then(canvasList => {let pdf = new JsPDF("p", "pt", "a4");canvasList.forEach((canvas, index) => {let imgData = canvas.toDataURL("image/png"); // canvas转图片pdf.addImage(imgData, "PNG", 0, 0, 595, 842); // 595  842 a4纸宽高if (index < canvasList.length - 1) {pdf.addPage(); // 添加新页面}});pdf.save("download.pdf"); // 导出window.history.go(-1); // 关闭当前页面});
};
</script><style scoped lang="scss">
.main {width: 595px;margin: 0 auto;img {display: block;width: 595px;height: 842px;}
}
</style>

相关文章:

  • 北京网站建设多少钱?
  • 辽宁网页制作哪家好_网站建设
  • 高端品牌网站建设_汉中网站制作
  • SSL vpn easy connect 选路连接失败,可能当前连接网络异常,请稍后重试
  • 防火墙--双机热备
  • python + Pytest + requests 的接口自动化步骤
  • SQL基础 | NOT NULL 约束介绍
  • 7.13实训日志
  • Qt易错总结
  • Chrome浏览器的Profile数据内容简介
  • 一边吃谷一边痛,二次元距离三次元还有多远?
  • 电视盒子变身NAS之安装termux
  • IDEA中Git常用操作及Git存储原理
  • LeetCode-计数质数
  • 分享 .NET EF6 查询并返回树形结构数据的 2 个思路和具体实现方法
  • [AHK] WinHttpRequest.5.1报错 0x80092004 找不到对象或属性
  • 动手学深度学习——5.卷积神经网络
  • LLM大模型ChatGLM-6B 本地部署与运行
  • IE9 : DOM Exception: INVALID_CHARACTER_ERR (5)
  • [nginx文档翻译系列] 控制nginx
  • css的样式优先级
  • Docker 1.12实践:Docker Service、Stack与分布式应用捆绑包
  • Docker 笔记(1):介绍、镜像、容器及其基本操作
  • ES6语法详解(一)
  • ESLint简单操作
  • nginx 配置多 域名 + 多 https
  • python 学习笔记 - Queue Pipes,进程间通讯
  • TypeScript实现数据结构(一)栈,队列,链表
  • Vim Clutch | 面向脚踏板编程……
  • Vue学习第二天
  • Xmanager 远程桌面 CentOS 7
  • 动态魔术使用DBMS_SQL
  • 解决iview多表头动态更改列元素发生的错误
  • 开发基于以太坊智能合约的DApp
  • 力扣(LeetCode)56
  • 前端每日实战 2018 年 7 月份项目汇总(共 29 个项目)
  • 前端面试题总结
  • 使用iElevator.js模拟segmentfault的文章标题导航
  • 找一份好的前端工作,起点很重要
  • Nginx惊现漏洞 百万网站面临“拖库”风险
  • 阿里云重庆大学大数据训练营落地分享
  • 进程与线程(三)——进程/线程间通信
  • 摩拜创始人胡玮炜也彻底离开了,共享单车行业还有未来吗? ...
  • # 利刃出鞘_Tomcat 核心原理解析(二)
  • #laravel部署安装报错loadFactoriesFrom是undefined method #
  • #周末课堂# 【Linux + JVM + Mysql高级性能优化班】(火热报名中~~~)
  • $redis-setphp_redis Set命令,php操作Redis Set函数介绍
  • (2009.11版)《网络管理员考试 考前冲刺预测卷及考点解析》复习重点
  • (BAT向)Java岗常问高频面试汇总:MyBatis 微服务 Spring 分布式 MySQL等(1)
  • (Redis使用系列) SpirngBoot中关于Redis的值的各种方式的存储与取出 三
  • (一)python发送HTTP 请求的两种方式(get和post )
  • (一)utf8mb4_general_ci 和 utf8mb4_unicode_ci 适用排序和比较规则场景
  • (转)拼包函数及网络封包的异常处理(含代码)
  • (轉貼)《OOD启思录》:61条面向对象设计的经验原则 (OO)
  • .cfg\.dat\.mak(持续补充)
  • .java 指数平滑_转载:二次指数平滑法求预测值的Java代码
  • .mysql secret在哪_MYSQL基本操作(上)
  • .NET C# 使用 SetWindowsHookEx 监听鼠标或键盘消息以及此方法的坑