Vue How to export a page as an PDF file

  • 2021-08-06 20:25:49
  • OfStack

This article example for everyone to share the Vue page exported to PDF file specific code, for your reference, the specific content is as follows

I in front-end position to achieve a visual chart page PDF file export, here to share the use of jsPDF and html2canvas package Vue page export into PDF method.

1. Download the npm package


npm install html2canvas
npm install jspdf

2. Create the plug-in. js file

The Vue-cli project is under the./utils folder, the nuxt framework I use here, so it is under the./plugins folder.


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

export default {
 install (Vue, options) {
  Vue.prototype.getPdf = function () {
   var title = this.pdfTitle; //  Exported pdf Filename 
   html2Canvas(document.querySelector(this.pdfSelector), { // Exported html Element 
    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');
   })
  }
 }
}

The above plug-in code can be copied directly, and then fill in your own parameters in the referenced Vue file.

3. Modify the reference page

The export button calls the getPdf method, and data fills in the parameters.


<template>
 <div id="pdfPrint">
    <!--  Call getPdf Method  -->
    <el-button @click="getPdf('#pdfPrint')"> Save as PDF</el-button>
 </div>
</template>

<script>
export default {
 data() {
  return {
   //  Fill in the exported pdf File name and html Element 
   pdfTitle: ' Factor evaluation report ',
   pdfSelector: '#pdfPrint',
  }
 },

That's probably it. It's very simple.


Related articles: