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 相关文章推荐
VBS通过WMI监视注册表变动的代码
Oct 27 Javascript
服务器端的JavaScript脚本 Node.js 使用入门
Mar 07 Javascript
一行代码告别document.getElementById
Jun 01 Javascript
基于jquery的图片幻灯展示源码
Jul 15 Javascript
JavaScript调用浏览器打印功能实例分析
Jul 17 Javascript
解决WordPress使用CDN后博文无法评论的错误
Dec 15 Javascript
jQuery扩展实现text提示还能输入多少字节的方法
Nov 28 Javascript
详解springmvc 接收json对象的两种方式
Dec 06 Javascript
jQuery滚动监听实现商城楼梯式导航效果
Mar 06 Javascript
jQuery实现文章图片弹出放大效果
Apr 06 jQuery
vue-cli如何引入bootstrap工具的方法
Oct 19 Javascript
微信小程序使用modal组件弹出对话框功能示例
Nov 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
从零开始学YII2框架(二)通过 Composer 安装扩展插件
2014/08/20 PHP
php关联数组快速排序的方法
2015/04/17 PHP
php微信开发之百度天气预报
2016/11/18 PHP
PHP异常类及异常处理操作实例详解
2018/12/19 PHP
div移动 输入框不能输入的问题
2009/11/19 Javascript
jquery 查找iframe父级页面元素的实现代码
2011/08/28 Javascript
将list转换为json失败的原因
2013/12/17 Javascript
javascript实现点击提交按钮后显示loading的方法
2015/07/03 Javascript
jQuery、zepto、js常用小技巧
2017/02/12 Javascript
vue快捷键与基础指令详解
2017/06/01 Javascript
Vue中定义全局变量与常量的各种方式详解
2017/08/23 Javascript
浅谈webpack devtool里的7种SourceMap模式
2019/01/14 Javascript
express框架下使用session的方法
2019/07/31 Javascript
[01:03:31]DOTA2上海特级锦标赛B组资格赛#1 Alliance VS Fnatic第二局
2016/02/26 DOTA
[55:25]2018DOTA2亚洲邀请赛3月29日 小组赛A组 VG VS OG
2018/03/30 DOTA
python实现比较两段文本不同之处的方法
2015/05/30 Python
python使用turtle绘制分形树
2018/06/22 Python
Django+JS 实现点击头像即可更改头像的方法示例
2018/12/26 Python
Python调用服务接口的实例
2019/01/03 Python
python实现杨氏矩阵查找
2019/03/02 Python
python logging模块的使用总结
2019/07/09 Python
python selenium 查找隐藏元素 自动播放视频功能
2019/07/24 Python
利用Python计算KS的实例详解
2020/03/03 Python
Django 自定义404 500等错误页面的实现
2020/03/08 Python
了解一下python内建模块collections
2020/09/07 Python
Python爬虫设置Cookie解决网站拦截并爬取蚂蚁短租的问题
2021/02/22 Python
韩国知名的家庭购物网站:CJmall
2016/08/01 全球购物
师德学习感言
2014/01/31 职场文书
2014年计生协会工作总结
2014/11/21 职场文书
2014年电信员工工作总结
2014/12/19 职场文书
社区活动总结
2015/02/04 职场文书
新员工入职感想
2015/08/07 职场文书
mysql数据库入门第一步之创建表
2021/05/14 MySQL
SQL基础的查询语句
2021/11/11 MySQL
Python必备技巧之函数的使用详解
2022/04/04 Python
Mysql表数据比较大情况下修改添加字段的方法实例
2022/06/28 MySQL