Vue如何实现导出页面为PDF
时间:2022-07-26
本文章向大家介绍Vue如何实现导出页面为PDF,主要内容包括其使用实例、应用技巧、基本知识点总结和需要注意事项,具有一定的参考价值,需要的朋友可以参考一下。
导语 前两天接到一个需求,就是将Vue编写的页面导出成一个PDF的页面,在网上找了很久找到了如下的解决方案
第一步
首先安装如下的两个插件
import html2Canvas from 'html2canvas'
import JsPDF from 'jspdf'
安装完插件之后,使用如下的方式进行导入操作。
第二步
导入完成之后,开始编写需要进行操作的Vue页面,如下,当然其中页面只是为了参考,读者可以通过自己编写的页面来进行测试
<template>
<div id="gz_app" class="app-container">
<img id="gz" src="@/assets/gz/gz1.png" v-drag >
<el-form>
<el-form-item>
<el-input>工会管理办公室</el-input>
</el-form-item>
</el-form>
<button type="button" class="btn btn-primary" v-on:click="getPdf()">导出PDF</button>
</div>
</template>
<style>
#app{
/*width: 1200px;*/
/*height: 800px;*/
/*position: relative;*/
/*border: 1px red solid;*/
}
#gz{
position: relative; /*定位*/
top: 10px;
left: 10px;
width: 200px;
height: 200px;
cursor: pointer;
}
</style>
<script>
export default {
name: 'gz',
data () {
return {
htmlTitle: '页面导出PDF文件名'
}
},
directives: {
drag: {
// 指令的定义
bind: function (el) {
let odiv = el; //获取当前元素
odiv.onmousedown = () => {
//算出鼠标相对元素的位置
// let disX = e.clientX; //- odiv.offsetLeft;
// let disY = e.clientY; //- odiv.offsetTop;
document.onmousemove = (e)=>{
//用鼠标的位置减去鼠标相对元素的位置,得到元素的位置
let left = e.clientX-300 /*- disX*/;
let top = e.clientY-300 /*- disY*/;
//绑定元素位置到positionX和positionY上面
//this.positionX = top;
// this.positionY = left;
//移动当前元素
odiv.style.left = left + 'px';
odiv.style.top = top + 'px';
};
document.onmouseup = () => {
document.onmousemove = null;
document.onmouseup = null;
};
};
}
}
}
}
</script>
<style>
#gz {
font-family: Avenir, Helvetica, Arial, sans-serif;
-webkit-font-smoothing: antialiased;
-moz-osx-font-smoothing: grayscale;
text-align: center;
color: #2c3e50;
margin-top: 60px;
}
</style>
第三步
编写完成之后,开始使用两个插件进行导出操作。
// 导出页面为PDF格式
import html2Canvas from 'html2canvas'
import JsPDF from 'jspdf'
export default {
install (Vue, options) {
Vue.prototype.getPdf = function () {
var title = this.htmlTitle
html2Canvas(document.querySelector('#gz_app'), {
allowTaint: true
}).then(function (canvas) {
let contentWidth = canvas.width
let contentHeight = canvas.height
let pageHeight = contentWidth / 592.28 * 841.89
let leftHeight = contentHeight
let position = 0
let imgWidth = 595.28
let imgHeight = 592.28 / contentWidth * contentHeight
let pageData = canvas.toDataURL('image/jpeg', 1.0)
let PDF = new JsPDF('', 'pt', 'a4')
console.log(contentWidth)
console.log(contentHeight)
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(title + '.pdf')
}
)
}
}
}
第四步
在main.js 中添加如下的一段代码,这样可以全局进行使用,其中路径可以自己指定
import htmlToPdf from '@/components/utils/htmlToPdf'
Vue.use(htmlToPdf)
- JavaScript 教程
- JavaScript 编辑工具
- JavaScript 与HTML
- JavaScript 与Java
- JavaScript 数据结构
- JavaScript 基本数据类型
- JavaScript 特殊数据类型
- JavaScript 运算符
- JavaScript typeof 运算符
- JavaScript 表达式
- JavaScript 类型转换
- JavaScript 基本语法
- JavaScript 注释
- Javascript 基本处理流程
- Javascript 选择结构
- Javascript if 语句
- Javascript if 语句的嵌套
- Javascript switch 语句
- Javascript 循环结构
- Javascript 循环结构实例
- Javascript 跳转语句
- Javascript 控制语句总结
- Javascript 函数介绍
- Javascript 函数的定义
- Javascript 函数调用
- Javascript 几种特殊的函数
- JavaScript 内置函数简介
- Javascript eval() 函数
- Javascript isFinite() 函数
- Javascript isNaN() 函数
- parseInt() 与 parseFloat()
- escape() 与 unescape()
- Javascript 字符串介绍
- Javascript length属性
- javascript 字符串函数
- Javascript 日期对象简介
- Javascript 日期对象用途
- Date 对象属性和方法
- Javascript 数组是什么
- Javascript 创建数组
- Javascript 数组赋值与取值
- Javascript 数组属性和方法
- spring之如何在web应用中使用?
- 【猫狗数据集】使用预训练的resnet18模型
- django-URL应用命名空间(十)
- 【colab pytorch】模型权重初始化
- 【colab pytorch】提取模型中的某一层
- django-URL实例命名空间(十一)
- 【colab pytorch】数据预处理
- django-URL默认参数传递
- springmvc之自定义视图
- 【colab pytorch】训练和测试常用模板代码
- django-VIews之HttpResponse(一)
- django-Views之request(二)
- django-Views之常见的几种错误视图代码(三)
- django-Views之装饰器(四)
- django-Views之使用视图渲染模板(五)