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 相关文章推荐
加载 Javascript 最佳实践
Oct 30 Javascript
jquery高效反选具体实现
May 05 Javascript
JavaScript访问CSS属性的几种方式介绍
Jul 21 Javascript
jQuery插件制作之参数用法实例分析
Jun 01 Javascript
JS获取月份最后天数、最大天数与某日周数的方法
Dec 08 Javascript
基于jquery编写分页插件
Mar 07 Javascript
浅谈原生JS实现jQuery的animate()动画示例
Mar 08 Javascript
vue2.0 keep-alive最佳实践
Jul 06 Javascript
在vue中阻止浏览器后退的实例
Nov 06 Javascript
jquery更改元素属性attr()方法操作示例
May 22 jQuery
jquery实现加载更多&quot;转圈圈&quot;效果(示例代码)
Nov 09 jQuery
element-ui封装一个Table模板组件的示例
Jan 04 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中使用接口实现工厂设计模式的代码
2012/06/17 PHP
PHP 数组和字符串互相转换实现方法
2013/03/26 PHP
一漂亮的PHP图片验证码实例
2014/03/21 PHP
php使用gd2绘制基本图形示例(直线、圆、正方形)
2017/02/15 PHP
php session_decode函数用法讲解
2019/05/26 PHP
js 新浪的一个图片播放图片轮换效果代码
2008/07/15 Javascript
yepnope.js 异步加载资源文件
2011/09/08 Javascript
jquery命令汇总,方便使用jquery的朋友
2012/06/26 Javascript
javascript:FF/Chrome与IE动态加载元素的区别说明
2014/01/26 Javascript
JS简单操作select和dropdownlist实例
2014/11/26 Javascript
使用JavaScript制作一个简单的计数器的方法
2015/07/07 Javascript
jQuery实现Tab选项卡切换效果简单演示
2015/11/23 Javascript
javascript 注释代码的几种方法总结
2017/01/04 Javascript
详解Vue2.0配置mint-ui踩过的那些坑
2018/04/23 Javascript
js动态设置select下拉菜单的默认选中项实例
2018/08/21 Javascript
JS使用canvas中的measureText方法测量字体宽度示例
2019/02/02 Javascript
vue实现在进行增删改操作后刷新页面
2020/08/05 Javascript
[04:13]2018国际邀请赛典藏宝瓶Ⅱ饰品一览
2018/07/21 DOTA
[00:37]食人魔魔法师轮盘吉兆顺应全新至宝将拥有额外款式
2019/12/19 DOTA
Python实现一个简单的MySQL类
2015/01/07 Python
Python去除列表中重复元素的方法
2015/03/20 Python
详解Python编程中对Monkey Patch猴子补丁开发方式的运用
2016/05/27 Python
Flask框架实现给视图函数增加装饰器操作示例
2018/07/16 Python
python numpy数组的索引和切片的操作方法
2018/10/20 Python
pycharm重置设置,恢复默认设置的方法
2018/10/22 Python
elasticsearch python 查询的两种方法
2019/08/04 Python
使用Python来做一个屏幕录制工具的操作代码
2020/01/18 Python
简单了解Python多态与属性运行原理
2020/06/15 Python
CSS3的first-child选择器实战攻略
2016/04/28 HTML / CSS
如何在Canvas中添加事件的方法示例
2019/05/21 HTML / CSS
举例说明类变量和实例变量的区别
2016/06/30 面试题
师范毕业生自荐信
2013/10/17 职场文书
银行存款证明样本
2014/01/17 职场文书
酒吧创业计划书
2014/01/18 职场文书
销售团队获奖感言
2014/08/14 职场文书
2014年结对帮扶工作总结
2014/12/17 职场文书