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

  • 企业微博实战的营销技巧(企业微博到底怎么运营)

    企业微博实战的营销技巧(企业微博到底怎么运营)

  • 水货机报价(水货机)(水货机是翻新机吗)

    水货机报价(水货机)(水货机是翻新机吗)

  • 荣耀如何修改应用名称(荣耀如何修改应用的默认存储目录)

    荣耀如何修改应用名称(荣耀如何修改应用的默认存储目录)

  • 单独删还能看到朋友圈吗(单方面删除好友还能看到他的主页吗)

    单独删还能看到朋友圈吗(单方面删除好友还能看到他的主页吗)

  • 抖音怎么设置匿名评论(抖音怎么设置匿名用户)

    抖音怎么设置匿名评论(抖音怎么设置匿名用户)

  • steam被盗了邮箱被改了怎么办(steam被盗了邮箱收不到验证码)

    steam被盗了邮箱被改了怎么办(steam被盗了邮箱收不到验证码)

  • 苹果xr怎么开启3d(苹果XR怎么开启电量百分比)

    苹果xr怎么开启3d(苹果XR怎么开启电量百分比)

  • 闲鱼上买的东西出现问题怎么办(闲鱼买的东西一直不发货怎么办)

    闲鱼上买的东西出现问题怎么办(闲鱼买的东西一直不发货怎么办)

  • 电脑自带的office卸载了怎么恢复(电脑自带的office在哪里)

    电脑自带的office卸载了怎么恢复(电脑自带的office在哪里)

  • 苹果xr序列号f开头什么意思(苹果xr序列号f开头的是什么机子)

    苹果xr序列号f开头什么意思(苹果xr序列号f开头的是什么机子)

  • 拓扑关系有哪三种类型(拓扑关系有哪几种)

    拓扑关系有哪三种类型(拓扑关系有哪几种)

  • 抖音里私信聊天别人能看见吗(抖音里私信聊天记录怎么恢复)

    抖音里私信聊天别人能看见吗(抖音里私信聊天记录怎么恢复)

  • 骑手差评多久能看到(骑手差评多了会怎么样)

    骑手差评多久能看到(骑手差评多了会怎么样)

  • oppor11plus多大屏幕尺寸(oppo r11plus屏幕多大)

    oppor11plus多大屏幕尺寸(oppo r11plus屏幕多大)

  • mde40是小米什么型号(小米mde40什么时候上市的)

    mde40是小米什么型号(小米mde40什么时候上市的)

  • 内屏和显示屏是一个吗(内屏和液晶屏一样吗)

    内屏和显示屏是一个吗(内屏和液晶屏一样吗)

  • 苹果8plus什么时候出的(苹果8plus什么时候上市的)

    苹果8plus什么时候出的(苹果8plus什么时候上市的)

  • 亚马逊自营是啥意思(亚马逊自营和非自营)

    亚马逊自营是啥意思(亚马逊自营和非自营)

  • 怎么卸载win10系统(怎么卸载win10系统更新文件)

    怎么卸载win10系统(怎么卸载win10系统更新文件)

  • 怎么做手机app软件(手机如何做软件)

    怎么做手机app软件(手机如何做软件)

  • 努比亚红魔3S内存多大(努比亚 红魔 3s)

    努比亚红魔3S内存多大(努比亚 红魔 3s)

  • iphonex个人热点连不上(iphonex个人热点名称怎么改)

    iphonex个人热点连不上(iphonex个人热点名称怎么改)

  • win10麦克风加强拉不动(win10麦克风加强只有10db)

    win10麦克风加强拉不动(win10麦克风加强只有10db)

  • iphone剪贴板历史在哪(iphone剪贴板历史可以找回来吗)

    iphone剪贴板历史在哪(iphone剪贴板历史可以找回来吗)

  • 拼多多好友怎么看(拼多多好友怎么拉黑对方)

    拼多多好友怎么看(拼多多好友怎么拉黑对方)

  • 华为荣耀10什么时候出(华为荣耀10什么系统)

    华为荣耀10什么时候出(华为荣耀10什么系统)

  • 监控系统关闭开启步骤(监控系统关闭后如何开启)

    监控系统关闭开启步骤(监控系统关闭后如何开启)

  • 前端Vue之发布订阅模式(vue发布时间)

    前端Vue之发布订阅模式(vue发布时间)

  • 减免税流程
  • 个人所得税有哪些减免政策
  • 房地产项目转让条件
  • 增值税交错了退税怎么退
  • 广告发布费在哪个分类
  • 购入股票作为短期投资是什么凭证
  • 小规模纳税人如何升级为一般纳税人
  • 研发支出的项目叫什么
  • 小汽车的增值税怎么算
  • 待抵扣进项税额和待认证进项税额的区别
  • 税前可以扣除的有哪些费用
  • 工业企业生产费用要素一般有哪些
  • 罚款从工资扣除的说明
  • 公司举办的活动
  • 验资取消股东怎么办
  • 计提增值税附加税的会计科目
  • 待转销项税额会计分录
  • 员工激励该怎么表达
  • 公司账户电子承兑
  • 汇总转账凭证可以是一借多贷
  • 季度盈利要交所税吗
  • 增值税小规模纳税人减免增值税政策
  • 个税系统添加单位企业信息不存在
  • 地下人防设置要求
  • 微软发布新windows
  • 月末库存商品怎么记账
  • windows10无法打开此类型的文件(.exe)
  • php常用函数
  • php怎么做网页
  • php源码怎么上传到服务器
  • linux中添加用户和组的操作
  • PHP:pg_escape_literal()的用法_PostgreSQL函数
  • 存货分类账目录填写样本图片
  • 企业会计核算利润表
  • 分批付款怎么确认收入
  • 劳务报酬所得的计税标准
  • 我找到了这个
  • php curl file_get_contents
  • css经典面试题
  • vscode安装python3
  • auto系列软件
  • 社保单位当月应缴月报查询
  • 审核出错问题在谁
  • 开具电费发票如何入账
  • python的utils模块
  • 外企研发中心
  • 银行承兑汇票回头背书
  • 企业贷款的条件和流程
  • 混合销售行为应征增值税不征营业税的是
  • 办理地税手续费
  • 公允价值变动损益
  • 预发绩效会计分录
  • 应收账款的账面余额是什么意思
  • 在建工程二级科目待摊支出
  • 加计抵减10%政策适用范围
  • 汽车贷款利息计算公式计算器
  • 注册公司认缴和实缴的风险区别
  • 所得税核算的三种方法
  • 新买的车没有牌能上路吗
  • 财务费用包括哪几项
  • 税收会计采用什么记账法
  • mysql 更改密码
  • 自定义设置微信来电铃声
  • macbookpro 安装
  • ubuntu20.0安装
  • 潘 pan
  • Windows 8 Modern Apps 网络隔离如何解除?
  • ugui scrollview
  • ext.grid.gridpanel
  • 一行指令
  • python和r语言区别
  • linux如何创建守护进程
  • 简述bootstrap中模态框的javascript方法
  • js判断路径下图片是否存在
  • jquery异步提交表单
  • js实现浏览器状态栏显示
  • js数组排序方法sort
  • 地税局是政府部门吗
  • 江苏税务ukey怎么申请
  • 缴纳了车辆购置税能退吗
  • 免责声明:网站部分图片文字素材来源于网络,如有侵权,请及时告知,我们会第一时间删除,谢谢! 邮箱:opceo@qq.com

    鄂ICP备2023003026号

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

    友情链接: 武汉网站建设