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

Vue:使用html2canvas将数据导出到PDF上(含分页)

 【HTML】

 <a-button type="primary" style="margin-right: 5px" @click="exportPdf">导出
</a-button>

 【JS】

exportPdf() {const _this = thisthis.loading = truevar offsetW = 600var offsetH = 200 var element = $('.report-item')var w = element.width() + offsetW // 获得该容器的宽,适当加一下偏移量var h = element.height() + offsetH // 获得该容器的高,适当加一下偏移量var canvas = document.createElement('canvas')canvas.getContext('2d')canvas.width = wcanvas.height = hvar opts = {canvas: canvas,width: w,height: h,//scale: 1,//缩放比例background: '#FFFFFF'//FFF}//调用 html2canvas 组件,将刚刚获取的宽高背景色等数据传进去html2canvas(element[0], opts).then(function (canvas) {//一页pdf的高度(指HTML的高度),【根据实际情况调整】= 元素总长度 / 页数var pageHeight =  1676.4    //canvas.width*1.29//所有导出内容的HTML页面高度var leftHeight = canvas.height//页面的起始位置变量var position = 0//生成的图像的宽高,【根据实际情况调整】var imgWidth = canvas.width/2var imgHeight = canvas.height/2//生成的格式是图片var pageData = canvas.toDataURL('image/jpeg', 1.0)//创建pdf,将内容转化为图片,加入pdfvar pdf = new jsPDF('', 'pt', 'a4')//当内容未超过pdf一页显示的范围,无需分页if (leftHeight < pageHeight){pdf.addImage(pageData, 'PNG', 100, 0, imgWidth, imgHeight ) //(100,0)表示图片位置,x=100 y=0} else //需要分页{while(leftHeight > 0) {pdf.addImage(pageData, 'PNG',100, position, imgWidth, imgHeight)//JPEGleftHeight -= pageHeightposition -= 841.89 //A4标准高度841.89//若还有剩余,继续添加空白页等待图像填充if(leftHeight > 0) {pdf.addPage()}}}pdf.save("结果.pdf")})this.loading = false}

【技巧】如果不知道pageHeight的大小,可以先写小一点,然后导出来看到实际页数后,可以求出pageHeight = 导出内容的元素总长度 / 页数

相关文章:

  • 北京网站建设多少钱?
  • 辽宁网页制作哪家好_网站建设
  • 高端品牌网站建设_汉中网站制作
  • docker部署xxl-job
  • Shell脚本-DNS域名解析格式化
  • Element学习(布局组件、案例操作)(4)
  • Android:Uniapp平台中接入即构RTC+相芯美颜
  • Linux 下 perf 的使用
  • Kafka整合SpringBoot
  • HookNet- 用于病理全切片图像的多分辨率语义分割模型|顶刊精析·24-08-08
  • 9.1 迭装饰器的定义与使用:给你的 Python 代码加点“魔法”
  • 服务器启动jar包的时候报”no main manifest attribute“异常(快捷解决)
  • 数据加密-AES数据加密及C#实现
  • 为什么在网页编辑文字时键盘输入换行要停顿一下网页才显示
  • MaxKB:基于 LLM大语言模型的知识库问答系统实操
  • 部署服务器项目及发布
  • Spring统一处理请求响应与异常
  • QT 布局管理器之QHBoxLayout
  • Angular 响应式表单之下拉框
  • create-react-app项目添加less配置
  • Debian下无root权限使用Python访问Oracle
  • ECMAScript6(0):ES6简明参考手册
  • go append函数以及写入
  • JAVA SE 6 GC调优笔记
  • javascript 哈希表
  • JS数组方法汇总
  • Mithril.js 入门介绍
  • PHP 使用 Swoole - TaskWorker 实现异步操作 Mysql
  • python大佬养成计划----difflib模块
  • Spring-boot 启动时碰到的错误
  • swift基础之_对象 实例方法 对象方法。
  • vue2.0开发聊天程序(四) 完整体验一次Vue开发(下)
  • vuex 学习笔记 01
  • 编写高质量JavaScript代码之并发
  • 程序员该如何有效的找工作?
  • 从tcpdump抓包看TCP/IP协议
  • 从输入URL到页面加载发生了什么
  • 对象引论
  • 技术胖1-4季视频复习— (看视频笔记)
  • 今年的LC3大会没了?
  • 前端面试题总结
  • 让你的分享飞起来——极光推出社会化分享组件
  • 通过来模仿稀土掘金个人页面的布局来学习使用CoordinatorLayout
  • 微信小程序填坑清单
  • 我建了一个叫Hello World的项目
  • 详解NodeJs流之一
  • 用mpvue开发微信小程序
  • 鱼骨图 - 如何绘制?
  • 看到一个关于网页设计的文章分享过来!大家看看!
  • 【干货分享】dos命令大全
  • 带你开发类似Pokemon Go的AR游戏
  • 机器人开始自主学习,是人类福祉,还是定时炸弹? ...
  • #Datawhale AI夏令营第4期#多模态大模型复盘
  • #传输# #传输数据判断#
  • (1)Android开发优化---------UI优化
  • (160)时序收敛--->(10)时序收敛十
  • (pycharm)安装python库函数Matplotlib步骤
  • (Ruby)Ubuntu12.04安装Rails环境