Vue将页面导出为图片或者PDF


Posted in Javascript onAugust 17, 2020

本文实例为大家分享了Vue导出页面为PDF格式的具体代码,供大家参考,具体内容如下

导出为图片

1.将页面html转换成图片

npm install html2canvas --save

2.在需要导出的页面引入

import html2canvas from 'html2canvas';

在 methods 中添加方法

dataURLToBlob(dataurl) {//ie 图片转格式
    var arr = dataurl.split(','), mime = arr[0].match(/:(.*?);/)[1],
     bstr = atob(arr[1]), n = bstr.length, u8arr = new Uint8Array(n);
    while (n--) {
     u8arr[n] = bstr.charCodeAt(n);
    }
    return new Blob([u8arr], {type: mime})
    },
  downloadResult(name) {
    let canvasID = document.body
    let a = document.createElement('a');
    html2canvas(canvasID).then(canvas => {
     let dom = document.body.appendChild(canvas);
     dom.style.display = "none";
     a.style.display = "none";
     document.body.removeChild(dom);
     let blob = this.dataURLToBlob(dom.toDataURL("image/png"));
     a.setAttribute("href", URL.createObjectURL(blob));
     a.setAttribute("download", name + ".png")
     document.body.appendChild(a);
     a.click();
     URL.revokeObjectURL(blob);
     document.body.removeChild(a);
    });
    },
   printOut(name) {
   // 个人观察只是截取可见范围以及以下的区域,所以先将滚动条置顶
    $(window).scrollTop(0); // jQuery 的方法
    document.body.scrollTop = 0; // IE的
    document.documentElement.scrollTop = 0; // 其他
    this.downloadResult(name)
  },

导出为PDF

1.将页面html转换成图片

npm install html2canvas --save

2.将图片生成pdf

npm install jspdf --save

3.在需要导出的页面引入

import html2canvas from 'html2canvas';
import JsPDF from 'jspdf'

在 methods 中添加方法

printOut(name) {
  let shareContent = document.body,//需要截图的包裹的(原生的)DOM 对象
   width = shareContent.clientWidth, //获取dom 宽度
   height = shareContent.clientHeight, //获取dom 高度
   canvas = document.createElement("canvas"), //创建一个canvas节点
   scale = 2; //定义任意放大倍数 支持小数
  canvas.width = width * scale; //定义canvas 宽度 * 缩放
  canvas.height = height * scale; //定义canvas高度 *缩放
  canvas.style.width = shareContent.clientWidth * scale + "px";
  canvas.style.height = shareContent.clientHeight * scale + "px";
  canvas.getContext("2d").scale(scale, scale); //获取context,设置scale
  let opts = {
   scale: scale, // 添加的scale 参数
   canvas: canvas, //自定义 canvas
   logging: false, //日志开关,便于查看html2canvas的内部执行流程
   width: width, //dom 原始宽度
   height: height,
   useCORS: true, // 【重要】开启跨域配置
  };

  html2Canvas(shareContent, opts).then(() => {
   var contentWidth = canvas.width;
   var contentHeight = canvas.height;
   //一页pdf显示html页面生成的canvas高度;
   var pageHeight = (contentWidth / 592.28) * 841.89;
   //未生成pdf的html页面高度
   var leftHeight = contentHeight;
   //页面偏移
   var position = 0;
   //a4纸的尺寸[595.28,841.89],html页面生成的canvas在pdf中图片的宽高
   var imgWidth = 595.28;
   var imgHeight = (592.28 / contentWidth) * contentHeight;
   var pageData = canvas.toDataURL("image/jpeg", 1.0);
   var 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 -= pageHeight;
    position -= 841.89;
    if (leftHeight > 0) {
    PDF.addPage();
    }
   }
   }
   PDF.save(name + ".pdf"); // 这里是导出的文件名
  });
  },

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持三水点靠木。

Javascript 相关文章推荐
JQuery下关于$.Ready()的分析
Dec 13 Javascript
javascript实现的基于金山词霸网络翻译的代码
Jan 15 Javascript
使用js写的一个简易的投票
Nov 27 Javascript
javascript替换已有元素replaceChild()使用介绍
Apr 03 Javascript
JavaScript学习笔记之ES6数组方法
Mar 25 Javascript
JS简单获取及显示当前时间的方法
Aug 03 Javascript
vue.js初学入门教程(2)
Nov 07 Javascript
详解Vue生命周期的示例
Mar 10 Javascript
jQuery扇形定时器插件pietimer使用方法详解
Jul 18 jQuery
Vue自定义toast组件的实例代码
Aug 15 Javascript
javascript 原型与原型链的理解及应用实例分析
Feb 10 Javascript
javascript实现支付宝滑块验证码效果
Jul 24 Javascript
基于Bootstrap和JQuery实现动态打开和关闭tab页的实例代码
Jun 10 #jQuery
发布订阅模式在vue中的实际运用实例详解
Jun 09 #Javascript
为vue项目自动设置请求状态的配置方法
Jun 09 #Javascript
解决vue单页面应用中动态修改title问题
Jun 09 #Javascript
Vue动态修改网页标题的方法及遇到问题
Jun 09 #Javascript
详解Node.js异步处理的各种写法
Jun 09 #Javascript
在mpvue框架中使用Vant WeappUI组件库的注意事项【推进】
Jun 09 #Javascript
You might like
PHP基于yii框架实现生成ICO图标
2015/11/13 PHP
PHP实现多级分类生成树的方法示例
2017/02/07 PHP
js展开闭合效果演示代码
2013/07/24 Javascript
浅析XMLHttpRequest的缓存问题
2013/12/13 Javascript
javasript实现密码的隐藏与显示
2015/05/08 Javascript
浅谈Web页面向后台提交数据的方式和选择
2016/09/23 Javascript
bootstrap日历插件datetimepicker使用方法
2016/12/14 Javascript
Javascript中的神器——Promise
2017/02/08 Javascript
easyui combogrid实现本地模糊搜索过滤多列
2017/05/13 Javascript
vue实现父子组件之间的通信以及兄弟组件的通信功能示例
2019/01/29 Javascript
JS数组方法slice()用法实例分析
2020/01/18 Javascript
在Django的视图中使用form对象的方法
2015/07/18 Python
Python3实现简单可学习的手写体识别(实例讲解)
2017/10/21 Python
Python numpy 常用函数总结
2017/12/07 Python
pygame游戏之旅 如何制作游戏障碍
2018/11/20 Python
python pygame实现五子棋小游戏
2020/10/26 Python
Python使用itchat模块实现群聊转发,自动回复功能示例
2019/08/26 Python
Python 网络编程之UDP发送接收数据功能示例【基于socket套接字】
2019/10/11 Python
python闭包、深浅拷贝、垃圾回收、with语句知识点汇总
2020/03/11 Python
pycharm全局搜索的具体步骤
2020/07/28 Python
CSS3动画:5种预载动画效果实例
2017/04/05 HTML / CSS
HTML5新增元素如何兼容旧浏览器有哪些方法
2014/05/09 HTML / CSS
canvas之自定义头像功能实现代码示例
2017/09/29 HTML / CSS
销售部主管岗位职责
2013/12/18 职场文书
国贸专业的职业规划书
2014/03/15 职场文书
优秀学生评语大全
2014/04/25 职场文书
信仰心得体会
2014/09/05 职场文书
我们的节日端午节活动总结
2015/02/11 职场文书
大学毕业晚会开场白
2015/05/29 职场文书
鲁滨孙漂流记读书笔记
2015/06/30 职场文书
苦儿流浪记读书笔记
2015/07/01 职场文书
2019年亲子运动会口号
2019/10/11 职场文书
python flask框架快速入门
2021/05/14 Python
手把手教你怎么用Python实现zip文件密码的破解
2021/05/27 Python
vue项目中的支付功能实现(微信支付和支付宝支付)
2022/02/18 Vue.js
Spring Boot DevTools 全局配置学习指南
2022/03/31 Java/Android