问题

最开始需要做一个网页的截图,结果发现有滚动条怎么都截取不成功,然后各种百度到了一个办法,就是复制那个节点到body,然后在截取那个复制的节点,小页面实验了一下,成功了好开心,代码是这样的。但是,有但是o(╥﹏╥)o。(最后附完整代码)

方法1(这里示例保存为图片)

这个方法如果你没有echarts图表,是可以实现滚动条完整截图的,测试过没有问题;
 //这个是保存为图片的方法function saveFile(data, filename){var save_link = document.createElementNS('http://www.w3.org/1999/xhtml', 'a');save_link.href = data;save_link.download = filename;var event = document.createEvent('MouseEvents');event.initMouseEvent('click', true, false, window, 0, 0, 0, 0, 0, false, false, false, false, 0, null);save_link.dispatchEvent(event);};//截图的关键代码let targetDom = document.getElementById('pdfContentsDiv');   //原本需要截图的divlet clonedNode = targetDom.cloneNode(true); //复制一个clonedNode.setAttribute("style",`width: ${targetDom.clientHeight};height: ${targetDom.clientWidth};`);  document.body.appendChild(clonedNode); //放到body后面html2Canvas(clonedNode, {  allowTaint: true,  taintTest: false,  }).then(function (canvas) {//这里保存为图片或保存到pdf的代码,这里示例保存为图片var pageData = canvas.toDataURL('image/jpeg', 1.0);saveFile(pageData.replace("image/jpeg", "image/octet-stream"),new Date().getTime()+".jpeg");document.body.removeChild(clonedNode);  //最后记得移除截图时添加的})

方法二:解决页面中有echarts图表,复制后图表位置为空

然后,又开始各种尝试,在坑里面走了两天以后,最后终于发现了html2canvas截图成功的一个标准就是,外层div的高度跟里面需要截图的内容的高度一致就能完整的截图,(比如需要截图的外层div是800的高度有滚动条,里面的需要截图的内容是1800的高度,截图的时候就把1800的高度给需要截图的那个div就能完整截图),代码如下:

     //截图的关键代码let targetDom = document.getElementById('pdfContentsDiv'); //需要截图的divlet domScrollHeight=targetDom.scrollHeight;  //获取滚动的高度targetDom.setAttribute("style",`height: ${domScrollHeight}px;`);  // 把高度赋值给需要截图的那个divhtml2Canvas(targetDom , {  allowTaint: true,  taintTest: false,  }).then(function (canvas) {//这里是保存为图片或保存到pdf的代码,最后有保存为pdf的完整代码。......targetDom.setAttribute("style",`height: 800px;`); //截图完成后最后记得把高度恢复})

总结

各种测试发现,截图成功的标准就是,把内层所有div的高度加起来(scrollHeight高度),给外层那个截图的div,就能把有滚动条的完整截图了。

完整步骤代码

安装html2canvas和jspdf

npm install html2canvas jspdf --save
<template><div><el-button type="primary" icon="el-icon-download"  @click="reportPdf()">导出2</el-button><div id="pdfContentsDiv"><div style="width:100%;height:600px;background:red"></div><div style="width:100%;height:800px;background:green"></div><div style="width:100%;height:400px;background:yellow"></div></div></div>
</template>
<script>
import html2Canvas from 'html2canvas'
import JsPDF from 'jspdf'
export default {data() {return {}},created() {},methods: {reportPdf() {let targetDom = document.getElementById('pdfContentsDiv');  let domScrollHeight=targetDom.scrollHeight;targetDom.setAttribute("style",`height: ${domScrollHeight}px;`);html2Canvas(targetDom, {  allowTaint: true,  taintTest: false,  }).then(function (canvas) { let contentWidth = canvas.width;let contentHeight = canvas.height;let a4Height = 841.89;let a4Width = 595.28;let per = (contentWidth / a4Width) * 0.75; //这个主要是为了防止宽度不够的//一页pdf显示html页面生成的canvas高度;let pageHeight = (contentWidth / a4Width) * a4Height;//未生成pdf的html页面高度let leftHeight = contentHeight;//一页pdf显示html页面生成的canvas高度;var a4HeightRef = Math.floor((canvas.width / a4Width) * a4Height);//页面偏移let position = 0;//a4纸的尺寸[595.28,841.89],html页面生成的canvas在pdf中图片的宽高let imgWidth = a4Width;let imgHeight = (a4Width / contentWidth) * contentHeight;let pageData = canvas.toDataURL("image/jpeg", 1.0);let pdf = new JsPDF("", "pt", [a4Width, a4Height]); //不分页    if (leftHeight < pageHeight) {pdf.addImage(pageData, "JPEG", 0, 0, imgWidth, imgHeight);} else {while (leftHeight > 0) {pdf.addImage(pageData,"JPEG",0,position,imgWidth,imgHeight);leftHeight -= pageHeight;position -= a4Height;//避免添加空白页if (leftHeight > 0) {pdf.addPage();}}}pdf.save('title');targetDom.setAttribute("style",`height: 800px;`);});}, },
};
</script>
<style scoped>#pdfContentsDiv{overflow:auto;width:100%;height:800px;}
</style>

最后的最后,如果有帮助到大家的话,可以给我留言或者点赞哦,感觉有帮助到别人,我也会很开心~~~

vue页面截图用html2canvas截图不完整有滚动条+有echarts图表时完整截图——截图保存为图片或pdf相关推荐

  1. vue 页面转pdf 并下载

    最近需要做一个下载vue页面为pdf格式的功能,网上方案有很多,也尝试了其他方案,最终采用的方案 流程就是点击下载报告按钮,则请求后端一个接口,例如接口地址为example.cn/file/downl ...

  2. canvas java 上传截图_在Vue项目中使用html2canvas生成页面截图并上传

    使用方法 项目中引入 npm install html2canvas html代码 //html代码 js代码 // 引入html2canvas import html2canvas from 'ht ...

  3. vue页面截图;H5页面截图;vue项目中将特定网页内容生成图片(截图);html2canvas截图

    功能: 1.兼容 PC 和 Mobile: 2.对指定的区域进行截取: 3.可以控制截图大小: 4.截图生成base64图片地址 一.安装插件 npm install html2canvas --sa ...

  4. html2pdf vue,VUE项目中利用html2canvas和JsPdf实现页面转PDF并保证图片不会被切断

    1.安装html2canvas和JsPdf //第一个.将页面html转换成图片 npm install --save html2canvas //第二个.将图片生成pdf npm install j ...

  5. html2canvas 插件实现网页截图(html保存为图片)

    1.html2canvas 官网: http://html2canvas.hertzen.com/ html2canvas 是一款利用javascript进行屏幕截图的插件.可以使用两种语法格式进行截 ...

  6. vue 页面不置顶问题(页面内操作、页面跳转后) - 集合篇

    文章目录 vue 页面内切换dom,页面跳转后 都不置顶? 一.页面内操作: 1.1 代码如下: 二.页面之间跳转: 2.1 代码截图 · 说明: 2.2 增加代码 · 示下: 三.拓展 · (直接置 ...

  7. vue页面传参(多个参数传值)与接参 - 代码篇

    index.js路由规则设定: /searchResult/syyName=:syyName 发送页面: //传参页面 this.$router.push({name: 'SearchResult', ...

  8. vue页面返回消息头获取_vue在响应头response中获取自定义headers操作

    日常开发,我们可能会为了安全问题,保证第三方无法通过伪造返回报文欺骗前端,需要在返回报文中添加自定义参数,用于验证身份,后端添加自定义参数,前端校验自定义参数通过后才会执行相应的操作. 系统为了安全会 ...

  9. h5跨域访问图片_网页保存为图片及高清截图的优化 | canvas跨域图片配置

    本次技术调研来源于H5项目中的一个重要功能需求:实现微信长按网页保存为截图. 这里有个栗子(请用微信打开,长按图片即可保存):3分钟探索你的知识边界 将整个网页保存为图片是一个十分有趣的功能,常见于H ...

最新文章

  1. ACM网络赛金华赛区的一道关于树的题:Family Name List
  2. 这个冬天,头秃了,口袋也空了......
  3. mysql 查看运行级别_运行级别及进程
  4. Linux下动态共享库加载及使用详解
  5. 终端 ssh 上传文件_记一次将文件添加到github
  6. 从语音识别到语义识别还有多少路要走?
  7. Windows10 phpStudyV8.1的基本使用
  8. Win10系统安装打印机提示未安装打印机驱动程序,试图将驱动程序添加到存储区
  9. 最全 Yaml 语法详解
  10. 互联网日报 | 2月8日 星期一 | 乐视回应App图标“欠122亿”;中国联通成立联通数科;高德地图上线13万个旅游厕所信息...
  11. canvas绘制五角星
  12. [备查]使用 SPQuery 查询 Person or Group 字段
  13. 分布式、集中式存储与san、nas
  14. (十四)单词之各动词讲解
  15. c语言中正弦函数的定义,三角函数基本概念 | 玄数
  16. 微信小程序利用腾讯云IM发送语音 + 图片
  17. 成功解决:Updates were rejected because the tip of your current branch is behind its remote...【解决方法】
  18. 个人账本软件---界面设计
  19. 基于直方图的图像全局二值化算法原理、实现--基于谷底最小值的阈值
  20. 58同城2018校招前端笔试题总结

热门文章

  1. python给图片加滤镜的方程_纯Python综合图像处理小工具(4)自定义像素级处理(剪纸滤镜)...
  2. Echarts 开发混搭图表实现步骤,并实现多图联动
  3. 网络爬虫,python和数据分析学习--part2
  4. 字节跳动月薪 27k 招的测试员,有多特别?
  5. mysql utf8 和 utf8mb4 的区别
  6. 在线代码编辑器:Monaco Editor
  7. 美柚广告投放的优势有哪些?美柚广告展现位置介绍!
  8. 在工作中如何提升自己?
  9. nodejs入门(五)
  10. Rust之impl关键字