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按钮就可以看到该页面下载到本地了

 

posted @ 2021-09-27 16:41  蒂雪凌星  阅读(323)  评论(0编辑  收藏  举报
Live2D