位置: IT常识 - 正文

Vue页面生成PDF的方法(vue 页面生成pdf)

编辑:rootadmin
Vue页面生成PDF的方法

推荐整理分享Vue页面生成PDF的方法(vue 页面生成pdf),希望有所帮助,仅作参考,欢迎阅读内容。

文章相关热门搜索词:vue模板动态生成pdf,vue页面生成pdf的原理,vue pdf,vue3 pdf,vue 页面生成pdf,vue pdf,vue 展示pdf文件内容,vue页面生成pdf的原理,内容如对您有帮助,希望把文章链接给更多的朋友!

最近项目有个需求,将系统统计的数据生成分析报告,然后可以导出成PDF。

这种方法可以有两种,一种是直接调用打印,用户通过浏览器提供的打印页面手动选择导出PDF。当然这种方式兼容性差,且体验不好,显然不是我们想要的效果。

那么第二种方法的实现思路是什么呢?

首先生成报告页面,也就是常规页面; 然后将页面转换成图片( 用到的组件 html2canvas ); 最后将图片导出成PDF( 用到的组件 jspdf )。

安装依赖npm install --save html2canvas // 页面转图片npm install jspdf --save // 图片转pdf页面转图片

新建一个 index.vue 页面:

<template> <div ref="pdf"> 这是待转换的页面,点击 <button @click="handleExport">导出</button> 按钮,完成导出操作。 </div></template><script>import {downloadPDF} from "@/util/pdf.js" //工具方法,导出操作export default { name: "pdf", data() { return {}; }, methods: { handleExport(){ downloadPDF(this.$refs.pdf) } }};</script>

页面很简单,一段话加上一个导出按钮。整个页面被设置别名 (ref=“pdf”),导出的时候通过别名导出整个页面。

按钮点击事件中调用了一个工具方法 downloadPDF(),来自于工具类 pdf.js:

import html2canvas from "html2canvas";export const downloadPDF = page => { html2canvas(page).then(function(canvas) { page.appendChild(canvas); });};Vue页面生成PDF的方法(vue 页面生成pdf)

也很简单,首先引入了 html2canvas,定义downloadPDF方法,接受一个参数就是要导出的内容,可以使用id获取,也可以使用 ref 。

运行结果:

当我们点击导出按钮后,在现有的页面增加了一行相同的内容。通过元素检查器可以看到增加的这行内容实际是一个 canvas 图像,里面的按钮已经不可以操作了。

这样,页面转换图片的过程就完成了。

图片转PDF

首先给index.vue改造一下,为了让我们导出的pdf好看一点,使用el-table做个表格,其它的导出逻辑不变:

<template> <div ref="pdf"> <el-table :data="tableData" style="width: 700px"> <el-table-column prop="date" label="时间" width="180"> </el-table-column> <el-table-column prop="name" label="姓名" width="180"> </el-table-column> <el-table-column prop="address" label="对我说"> </el-table-column> </el-table> <button @click="handleExport">导出</button> </div></template><script>import {downloadPDF} from "@/util/pdf.js" //工具方法,导出操作export default { name: "pdf", data() { return { tableData: [{ date: '昨天', name: '刘德华', address: '你好帅' }, { date: '今天', name: '郭富城', address: '你最帅' }, { date: '明天', name: '张学友', address: '你贼帅' }, { date: '每天', name: '黎明', address: '我没你帅' }] }; }, methods: { handleExport(){ downloadPDF(this.$refs.pdf) } }};</script>

效果图: 然后改造一下pdf.js,增加上pdf转换逻辑

import html2canvas from "html2canvas";import jsPDF from "jspdf";export const downloadPDF = page => { html2canvas(page).then(function(canvas) { canvas2PDF(canvas); });};const canvas2PDF = canvas => { let contentWidth = canvas.width; let contentHeight = canvas.height; let imgHeight = contentHeight; let imgWidth = contentWidth; // 第一个参数: l:横向 p:纵向 // 第二个参数:测量单位("pt","mm", "cm", "m", "in" or "px") let pdf = new jsPDF("l", "pt"); pdf.addImage( canvas.toDataURL("image/jpeg", 1.0), "JPEG", 0, 0, imgWidth, imgHeight ); pdf.save("导出.pdf");};

canvas2PDF 方法中创建了jsPDF的实例,然后添加上一步生成的图片,最后保存导出pdf文件。

导出的文件效果:

A4打印适配

因为部分需求有需要生成的页面使用A4纸打印,那么pdf生成时的宽高尺寸就不能像上面一样设定。需要按照A4纸的尺寸比例调整(其它打印需求同理,使用对应纸张比例即可)

那么改造一下 pdf.js

import html2canvas from "html2canvas";import jsPDF from "jspdf";export const downloadPDF = page => { html2canvas(page).then(function(canvas) { canvas2PDF(canvas); });};const canvas2PDF = canvas => { let contentWidth = canvas.width; let contentHeight = canvas.height; //a4纸的尺寸[595.28,841.89],html页面生成的canvas在pdf中图片的宽高 let imgWidth = 595.28; let imgHeight = 592.28/contentWidth * contentHeight; // 第一个参数: l:横向 p:纵向 // 第二个参数:测量单位("pt","mm", "cm", "m", "in" or "px") let pdf = new jsPDF("p", "pt"); pdf.addImage( canvas.toDataURL("image/jpeg", 1.0), "JPEG", 0, 0, imgWidth, imgHeight ); pdf.save("导出.pdf");};

这里面将 imgWidth 和 imgHeight 按照A4纸比例调整后,导出的pdf就可以正常比例打印了。

本文链接地址:https://www.jiuchutong.com/zhishi/284160.html 转载请保留说明!

上一篇:路由器登录地址如何查看?查看路由器登陆地址方法(华硕路由器登录地址)

下一篇:十分钟,带你了解 Vue3 的新写法(十分钟带你了解阿氏圆)

  • 电子商务网站推广用什么方法,网站推广的10个方法(电子商务网站推广论文)

    电子商务网站推广用什么方法,网站推广的10个方法(电子商务网站推广论文)

  • 最简单的赚钱方法:注册网赚(最简单的赚钱方式)

    最简单的赚钱方法:注册网赚(最简单的赚钱方式)

  • 将轻视转化成动力(将轻视转化成动作的方法)

    将轻视转化成动力(将轻视转化成动作的方法)

  • nokia c3发布(nokia t7)(nokia c3配置)

    nokia c3发布(nokia t7)(nokia c3配置)

  • 拼多多安全设置在哪里(拼多多怎么设置安全)

    拼多多安全设置在哪里(拼多多怎么设置安全)

  • 手机应用清除数据后果(手机应用清除数据显示灰色)

    手机应用清除数据后果(手机应用清除数据显示灰色)

  • 华为双空间怎么设置(华为双空间怎么关闭)

    华为双空间怎么设置(华为双空间怎么关闭)

  • 一个手机可以登两个抖音吗(一个手机可以登两个qq吗)

    一个手机可以登两个抖音吗(一个手机可以登两个qq吗)

  • 腾讯会议检测到回声(腾讯会议检测到音频设备无响应)

    腾讯会议检测到回声(腾讯会议检测到音频设备无响应)

  • 没有鼠标怎么在电脑上删除(没有鼠标怎么在桌面新建文件夹)

    没有鼠标怎么在电脑上删除(没有鼠标怎么在桌面新建文件夹)

  • 微信封面的图片怎么保存下来(微信封面的图片能保存吗)

    微信封面的图片怎么保存下来(微信封面的图片能保存吗)

  • 怎么将sheet1的内容复制到sheet2(怎么把sheet1和sheet2放在一起)

    怎么将sheet1的内容复制到sheet2(怎么把sheet1和sheet2放在一起)

  • oppoa73截屏在哪(oppoa73截图在哪里)

    oppoa73截屏在哪(oppoa73截图在哪里)

  • 微信删人只能一个一个删吗(微信只能删除好友)

    微信删人只能一个一个删吗(微信只能删除好友)

  • dcs什么意思(dcs是什么)

    dcs什么意思(dcs是什么)

  • 怎样在手机上看电视节目(怎样在手机上看自己的车停哪了)

    怎样在手机上看电视节目(怎样在手机上看自己的车停哪了)

  • 华为mate30怎么调节音量(华为mate30怎么调拍照效果最好)

    华为mate30怎么调节音量(华为mate30怎么调拍照效果最好)

  • 怎么通过qq音乐找qq号(怎么通过QQ音乐找到QQ号)

    怎么通过qq音乐找qq号(怎么通过QQ音乐找到QQ号)

  • 快手私聊删了怎么恢复(快手私聊删除后怎么能找到?)

    快手私聊删了怎么恢复(快手私聊删除后怎么能找到?)

  • graul00是什么型号(gra_ul00华为是什么型号)

    graul00是什么型号(gra_ul00华为是什么型号)

  • 微信如何在注册一个手机号(微信如何在注册时不需要绑定银行卡)

    微信如何在注册一个手机号(微信如何在注册时不需要绑定银行卡)

  • vivox27充电器型号(vivox27原装充电器型号)

    vivox27充电器型号(vivox27原装充电器型号)

  • 一加是什么牌子(一加是什么牌子和oppo是啥关系)

    一加是什么牌子(一加是什么牌子和oppo是啥关系)

  • 小米mix3支持多少瓦快充(小米mix3支持多少瓦无线充电)

    小米mix3支持多少瓦快充(小米mix3支持多少瓦无线充电)

  • 税务基本任务和稽查范围?
  • 青岛山公寓二手房出售
  • 一般税收协定是多少
  • 汇算清缴申报的时候资产总额带不出来
  • 工资用现金发放有风险吗?
  • 个人所得税是全部收入吗
  • 已认证专票有误怎么回事
  • 对公的etc怎么绑定怎么充值
  • 多余的实收资本可以转到其他应付款吗
  • 建筑装饰行业会计分录
  • 合伙企业个人所得税怎么申报
  • 阿里巴巴新任董事长简历
  • 一年内到期的非流动负债包括哪些科目
  • 存货跌价卖出需要进项转出吗
  • 公司社保退回会退钱吗
  • 劳动保护费在企业怎么交
  • 税款滞纳金怎么入账
  • 购物卡开预付卡有风险吗
  • 民办幼儿园需要给老师交五险一金吗
  • 劳务分包发票税率是多少2020
  • 购销合同印花税计税依据
  • 合同到期退房子,租金退吗
  • 土地契税及印花税缴纳规定
  • 年终奖金计税方式区别
  • 暂估商品入库跨年收到发票怎么做账?
  • 小规模企业低值易耗品摊销方法
  • 汽车展厅布置需要什么
  • 验资报告需要什么材料
  • 广告公司怎么结转成本
  • 小规模纳税人增值税3%减按1%
  • 王者荣耀中如何隐藏贵族标志
  • 笔记本低电量提示
  • 收到上年度企业所得税退税款
  • 职工薪酬核算的内容
  • 哪里有办各种真实有效的证的
  • 增值税出口退税为什么不属于政府补助
  • 工资税后补扣是什么意思
  • 鸿蒙系统快捷键
  • php文件流
  • 新成立的公司需要报残保金吗
  • 下载的压缩文件打不开
  • 如何在Mac上更改我的Apple ID
  • 固定资产前期购买的后期入账怎么入?
  • 稳岗补贴需要缴纳什么税
  • 小额贷款企业收利息吗
  • php框架yii
  • 先开票后发货合法吗
  • vue项目首屏加载过慢
  • 投资公司取得的发票
  • 伪类的常见类型
  • 如何补缴以前年度的税
  • 去年的财务报表网上更正申报
  • 营业外支出增加记借方还是贷方
  • 差旅费补助无发票的文件依据
  • 小规模纳税人专票开1%还是3%
  • 企业年金个税怎么计算
  • 车辆理赔款如何入账
  • 实收资本可以大过注册资本吗
  • mysql中的ifnull函数
  • freebsd默认账户密码
  • win8怎么装驱动
  • ipssvc.exe - ipssvc是什么进程 有什么作用
  • 电脑中毒蓝屏了怎么办修复
  • windows桌面右下角图标不显示
  • win10 ug
  • linux内核文件夹
  • 游戏unity报错
  • jquery获取数据
  • shell脚本 -ne 0
  • js调用css动画
  • 英特尔在哪打开
  • unity的spine动画切换
  • unity开发项目
  • 基于javascript的毕业设计
  • 公职律师
  • 电子税务局获取验证码异常
  • 现在哪个行业的税负很重了
  • 山东省地方税务局公告2018年第6号
  • 国税局发票打印软件下载
  • 增+6=多少
  • 免责声明:网站部分图片文字素材来源于网络,如有侵权,请及时告知,我们会第一时间删除,谢谢! 邮箱:opceo@qq.com

    鄂ICP备2023003026号

    网站地图: 企业信息 工商信息 财税知识 网络常识 编程技术

    友情链接: 武汉网站建设