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

  • 怎么把爱奇艺的视频下载下来(怎么把爱奇艺的视频保存到相册)

    怎么把爱奇艺的视频下载下来(怎么把爱奇艺的视频保存到相册)

  • 转接线是用来干嘛的(转接线有好坏吗)

    转接线是用来干嘛的(转接线有好坏吗)

  • 华为抢购排队中要多久(华为手机抢购排队中)

    华为抢购排队中要多久(华为手机抢购排队中)

  • vivox50支持无线充电吗(vivox50能无线充电吗?)

    vivox50支持无线充电吗(vivox50能无线充电吗?)

  • wifi静态lp什么意思(wifi的静态ip是干什么的)

    wifi静态lp什么意思(wifi的静态ip是干什么的)

  • word如何打印文档(word文档怎么打印)

    word如何打印文档(word文档怎么打印)

  • k620显卡相当于gtx(k620显卡相当于什么级别的n卡)

    k620显卡相当于gtx(k620显卡相当于什么级别的n卡)

  • 华为nova7se怎么设置返回键(华为nova7se怎么样)

    华为nova7se怎么设置返回键(华为nova7se怎么样)

  • air3可以用pencil二代吗(air3可以用笔吗)

    air3可以用pencil二代吗(air3可以用笔吗)

  • 咪咕音乐没有pc版吗(咪咕音乐没有通知栏控制)

    咪咕音乐没有pc版吗(咪咕音乐没有通知栏控制)

  • 滴滴桔视仪必须安装吗(滴滴要求安装桔视仪不安装不派单)

    滴滴桔视仪必须安装吗(滴滴要求安装桔视仪不安装不派单)

  • qq加好友要发短信验证是怎么回事(qq加好友要发短信多久能解除)

    qq加好友要发短信验证是怎么回事(qq加好友要发短信多久能解除)

  • 电话通话记录能查多长时间的(电话通话记录能查到通话内容吗)

    电话通话记录能查多长时间的(电话通话记录能查到通话内容吗)

  • qqwifi在线怎么显示4g(qq如何显示wifi在线)

    qqwifi在线怎么显示4g(qq如何显示wifi在线)

  • ipad忘了关闹钟会一直响吗(ipad闹钟忘了关多久自动停止)

    ipad忘了关闹钟会一直响吗(ipad闹钟忘了关多久自动停止)

  • j1900相当于什么cpu(j1900相当于什么档次)

    j1900相当于什么cpu(j1900相当于什么档次)

  • word怎么自动排序数字(word怎么自动排页)

    word怎么自动排序数字(word怎么自动排页)

  • vivo自定义个人铃声(vivo的自定义铃声怎么弄)

    vivo自定义个人铃声(vivo的自定义铃声怎么弄)

  • vue调镜头速度(vue镜头推拉功能怎么用)

    vue调镜头速度(vue镜头推拉功能怎么用)

  • 小米解锁机啥意思(小米解锁机使用心得)

    小米解锁机啥意思(小米解锁机使用心得)

  • 滴滴怎么改目的地(滴滴上面怎么修改目的地)

    滴滴怎么改目的地(滴滴上面怎么修改目的地)

  • 华为p30机身尺寸(华为p30手机尺寸)

    华为p30机身尺寸(华为p30手机尺寸)

  • ip地址范围怎么算(ip地址范围怎么填写)

    ip地址范围怎么算(ip地址范围怎么填写)

  • 贴贴app苹果和安卓之间能用吗(不吃晚饭多久能瘦下来)

    贴贴app苹果和安卓之间能用吗(不吃晚饭多久能瘦下来)

  • macOS 10.15.6补充更新了哪些 macOS 10.15.6补充更新介绍(macos10.15.7补充更新)

    macOS 10.15.6补充更新了哪些 macOS 10.15.6补充更新介绍(macos10.15.7补充更新)

  • 不含税销售额计算公式理解
  • 小规模纳税人企业购进货物和接受应税劳务时
  • 公司购买设备报告怎么写
  • 企业所得税的营业成本
  • 没有进项发票出口转内销
  • 收取租车押金怎么做会计分录
  • 销售货物和劳务的税率
  • 分公司是独立核算还是非独立核算
  • 应计利息会计分录处理
  • 财产损失税务备案
  • 企业促销应该采用什么方法
  • 应付账款多计怎么处理
  • 哪些房屋交易需要公证
  • 已认证的发票如何导入
  • 国税怎么查缴税明细
  • 企业境外收入税率
  • 公司员工租金取得专用发票能否抵扣?
  • 建筑企业如何才能上市
  • 增值普通发票税率怎么算
  • 公司走税,对公司有影响吗
  • 先缴纳社保还是先扣税
  • 土地增值税清算时间
  • 所得税汇算成本调减会计分录
  • 合同银行账户与开票信息不一致会计如何处理
  • 应付账款和预付账款都是企业的债权
  • 电脑经常蓝屏修复
  • windows 7无线开关在哪里
  • win11任务栏全部显示
  • 电脑不能连接wifi只能连宽带
  • 土地使用权进项税如何抵扣
  • php -i
  • 代理出口退税款退到哪
  • chat gpt介绍开头
  • 支付手续费方式委托代销商品确认收入
  • 可抵免境外所得税税额
  • 瑞士·劳特布龙嫩小镇
  • 项目版本管理是什么
  • 会计准则对企业行为的影响分析论文
  • vuecli项目实战
  • php array操作
  • php100 jquery教程
  • 收支比是收入比还是利润
  • 网上抄税报税操作流程
  • 其他发票包括哪些
  • 应付账款会计分录大全
  • 公司转让注册海外公司
  • python关键字参数位置参数
  • php安装不上
  • 公司股东就是董事吗
  • 差旅费误餐补助
  • 股东退股取现怎么处理
  • 多年没有做账该怎么说
  • 摊销费用如何做账
  • 应付职工薪酬包括辞退福利吗
  • 原材料的合理损耗计入入账成本吗
  • 保理融资的费用由谁承担
  • 集团拨款
  • 航天信息服务费280元如何申报
  • 房产预售什么时候开始
  • sql server 2012r2
  • mysql查询慢sql命令
  • 屏幕右下角显示A2
  • centos如何删除用户组里面的用户
  • vmwareworkstation10虚拟机
  • win7任务管理器怎么打开
  • Ubuntu中Virtualbox虚拟机NAT方式无法上网解决方法
  • win10启动很慢怎么办
  • ubuntu20.0安装
  • linux系统中怎么创建目录
  • Linux Kernel 4.10第5个候选版本RTM版发布 2月12日发布正式版
  • win8.2系统
  • win7唤醒后屏幕黑屏
  • javascript面向对象编程 PDF
  • shell脚本编写简单计算器
  • 使用jquery
  • jquery 图片裁剪
  • django 表单
  • androidstudio快捷生成代码
  • python守护线程与非守护线程
  • 香皂需要换着用吗
  • 免责声明:网站部分图片文字素材来源于网络,如有侵权,请及时告知,我们会第一时间删除,谢谢! 邮箱:opceo@qq.com

    鄂ICP备2023003026号

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

    友情链接: 武汉网站建设