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

  • iqoo8pro支持pd快充吗(iqoo8支持pd快充吗)

    iqoo8pro支持pd快充吗(iqoo8支持pd快充吗)

  • 钉钉用电脑可以连麦吗(钉钉用电脑可以连线吗)

    钉钉用电脑可以连麦吗(钉钉用电脑可以连线吗)

  • 电脑锁屏后无法唤醒(电脑锁屏后无法唤醒怎么办)

    电脑锁屏后无法唤醒(电脑锁屏后无法唤醒怎么办)

  • 无线网需要认证怎么回事(无线网需要认证登录怎么解决)

    无线网需要认证怎么回事(无线网需要认证登录怎么解决)

  • iqoo手机发烫怎么解决(iqooz1手机发热)

    iqoo手机发烫怎么解决(iqooz1手机发热)

  • 小米折叠手机什么时候上市(小米折叠手机什么时候发布)

    小米折叠手机什么时候上市(小米折叠手机什么时候发布)

  • 微信更换实名认证后有什么影响(微信更换实名认证后聊天记录还在吗)

    微信更换实名认证后有什么影响(微信更换实名认证后聊天记录还在吗)

  • 快手里的黄钻怎么换钱(快手里的黄钻怎么提现到微信)

    快手里的黄钻怎么换钱(快手里的黄钻怎么提现到微信)

  • 苹果手机玩游戏卡顿是什么原因(苹果手机玩游戏时怎么隐藏横条)

    苹果手机玩游戏卡顿是什么原因(苹果手机玩游戏时怎么隐藏横条)

  • 账号查找和qq号查找的区别(账号查找和qq查找)

    账号查找和qq号查找的区别(账号查找和qq查找)

  • 快手和抖音可以同时直播吗(快手和抖音可以同步发一样的内容吗)

    快手和抖音可以同时直播吗(快手和抖音可以同步发一样的内容吗)

  • 一寸电子版照片怎么弄(一寸电子版照片是什么样的)

    一寸电子版照片怎么弄(一寸电子版照片是什么样的)

  • xp系统任务栏不见了

    xp系统任务栏不见了

  • 苹果watch能录音吗(苹果watch录音如何导出)

    苹果watch能录音吗(苹果watch录音如何导出)

  • 手机图片内存怎么变小(手机图片内存怎么压缩变小)

    手机图片内存怎么变小(手机图片内存怎么压缩变小)

  • 小米出5g手机了吗(小米出5g手机了吗现在)

    小米出5g手机了吗(小米出5g手机了吗现在)

  • 香港有共享充电宝吗(香港共享充电宝)

    香港有共享充电宝吗(香港共享充电宝)

  • 趣味键盘安全吗(趣味键盘下载安卓)

    趣味键盘安全吗(趣味键盘下载安卓)

  • 荣耀20耳机孔在哪(荣耀20lite耳机孔)

    荣耀20耳机孔在哪(荣耀20lite耳机孔)

  • 手机可以下载歌曲到u盘吗(手机可以下载歌到车载U盘吗)

    手机可以下载歌曲到u盘吗(手机可以下载歌到车载U盘吗)

  • word文档标准格式(word文档标准的格式是什么样的)

    word文档标准格式(word文档标准的格式是什么样的)

  • Win11中触摸板不工作怎么办?Win11中触摸板不工作修复方法(win11触摸板不能用)

    Win11中触摸板不工作怎么办?Win11中触摸板不工作修复方法(win11触摸板不能用)

  • Nvidia Jetson TX2入门指南(白话版)(jetson nano nvidia-smi)

    Nvidia Jetson TX2入门指南(白话版)(jetson nano nvidia-smi)

  • 综合保税区是什么意思,举个例子
  • 销售使用过的车辆
  • 非限定性净资产包括哪些科目
  • 税金及附加和应交税费的关系
  • 对公账户发工资怎么操作
  • 指定扣缴和法定扣缴区别
  • 收到税务局附加税退税税款的分录
  • 结转发出材料会计分录
  • 长期借款利息计入应付利息吗
  • 降低企业成本的有效途径
  • 为企业担保
  • 企业清算业务程序
  • 应缴所得税包括哪些税种
  • 以前的货款用银行账户吗
  • 什么时候应做资产减值准备?
  • 已认证已抵扣的发票对方要寄回吗
  • 增值税普通发票有什么用
  • 跨区域施工增值税怎么交
  • 开票软件安装6位地区编号填什么
  • 企业报税的详细流程期限为
  • 账面销项税额与申报表不一致怎么处理
  • 已经折旧完的固定资产怎么处理
  • 营销策划费用计算公式
  • 计提个人社保会计分录实操
  • 国家基建项目规划
  • macbook上安装windows10
  • 如何处理库存差异问题
  • php中字符串函数
  • 公司培训赔偿
  • 无形资产出租属于处置吗
  • 没有发票的成本怎么算
  • 应税消费品投资的筹划方法
  • php实现删除功能
  • 政府收购企业的补偿款要交税吗
  • php js
  • 办公经费包括工资吗
  • 个人出租车辆交税吗
  • vue开发视频教程
  • vue @hook
  • 百旺金赋开票系统客服电话
  • canvas实现图片编辑
  • 侵权赔偿补偿金如何计算
  • 一般纳税人年收入500万交多少税
  • 预付房租摊销从哪月算起
  • 销售折让的账务处理方法
  • 住房公积金的账户状态是封存是什么意思
  • 筹建期费用账务处理
  • 福利费与工会经费使用区别
  • 租赁费计提印花税税率
  • 工会经费的列支范围有哪些
  • mysql5.6无法启动
  • sql server索引怎么用
  • sql查询字段值为汉字的
  • tabletpc输入面板怎么打开
  • linux系统中cron命令
  • 韩国电脑用什么系统
  • freebsd使用手册
  • win7怎么添加此电脑
  • win8的系统怎么装win7
  • xp移动系统
  • win7如何打开命令窗口
  • 彻底删除怎样恢复
  • win10预览设置
  • ExtJS4给Combobox设置列表中的默认值示例
  • Android游戏开发实践指南
  • python matplotlab
  • 给一个接口,然后怎么在vue里面调用
  • Unity3D游戏开发毕业论文
  • python listnode
  • javascript 分号
  • python深入浅出
  • python解析chunked
  • 拟录用人员公示后还会递补吗
  • 建筑劳务个人所得税申报
  • 发票税务抽奖怎么操作
  • 医保月底结算规定是什么
  • 2022年房产税减免政策疫情
  • 长沙税务注销公示期是多久
  • 中国有没有豁免权
  • 如何落实请示汇报
  • 免责声明:网站部分图片文字素材来源于网络,如有侵权,请及时告知,我们会第一时间删除,谢谢! 邮箱:opceo@qq.com

    鄂ICP备2023003026号

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

    友情链接: 武汉网站建设