Vue 将页面导出成PDF文件

我在前端岗位上要实现个可视化图表页的PDF文件导出,在这里给大家分享下使用jsPDF和html2canvas包将Vue页面导出成PDF的方法。

1. 下载npm包

npm install html2canvas
npm install jspdf 

2. 创建插件.js文件

Vue-cli项目的话是在./utils文件夹下,我在这里使用的nuxt框架,所以是在./plugins文件夹下。

import html2Canvas from 'html2canvas';
import JsPDF from 'jspdf';

export default {
  install (Vue, options) {
    Vue.prototype.getPdf = function () {
      var title = this.pdfTitle;  // 导出的pdf文件名
      html2Canvas(document.querySelector(this.pdfSelector), { //导出的html元素
        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');
        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');
      })
    }
  }
}

上面的插件代码可以直接复制,然后在引用的Vue文件中填入自己的参数就可以了。

3. 修改引用页面

导出按钮调用getPdf方法,data填入参数。

<template>
  <div id="pdfPrint">
      	<!-- 调用getPdf方法 -->
        <el-button @click="getPdf('#pdfPrint')">保存为PDF</el-button>
  </div>
</template>

<script>
export default {
  data() {
    return {
      // 填入导出的pdf文件名和html元素
      pdfTitle: '因子评价报告',
      pdfSelector: '#pdfPrint',
    }
  },

大概就是这样啦,非常地简单,有什么问题可以在下方评论区提问~

猜你喜欢

转载自blog.csdn.net/weixin_41421986/article/details/108004579