问答文章1 问答文章501 问答文章1001 问答文章1501 问答文章2001 问答文章2501 问答文章3001 问答文章3501 问答文章4001 问答文章4501 问答文章5001 问答文章5501 问答文章6001 问答文章6501 问答文章7001 问答文章7501 问答文章8001 问答文章8501 问答文章9001 问答文章9501

Vue中前端实现生成PDF并下载

发布网友 发布时间:2024-10-01 02:16

我来回答

1个回答

热心网友 时间:2024-10-14 08:36

思路:通过html2canvas将HTML页面转换成图片,然后再通过jspdf将图片的base64生成为pdf文件。

1.安装及引入//将页面html转换成图片npminstallhtml2canvas--save//将图片生成pdfnpminstalljspdf--save

在项目主文件main.js中引入定义好的实现方法并注册

importhtmlToPdffrom'@/utils/htmlToPdf';//使用Vue.use()方法就会调用工具方法中的install方法Vue.use(htmlToPdf);

传送门:Vue中Vue.use()原理及使用

2.封装导出pdf文件方法配置详解letpdf=newjsPDF('p','pt',[pdfX,pdfY]);第一个参数:l:横向p:纵向第二个参数:测量单位("pt","mm","cm","m","in"or"px");第三个参数:可以是下面格式,默认为“a4”。如需自定义格式,只需将大小作为数字数组传递,如:[592.28,841.89];a0-a10b0-b10c0-c10dllettergovernment-letterlegaljunior-legalledgertabloidcredit-card

pdf.addPage()在PDF文档中添加新页面,默认a4。

参数如下:

pdf.addImage()将图像添加到PDF。参数如下:

删除某页pdf

lettargetPage=pdf.internal.getNumberOfPages();//获取总页pdf.deletePage(targetPage);//删除目标页

保存pdf文档

pdf.save(`测试.pdf`);封装导出pdf文件方法(utils/htmlToPdf.js)//导出页面为PDF格式importhtml2Canvasfrom'html2canvas'importJsPDFfrom'jspdf'exportdefault{install(Vue,options){Vue.prototype.getPdf=function(){//当下载pdf时,若不在页面顶部会造成PDF样式不对,所以先回到页面顶部再下载lettop=document.getElementById('pdfDom');if(top!=null){top.scrollIntoView();top=null;}lettitle=this.exportPDFtitle;html2Canvas(document.querySelector('#pdfDom'),{allowTaint:true}).then(function(canvas){//获取canvas画布的宽高letcontentWidth=canvas.width;letcontentHeight=canvas.height;//一页pdf显示html页面生成的canvas高度;letpageHeight=contentWidth/841.89*592.28;//未生成pdf的html页面高度letleftHeight=contentHeight;//页面偏移letposition=0;//html页面生成的canvas在pdf中图片的宽高(本例为:横向a4纸[841.89,592.28],纵向需调换尺寸)letimgWidth=841.89;letimgHeight=841.89/contentWidth*contentHeight;letpageData=canvas.toDataURL('image/jpeg',1.0);letPDF=newJsPDF('l','pt','a4');//两个高度需要区分:一个是html页面的实际高度,和生成pdf的页面高度//当内容未超过pdf一页显示的范围,无需分页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-=592.28;//避免添加空白页if(leftHeight>0){PDF.addPage();}}}PDF.save(title+'.pdf')})}}}相关组件中应用<template><divclass="wrap"><divid="pdfDom"style="padding:10px;"><el-table:data="tableData"border><el-table-columnprop="date"label="日期"width="250"></el-table-column><el-table-columnprop="name"label="姓名"width="250"></el-table-column><el-table-columnprop="address"label="地址"></el-table-column></el-table></div><buttontype="button"style="margin-top:20px;"@click="btnClick">导出PDF</button></div></template><script>exportdefault{data(){return{exportPDFtitle:"页面导出PDF文件名",tableData:[{date:'2016-05-06',name:'王小虎',address:'重庆市九龙坡区火炬大道'},{date:'2016-05-07',name:'王小虎',address:'重庆市九龙坡区火炬大道'},{date:'2016-05-03',name:'王小虎',address:'上海市普陀区金沙江路1518弄'},{date:'2016-05-02',name:'王小虎',address:'上海市普陀区金沙江路1518弄'},{date:'2016-05-04',name:'王小虎',address:'上海市普陀区金沙江路1518弄'},{date:'2016-05-01',name:'王小虎',address:'上海市普陀区金沙江路1518弄'},{date:'2016-05-08',name:'王小虎',address:'上海市普陀区金沙江路1518弄'},{date:'2016-05-06',name:'王小虎',address:'上海市普陀区金沙江路1518弄'},{date:'2016-05-06',name:'王小虎',address:'上海市普陀区金沙江路1518弄'},{date:'2016-05-07',name:'王小虎',address:'上海市普陀区金沙江路1518弄'},{date:'2016-05-01',name:'王小虎',address:'上海市普陀区金沙江路1518弄'},{date:'2016-05-08',name:'王小虎',address:'上海市普陀区金沙江路1518弄'},{date:'2016-05-06',name:'王小虎',address:'上海市普陀区金沙江路1518弄'},{date:'2016-05-07',name:'王小虎',address:'上海市普陀区金沙江路1518弄'},{date:'2016-05-06',name:'王小虎',address:'南京市江宁区将军大道'},{date:'2016-05-07',name:'王小虎',address:'南京市江宁区将军大道'},,{date:'2016-05-04',name:'王小虎',address:'上海市普陀区金沙江路1518弄'},{date:'2016-05-01',name:'王小虎',address:'上海市普陀区金沙江路1518弄'},{date:'2016-05-08',name:'王小虎',address:'上海市普陀区金沙江路1518弄'},{date:'2016-05-06',name:'王小虎',address:'上海市普陀区金沙江路1518弄'},{date:'2016-05-07',name:'王小虎',address:'上海市普陀区金沙江路1518弄'},{date:'2016-05-01',name:'王小虎',address:'上海市普陀区金沙江路1518弄'},{date:'2016-05-08',name:'王小虎',address:'上海市普陀区金沙江路1518弄'},{date:'2016-05-06',name:'王小虎',address:'上海市普陀区金沙江路1518弄'},{date:'2016-05-08',name:'王小虎',address:'武汉市洪山区文化大道'},{date:'2016-05-06',name:'王小虎',address:'武汉市洪山区文化大道'},{date:'2016-05-07',name:'王小虎',address:'武汉市洪山区文化大道'},{date:'2016-05-06',name:'王小虎',address:'南京市江宁区将军大道'},{date:'2016-05-07',name:'王小虎',address:'武汉市洪山区文化大道'},]}},methods:{btnClick(){this.$nextTick(()=>{this.getPdf();})},},}</script>效果待优化部分

分页时,页面内容被截断(欢迎留言讨论交流);

不同内容,另起一页开始;思路:计算超出内容,占最后一页的高度(设定间距=页面高度-超出部分高度)。

声明声明:本网页内容为用户发布,旨在传播知识,不代表本网认同其观点,若有侵权等问题请及时与本网联系,我们将在第一时间删除处理。E-MAIL:11247931@qq.com
西班牙十大足球场 西甲球场大小排行 西班牙著名球场盘点 ...不仅芳香怡人,还能让人清凉一夏,都有哪些花呢? 天津工业大学新校区建行卡的开户行及地址 我在天津工业大学新校区办的卡丢了现在办挂失单找不到开户行,有谁知道... 天津工业大学新校区附近哪里有光大银行 天津工业大学:学校附近的银行都在哪里? 天津工业大学 缴费一定要用工行的卡吗 鼓励一个一直都不顺利的人用哪些词或成语 陶行知幼儿教育思想内容简介 鼻子被撞出血了怎么办 各位学霸,求描写动物(不是带有动物名称)的四字词语:'(谢谢啦!!! 从广州回来的人还需要隔离吗 今天离开广州的人要不要核酸检测证明 dnf手游vip要多少钱介绍_dnf手游vip要多少钱是什么 急!!!外国代表处外籍代表Z签证和就业证 中国驻外使馆能签发中国公民普通护照样本吗,与国内签发的什么区别 请问java中包和子包的名字都是完全小写字母吗? ...到支付宝输入口令卡密码之后的网银登录密码是什么密码啊?急用!_百 ... 农行网银充值支付宝的支付密码是什么?不是K宝密码 水轮发电机风罩在哪个位置 酷狗付费的歌曲有哪些 梦见好朋友的脸整整齐齐缝着线,她说她的脸被切割下一层放在蒸笼的最上边... ...又看见不知道是什么花正在开放 很漂亮 是什么意思 app文件是什么,能删除吗? 怎么寄东西到日本啊,急? 3qc视频探视充值是什么意思 什么是中央企业 0pp080o7智能手机多少钱 密封圈种类 ...听说眉心是天目的位置,不知道我这个梦有什么说道吗。 密封圈有哪些种类 学霸们,猫的成语~ Vue项目pdf(base64)转图片 小学五年级上册 明天就要交作业啦,拜托各位学霸。填的要四个字,一定... 写成语:以“书”开头的,以“就”开头的 各位学霸,救人一命胜造七级... vue3如何实现导出png和pdf功能? 契税的纳税人范围包括哪些? 人民币从发行开始到现在,一共有多少种,一套到五套都齐了,有发行后改版... 央行发行第几套人民币了 12生肖中欲钱买死人的动物是什么? 刚上高速感觉车子很轻快,开起来也很顺畅,可是高速上长时间行驶几个小时... 梦见自己的女儿给我寄了一封信,打开一看是一块手表签收的人还要我的... 樟树能卖多少钱 违法 请问九游转移号安全吗?容易被找回吗? 微信截图的时候怎么加红色框框线? 蛀牙洞里长息肉怎么办 牙窟窿里面长肉怎么办 牙齿里面长了一颗肉坨怎么回事 牙洞里面长肉球怎么办 支付宝子账户怎么开通?要哪些资料? 如何创建和使用支付宝分身?