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

  • 爱奇艺微信会员可以几个人用(爱奇艺微信会员授权二维码在哪里)

    爱奇艺微信会员可以几个人用(爱奇艺微信会员授权二维码在哪里)

  • 手机收不到社保验证码(查阅社保收不到手机验证码)

    手机收不到社保验证码(查阅社保收不到手机验证码)

  • 搜狗是哪个公司(搜狗是哪个公司旗下的)

    搜狗是哪个公司(搜狗是哪个公司旗下的)

  • 超感光摄像头是什么意思(超感光摄像头是什么)

    超感光摄像头是什么意思(超感光摄像头是什么)

  • 小米浏览器记录删除恢复(小米浏览器记录只有一天)

    小米浏览器记录删除恢复(小米浏览器记录只有一天)

  • 苹果f17开头属于什么机(苹果f17开头的好不好)

    苹果f17开头属于什么机(苹果f17开头的好不好)

  • 拼多多店铺审核一般多久(拼多多店铺审核秒通过)

    拼多多店铺审核一般多久(拼多多店铺审核秒通过)

  • 搜狗浏览器网页链接怎么转换成文件(搜狗浏览器网页拦截设置怎么取消)

    搜狗浏览器网页链接怎么转换成文件(搜狗浏览器网页拦截设置怎么取消)

  • 什么软件可以改wifi密码(什么软件可以改ip地址)

    什么软件可以改wifi密码(什么软件可以改ip地址)

  • 微信朋友圈视频号什么意思(微信朋友圈视频最多几秒)

    微信朋友圈视频号什么意思(微信朋友圈视频最多几秒)

  • 手机声音太小如何解决(手机声音太小如何开免提模式)

    手机声音太小如何解决(手机声音太小如何开免提模式)

  • ps如何载入素材(ps怎么加载素材)

    ps如何载入素材(ps怎么加载素材)

  • 华为荣耀耳机孔在哪(华为荣耀耳机孔在哪里啊)

    华为荣耀耳机孔在哪(华为荣耀耳机孔在哪里啊)

  • 微信刷脸支付怎么关闭(微信刷脸支付怎么代理加盟)

    微信刷脸支付怎么关闭(微信刷脸支付怎么代理加盟)

  • 侯补购票什么意思(侯补够票什么意思)

    侯补购票什么意思(侯补够票什么意思)

  • 如何删除淘宝追评价(如何删除淘宝追加评价记录)

    如何删除淘宝追评价(如何删除淘宝追加评价记录)

  • 苹果x的反向充电在哪(苹果x反向充电设置)

    苹果x的反向充电在哪(苹果x反向充电设置)

  • 怎样才能用手机连接到路由器(怎样才能用手机找到附近的手机)

    怎样才能用手机连接到路由器(怎样才能用手机找到附近的手机)

  • 微信怎样开通无感支付(微信如何开通无限额度)

    微信怎样开通无感支付(微信如何开通无限额度)

  • windowsxp开机手机壁纸是(windows手机开机视频 (流畅))

    windowsxp开机手机壁纸是(windows手机开机视频 (流畅))

  • 小米手环4nfc版怎么播放音乐(小米手环4nfc版app下载)

    小米手环4nfc版怎么播放音乐(小米手环4nfc版app下载)

  • 苹果xs怎么关闭后台程序(苹果xs怎么关闭拍照声音)

    苹果xs怎么关闭后台程序(苹果xs怎么关闭拍照声音)

  • 微信视频呼叫失败是怎么回事(微信视频呼叫失败对方显示嘛)

    微信视频呼叫失败是怎么回事(微信视频呼叫失败对方显示嘛)

  • 开启AHCI模式后,为什么出现电脑开机蓝屏?(设置ahci模式后,开不了机)

    开启AHCI模式后,为什么出现电脑开机蓝屏?(设置ahci模式后,开不了机)

  • 企业签订技术培训合同是否需要缴纳印花税?
  • 讲课费怎么代扣代缴个人所得税
  • 工程款给付协议
  • 飞机票抵扣进项税怎么计算民航发展基金
  • 预交增值税附税税率
  • 钱已付票未收到分录怎么做
  • 设计合同需要缴哪些税
  • 房产租金收入是什么科目
  • 冲借款的凭证怎么做
  • 燃气公司开发票的工程款入什么会计科目核算与分录怎么写?
  • 机械设备租赁征求意见稿
  • 营改增后甲供材税前扣除还是税后扣除?
  • 存货的损失计入什么科目
  • 职业年金属于应交税费吗
  • 电子账本excel模板
  • 在建工程计提减值准备可以转回吗
  • 进口车辆购置税公式
  • 讲课费税务发票类别
  • 租车开具的电子发票
  • 1697508933
  • macos itunes
  • php更新数据
  • 增值税务发票怎么作废
  • scvc8.exe是什么
  • 公司年终奖怎么缴税
  • vue登录页面点击登录进入首页
  • 增值税如何形成欠税
  • 北极熊睡觉图片卡通
  • 边角料是否计入生产成本
  • 推荐国内免费使用的电影
  • 汇兑差额如何计算
  • 收到待报解预算收入怎么做账
  • 小规模纳税人每月申报什么税
  • 基于深度学习的车型识别系统(Python+清新界面+数据集)
  • jsp连接mysql8数据库
  • 水利基金补申报怎么操作
  • 客户对账单应该哪个部门做
  • 行政事业性收据丢了怎么办
  • 融资租入固定资产的入账价值
  • mysql行锁的作用
  • 织梦如何使用
  • 税前补发补扣
  • 哪些固定资产是按8年折旧的
  • 固定资产以什么资金形态存在
  • 企业借款利息计入什么科目
  • 新会计准则应付账款
  • sqlserver2008r2评估期已过
  • 交通运输行业属于什么性质
  • 国债利息属于免税吗
  • 安全生产费用收取方案
  • 融资租入固定资产的租赁费属于什么费用
  • 研发费用账务处理一定在管理费用吗
  • 收到的货款比实际货款多
  • 明细与发票
  • 现金折扣与商业折扣的计算
  • 应付账款周转率越大越好还是越小越好?
  • 车辆理赔款如何入账
  • 收购股权如何做分录
  • 金蝶k3怎么打印科目余额表
  • 小规模纳税人申请一般纳税人流程
  • 金蝶软件采购订单
  • 如何考预算师
  • 销售固定资产怎么做账务处理
  • dos命令环境
  • win7鼠标右键没有压缩文件
  • win10快速访问在哪
  • linux磁盘的使用方式
  • w8系统怎么用
  • windows8如何使用
  • 下列有关javascript中call和apply
  • 编写批处理
  • 全国哀悼日的意义
  • unity如何得到输入框的输入
  • js多选
  • jquery删除一个标签
  • js动态改变网页标题
  • excel自定义控件
  • 山东省国家税务局官网
  • 税务转为非正常户的后果
  • 应缴纳资源税税额怎么计算
  • 免责声明:网站部分图片文字素材来源于网络,如有侵权,请及时告知,我们会第一时间删除,谢谢! 邮箱:opceo@qq.com

    鄂ICP备2023003026号

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

    友情链接: 武汉网站建设