700字范文,内容丰富有趣,生活中的好帮手!
700字范文 > html2canvas + jspdf 实现 html导出pdf

html2canvas + jspdf 实现 html导出pdf

时间:2023-03-03 23:25:16

相关推荐

html2canvas + jspdf 实现 html导出pdf

html2canvas + jspdf 实现 html导出pdf

1、下载插件

npm install html2canvas jspdf --save

2、utils中创建htmlToPdf.js文件,代码:

// import {showFullScreenLoading,hideFullScreenLoading} from "@/utils/pageLoading.js";import html2Canvas from "html2canvas";import JsPDF from "jspdf";export default {install(Vue, options) {Vue.prototype.getPdf = function() {// showFullScreenLoading("portlet_portlets_pdf", "下载文件准备中...");var title = this.htmlTitle;html2Canvas(document.querySelector("#pdfDom"), {allowTaint: true}).then(function(canvas) {let contentWidth = canvas.width; //获取宽度let contentHeight = canvas.height; //获取高度let pageHeight = (contentWidth / 592.28) * 841.89; //A4纸的宽高let leftHeight = contentHeight;let position = 0; //偏移量let imgWidth = 595.28;let imgHeight = (592.28 / contentWidth) * contentHeight;let pageData = canvas.toDataURL("image/jpeg", 1.0); //把canvas通过base64转成图片数据let PDF = new JsPDF("", "pt", "a4"); // 三个参数 第一个参数(1 横向 p竖向) 第二个px单位大小 a4:pdf规格if (leftHeight < pageHeight) {//判断图片高度是否高于pdf高度PDF.addImage(pageData, "JPEG", 3, 20, imgWidth, imgHeight); // 0:距离左边0像素 20:距离顶部20像素} else {while (leftHeight > 0) {//判断是否到图片底部PDF.addImage(pageData, "JPEG", 0, position, imgWidth, imgHeight); //把图片放进pdf中leftHeight -= pageHeight;position -= 841.89;if (leftHeight > 0) {PDF.addPage(); //分页}}}PDF.save(title + ".pdf"); //导出的文件名setTimeout(() => {// hideFullScreenLoading();}, 400);});};}};

3、在main.js中引入定义好的方法,并注册

import htmlToPdf from '@/components/utils/htmlToPdf'Vue.use(htmlToPdf)

4、在要导出的页面中,点击时调用绑定在Vue原型上的getPdf方法,传入id

<div id="pdfDom"><div :model="pageData"><div>{{pageData.title}}</div></div></div><el-button type="primary" icon="el-icon-download" size="small" @click="getPdf('#pdfDom')">导出pdf</el-button>export default {data () {return {pageData:{title:'宝鹃,你知道吗,我觉得自己好累,从来没有这么累过,可是我知道当我早上7点睁开眼睛,我又要受人摆布,又要起床去打工,可是宝鹃,我真的觉得我已经精疲力尽,打不动工了'}htmlTitle: '导出PDF的文件名'}}}

缺点:

导出的pdf不够清晰

多页时会出现内容分割的情况

页面内容过宽的时候,生成的pdf内容会打印不全

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。