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 相关文章推荐
js 提交和设置表单的值
Dec 19 Javascript
JavaScript 弹出窗体点击按钮返回选择数据的实现
Apr 01 Javascript
jQuery实现id模糊查询的小例子
Mar 19 Javascript
angularJS提交表单(form)
Feb 09 Javascript
JavaScript iframe数据共享接口实现方法
Jan 06 Javascript
JS 拦截全局ajax请求实例解析
Nov 29 Javascript
Bootstrap模态框案例解析
Mar 05 Javascript
JavaScript实现各种排序的代码详解
Aug 28 Javascript
VUE引入第三方js包及调用方法讲解
Mar 01 Javascript
vue路由传参页面刷新参数丢失问题解决方案
Oct 08 Javascript
js实现AI五子棋人机大战
May 28 Javascript
JavaScript实现随机点名小程序
Oct 29 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
实用函数5
2007/11/08 PHP
phpmyadmin显示utf8_general_ci中文乱码的问题终级篇
2013/04/08 PHP
使用PHP实现Mysql读写分离
2013/06/28 PHP
PHP将二维数组某一个字段相同的数组合并起来的方法
2016/02/26 PHP
javascript中String类的subString()方法和slice()方法
2011/05/24 Javascript
js网页右下角提示框实例
2014/10/14 Javascript
JavaScript 浏览器对象模型BOM使用介绍
2015/04/13 Javascript
jquery if条件语句的写法
2016/05/19 Javascript
jQuery插件FusionCharts绘制2D环饼图效果示例【附demo源码】
2017/04/10 jQuery
使用Vue.js和Flask来构建一个单页的App的示例
2018/03/21 Javascript
vue-cli+iview项目打包上线之后图标不显示问题及解决方法
2019/10/16 Javascript
Python求两个文本文件以行为单位的交集、并集与差集的方法
2015/06/17 Python
Python解析树及树的遍历
2016/02/03 Python
分数霸榜! python助你微信跳一跳拿高分
2018/01/08 Python
Python用csv写入文件_消除空余行的方法
2018/07/06 Python
python3正则提取字符串里的中文实例
2019/01/31 Python
Python编写合并字典并实现敏感目录的小脚本
2019/02/26 Python
Python学习笔记之集合的概念和简单使用示例
2019/08/22 Python
python使用Word2Vec进行情感分析解析
2020/07/31 Python
Django数据统计功能count()的使用
2020/11/30 Python
css3 仿写阿里云水纹效果的示例代码
2018/02/10 HTML / CSS
详解CSS3中常用的样式【基本文本和字体样式】
2020/10/20 HTML / CSS
html5新增的属性和废除的属性简要概述
2013/02/20 HTML / CSS
英国时尚家具、家居饰品及礼品商店:Graham & Green
2016/09/15 全球购物
猎人靴英国官网:Hunter Boots
2017/02/02 全球购物
PHP中如何创建和修改数组
2012/05/02 面试题
装饰活动策划方案
2014/02/11 职场文书
初中学生评语大全
2014/04/24 职场文书
普通党员个人剖析材料
2014/10/08 职场文书
安全生产先进个人事迹材料
2014/12/30 职场文书
机关保密工作承诺书
2015/05/04 职场文书
学校教代会开幕词
2016/03/04 职场文书
Java各种比较对象的方式的对比总结
2021/06/20 Java/Android
「地球外少年少女」BD发售宣传CM公开
2022/03/21 日漫
python游戏开发Pygame框架
2022/04/22 Python
Pandas实现批量拆分与合并Excel的示例代码
2022/05/30 Python