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

  • 红米note11pro有nfc吗(红米note11pro有屏幕指纹)

    红米note11pro有nfc吗(红米note11pro有屏幕指纹)

  • 苹果为什么不建议上滑关闭应用(苹果为什么不建自己的工厂)

    苹果为什么不建议上滑关闭应用(苹果为什么不建自己的工厂)

  • 抖音视频拍摄方法是怎样的(抖音视频拍摄方法有哪些)

    抖音视频拍摄方法是怎样的(抖音视频拍摄方法有哪些)

  • 会员下载歌曲怎么永久(会员下载歌曲怎么变成永久的)

    会员下载歌曲怎么永久(会员下载歌曲怎么变成永久的)

  • 如何删除不需要的微信号(如何删除不需要的微信群)

    如何删除不需要的微信号(如何删除不需要的微信群)

  • 抖音火苗有什么用(抖音火苗什么情况下会消失)

    抖音火苗有什么用(抖音火苗什么情况下会消失)

  • 3d删除快捷键是什么(3d删除键没反应)

    3d删除快捷键是什么(3d删除键没反应)

  • 华为mate30拍照模糊(华为mate30拍照模糊怎么调整)

    华为mate30拍照模糊(华为mate30拍照模糊怎么调整)

  • QQ邮箱发照片怎么发(qq邮箱发照片怎么重命名)

    QQ邮箱发照片怎么发(qq邮箱发照片怎么重命名)

  • 剪映拍好的视频怎么调倍速(剪映拍好的视频怎么换背景)

    剪映拍好的视频怎么调倍速(剪映拍好的视频怎么换背景)

  • 交易猫上传不了图片怎么办(交易猫为啥上传不了截图)

    交易猫上传不了图片怎么办(交易猫为啥上传不了截图)

  • hwitl00是华为什么型号手机(hwltl00华为什么型号)

    hwitl00是华为什么型号手机(hwltl00华为什么型号)

  • 安装包损坏该怎样修复(安装包损坏该怎么解决)

    安装包损坏该怎样修复(安装包损坏该怎么解决)

  • 为什么新注册抖音没有观看量(为什么新注册抖音号没有最新特效)

    为什么新注册抖音没有观看量(为什么新注册抖音号没有最新特效)

  • oppoa8和a11对比(oppoa8与a11哪个好)

    oppoa8和a11对比(oppoa8与a11哪个好)

  • 华为手机电池旁边的树叶是什么(华为手机电池旁边的小仪表盘)

    华为手机电池旁边的树叶是什么(华为手机电池旁边的小仪表盘)

  • vivo手机解除自动锁屏(vivo手机自动解锁怎么办)

    vivo手机解除自动锁屏(vivo手机自动解锁怎么办)

  • 手机一卡一卡的怎么办(为什么手机用久了会卡)

    手机一卡一卡的怎么办(为什么手机用久了会卡)

  • 苹果x隐藏照片在哪儿(苹果x隐藏照片怎么设密码)

    苹果x隐藏照片在哪儿(苹果x隐藏照片怎么设密码)

  • 苹果11什么处理器(苹果11什么处理qi)

    苹果11什么处理器(苹果11什么处理qi)

  • 数据线保护套怎么安装(数据线保护套怎么安装视频)

    数据线保护套怎么安装(数据线保护套怎么安装视频)

  • wordword编辑限制保护怎么办(world 限制编辑)

    wordword编辑限制保护怎么办(world 限制编辑)

  • leetcode是什么(leetcode有什么用)

    leetcode是什么(leetcode有什么用)

  • 苹果手机抖音怎么上传音乐(苹果手机抖音怎么清理内存空间)

    苹果手机抖音怎么上传音乐(苹果手机抖音怎么清理内存空间)

  • 小米9关闭指纹亮屏(小米关闭指纹解锁震动)

    小米9关闭指纹亮屏(小米关闭指纹解锁震动)

  • 快手伴侣怎么直播游戏(快手伴侣怎么直播放电影赚钱)

    快手伴侣怎么直播游戏(快手伴侣怎么直播放电影赚钱)

  • dlbfbmgr.exe进程是什么 dlbfbmgr进程安全吗(rundll32.exe进程很多)

    dlbfbmgr.exe进程是什么 dlbfbmgr进程安全吗(rundll32.exe进程很多)

  • Java实现邮件发送(java 邮件)

    Java实现邮件发送(java 邮件)

  • 递延所得税如何影响所得税费用
  • 税务免抵调库是什么意思
  • 企业所得税营业收入和增值税销售收入
  • 事业单位不用纳税吗
  • 融资租赁业务的账务处理
  • 个人所得税交税怎么交的
  • 税费返还如何处理
  • 2020年减免水利基金会计分录
  • 出租设备应计入什么科目
  • 福利费结转以后年度
  • 进口的原材料没有发票
  • 企业购买的黄金计入什么科目
  • 外购材料运输费怎么入账
  • 出口退税金额和进项税额不一致
  • 要注销的企业多久能注销
  • 生产型增值税与消费型增值税的区别在于是否允许企业
  • 小规模纳税人普票可以开3%吗
  • 工商年报中的纳税总额是所属期应交还是实交税额
  • 维护费开的普票能全额抵扣吗?
  • 以现金形式发放的员工餐费补贴,可并入职工福利费
  • 使用简易计税方法是什么意思
  • 环评费用计入管理费用吗 是否需要摊销
  • 金蝶财务软件录入凭证
  • 二月份个税申报时间
  • 小规模需要交所得税吗
  • 薪酬支出包括什么
  • 生产税有哪些
  • 无形资产如何评估作价
  • 普通发票用记账吗
  • 暂估成本跨年怎么处理分录
  • createrectrgn
  • 利用php实现开心麻花
  • php 配置
  • 企业新录用并签订
  • php @method
  • mac如何使用php
  • 完成认证后开具什么证明
  • 城建税退回与不退税区别
  • 累计税费怎么计算
  • 深入分析php优化模型
  • python输入三个数输出最小的
  • 理财资金用途
  • 现金流量表期初现金余额怎么计算
  • 个体工商户开增值税专用发票
  • 利得税表一定要做审计吗?
  • 有赞微小店认证麻烦
  • 车改补贴算工资吗
  • 房开企业增值税销项税额
  • 汇算清缴要退税1750元,不想退要调平怎么调?
  • 三个月 租房
  • 外地预缴怎么算
  • 现金日记账退款怎么记账
  • 会计中的材料采购是什么意思
  • 会计中为什么要用黑色笔写
  • 完美解决usb供电不足
  • freebsd安装教程
  • U盘安装centos8
  • windows route metric
  • 如何ie8升级到10
  • ims文件是什么意思
  • Win10 64位系统下火狐浏览器打开带flash网页卡死的解决方法
  • 如何删除双系统中的linux系统
  • win7开机出现两个系统选项
  • 怎么快速
  • xcode怎么新建项目
  • 前端面试题及答案2023vue3
  • unity 3.0
  • Javascript 字符串拼接
  • 服务端测试是什么意思
  • qq个人资料显示王者战绩
  • python的for函数
  • 房租计入待摊费用
  • 知道税率怎么算成本
  • 河北省税务局发票查询系统
  • 江苏税务个人所得税app下载
  • 税务询问笔录属于什么证据
  • 税务局三方协议变更
  • 税务局的人为什么那么拽
  • 控件未安装或控件版本过低
  • 云南省国家税务总局处长名单
  • 免责声明:网站部分图片文字素材来源于网络,如有侵权,请及时告知,我们会第一时间删除,谢谢! 邮箱:opceo@qq.com

    鄂ICP备2023003026号

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

    友情链接: 武汉网站建设