位置: 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 的新写法(十分钟带你了解阿氏圆)

  • 如何关闭健康宝通勤(如何关闭健康宝定位)

    如何关闭健康宝通勤(如何关闭健康宝定位)

  • 候补订单显示候补人数较少(候补订单显示候补人数较少能兑换上么)

    候补订单显示候补人数较少(候补订单显示候补人数较少能兑换上么)

  • 手机为什么听不到声音了(手机为什么听不见微信来电)

    手机为什么听不到声音了(手机为什么听不见微信来电)

  • bilibil查看已删除视频(怎么看bilibili被删除的视频)

    bilibil查看已删除视频(怎么看bilibili被删除的视频)

  • vivox50有微云台吗(vivox50pro的微云台)

    vivox50有微云台吗(vivox50pro的微云台)

  • 苹果手机后屏碎了保修吗(苹果手机后屏碎了维修费用)

    苹果手机后屏碎了保修吗(苹果手机后屏碎了维修费用)

  • 存储容量的单位(在计算机中什么不是度量存储容量的单位)

    存储容量的单位(在计算机中什么不是度量存储容量的单位)

  • qq删除好友再加回来聊天记录还在吗(QQ删除好友再加回来需要验证吗)

    qq删除好友再加回来聊天记录还在吗(QQ删除好友再加回来需要验证吗)

  • wan是什么网(丸是什么网络用语)

    wan是什么网(丸是什么网络用语)

  • iPad怎么开机(平板ipad怎么开机)

    iPad怎么开机(平板ipad怎么开机)

  • 手机微信显示操作频率过快请稍后再试(手机微信显示操作频繁怎么解除)

    手机微信显示操作频率过快请稍后再试(手机微信显示操作频繁怎么解除)

  • 咸鱼闲置转卖怎么开通(闲鱼买东西转卖)

    咸鱼闲置转卖怎么开通(闲鱼买东西转卖)

  • 小米cc9支持27快充吗(小米cc9支持快充多少w)

    小米cc9支持27快充吗(小米cc9支持快充多少w)

  • word怎么弄目录(word怎么弄目录标题)

    word怎么弄目录(word怎么弄目录标题)

  • 抖音里发的作品怎么删除(抖音里发的作品怎么保存到相册)

    抖音里发的作品怎么删除(抖音里发的作品怎么保存到相册)

  • 天猫的私房红包怎么用(天猫的私房红包在哪里)

    天猫的私房红包怎么用(天猫的私房红包在哪里)

  • 荣耀play怎么没有指纹(荣耀play怎么没有最大电池容量)

    荣耀play怎么没有指纹(荣耀play怎么没有最大电池容量)

  • 微博视频缓存在哪个文件夹(微博视频缓存在华为手机哪个位置)

    微博视频缓存在哪个文件夹(微博视频缓存在华为手机哪个位置)

  • 1TB手机都有哪些(16g+1tb手机都有哪些)

    1TB手机都有哪些(16g+1tb手机都有哪些)

  • 苹果x为什么下载不了网易云(苹果14怎么看是不是国行)

    苹果x为什么下载不了网易云(苹果14怎么看是不是国行)

  • 分享口令已生成是什么意思(分享口令已生成怎么粘贴在微信)

    分享口令已生成是什么意思(分享口令已生成怎么粘贴在微信)

  • iphone x尺寸(iphonex尺寸和哪个一样)

    iphone x尺寸(iphonex尺寸和哪个一样)

  • pr怎样制作抖音视频(pr怎么制作抖音视频)

    pr怎样制作抖音视频(pr怎么制作抖音视频)

  • 苹果8plus怎么设置微信锁(苹果8plus怎么设置微信加密锁)

    苹果8plus怎么设置微信锁(苹果8plus怎么设置微信加密锁)

  • 一号店如何分享商品(一号店配送方式)

    一号店如何分享商品(一号店配送方式)

  • 机器学习中的数学原理——过拟合、正则化与惩罚函数

    机器学习中的数学原理——过拟合、正则化与惩罚函数

  • 税务师补报名时间可以交费吗
  • 外管证是在当地办理还是在外地办理
  • 劳务费用 税率
  • 印花税需要计提吗?怎么做会计分录
  • 在外地设立分公司如何办理
  • 三证合一后税务登记办理流程
  • 小规模纳税人如何计算增值税应纳税额
  • 接受土地使用权作为投资属于什么凭证
  • 收到单位预交卖材料款如何做会计分录?
  • 货款尚未收到用什么记账凭证
  • 小规模纳税人代理记账一年费用
  • 法人给公司基本户打款
  • 固定资产抵扣的税率
  • 补缴的公积金可以取出来吗
  • 销项税月底还是年底结0
  • 收料单的会计分录怎么做
  • 存货的入账价值怎么计算
  • 免抵退免抵额何时申报附加税?
  • 仓库的租赁费
  • 水土保持补偿费是一次性征收吗
  • 公司网银付款和付款区别
  • 往公户存钱怎么存最划算
  • qclean.exe - qclean是什么进程 有什么用
  • php的file函数
  • 其他应付款和其他应付款对冲
  • 原材料的运费计入什么科目
  • 企业的存货采用计划成本核算,某年年末,结
  • 工程复工程序是什么
  • 增值税流转税是什么意思
  • 无偿接收股权
  • 美国大提顿国家公园
  • 深度学习实战10-数学公式识别-将图片转换为Latex(img2Latex)
  • 邓弗里斯什么水平
  • yolov5map
  • deepsort 跟踪
  • php 接口规范
  • php自定义函数格式是什么
  • 小汽车的消费税税率按照气缸容量实行差别
  • 试生产期间发生事故后重新
  • 帝国cms视频教程
  • 累计销售额怎么算
  • 企业法人个人贷款哪里好贷
  • 个税哪种申报不用交个税的
  • 发票上盖成财务章了怎么办
  • 固定资产变卖怎么做账务处理
  • 印花税减半征收优惠政策2021
  • 非税收入票据存根的保存期限一般为多少年
  • 计提个税和缴纳个税金额不符的原因
  • 营业利润净利润利润总额的区别
  • 损益类科目如何记忆
  • 定金帐务处理
  • 计提工资时个税怎么处理
  • 销售方开红字发票需要什么信息
  • 电梯广告租赁属于什么服务
  • 购入工程物资支付的增值税应计入
  • sqlserver向表中添加数据用什么命令
  • win2000注册表
  • windows2003企业版sp2密钥
  • linux常见信号
  • win8怎么开机不用密码
  • win8.1怎么样
  • Cocos2d-x 3.0final 终结者系列教程23CocosStudio UI组件使用大全Cocos2d-x3.2使用
  • cocos2d-x起点之程序的入口
  • glht函数
  • com.android.phone无响应
  • androidsocket原理
  • shell中的-le
  • ubuntu libtorch
  • 蓝牙协议栈包括
  • pycharm配置pyqt
  • unity3d shader之Julia集和Mandelbrot集绘制美丽图案 (二)
  • JavaScript中reduce()方法的使用详解
  • jupyter 安装python包
  • 烟草局收入怎么样
  • 报fob价格最后谁退税
  • 如何打印个人所得税证明
  • 赞美税务干部对联大全集锦
  • 国税地税征管
  • 企业所得税的改革与完善
  • 银行收取手续费可以抵扣进项税额吗
  • 免责声明:网站部分图片文字素材来源于网络,如有侵权,请及时告知,我们会第一时间删除,谢谢! 邮箱:opceo@qq.com

    鄂ICP备2023003026号

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

    友情链接: 武汉网站建设