vue创建全局方法、实现将某个页面以pdf的形式输出到本地
一、install自定义全局插件方法说明
export default {
install (Vue, options) {
//全局方法、属性
Vue.myGlobalMethod = function () {
...
}
//全局资源
Vue.directive('my-directive', {
bind (el, binding, vnode, oldVnode) {
...
}
...
})
//组件
Vue.mixin({
created: function () {
...
}
...
})
//实例方法
Vue.prototype.$myMethod = function (methodOptions) {
...
}
})
}
二、生成PDF所需组件安装
npm install html2canvas
npm install jspdf
三,创建js文件,这里创建pdf.js,复制以下代码进去
import html2Canvas from 'html2canvas'; import JsPDF from 'jspdf'; export default { install (Vue, options) {
//在需要的地方直接调用getPdf()使用 Vue.prototype.getPdf = function () { var title = this.pdfTitle; // 导出的pdf文件名 html2Canvas(document.querySelector(this.pdfSelector), { //导出的html元素 allowTaint: true, useCORS: 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 = 599.28 / contentWidth * contentHeight; let pageData = canvas.toDataURL('image/jpeg', 1.0); let 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(title + '.pdf'); }) } } }
四、在main.js里面配置
import Vue from 'vue' //修改成自己的路径(上一步创建的js文件路径) import htmlToPdf from '../static/utils/pdf' Vue.use(htmlToPdf)//全局pdf方法
五、在需要的位置进行调用
getPdf('#paper')为pdf.js里面定义的方法。
<template> <div class="paper"> <el-button @click="getPdf()" class="butfo" type="primary">保存为PDF</el-button> </div> </template> <script> data () { return { // 填入导出的pdf文件名和html元素 pdfTitle: '试卷1', pdfSelector: '#paper', } } </script>
然后点击生成PDF按钮就可以看到该页面下载到本地了