【Vue技巧】页面导出pdf

97 阅读1分钟

1、第一步:我们要添加两个模块

//第一个:将页面html转换成图片
npm install --save html2canvas
//第二个:将图片生成pdf
npm install jspdf --save

2、第二步: 定义全局函数…创建一个htmlToPdf.js文件在指定位置.我个人习惯放在('src/components/utils/htmlToPdf’)中,网上有挂载到Vue实例上的
htmlToPdf.js文件内容:

// 导出页面为PDF格式
import html2Canvas from 'html2canvas'
import JsPDF from 'jspdf'

export function getPdf(title, id) {
  let share = document.querySelector(`#${id}`)
  let width = share.clientWidth
  let height = share.clientHeight
  window.pageYOffset = 0;
  document.documentElement.scrollTop = 0
  document.body.scrollTop = 0;
  let canvas = document.createElement
  html2Canvas(share, {
    allowTaint: true
  }).then(function (canvas) {
    let contentWidth = canvas.width
    let contentHeight = canvas.height
    let pageHeight = contentWidth / 680 * 841.89
    let leftHeight = contentHeight
    let position = 0
    let imgWidth = 579
    let imgHeight = 680 / contentWidth * contentHeight
    console.log(imgWidth);
    console.log(imgHeight);
    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')
  }
  )
}

3、 在需要的导出的页面,调用我们在htmlToPdf.js定义的getPdf方法即可

import { getPdf } from "@/utils/htmlToPdf";

4、然后在.

    <el-button @click="exportPDF()">导出PDF

    exportPDF() {

      getPdf("页面导出PDF文件名", "pdfDom"); // pdfDom 是标签的id名

    },