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

  • 苹果13怎么唤醒Siri(苹果14黑屏无法唤醒)

    苹果13怎么唤醒Siri(苹果14黑屏无法唤醒)

  • opporeno7怎么调出虚拟按键(opporeno7怎么调出来信息闪光灯)

    opporeno7怎么调出虚拟按键(opporeno7怎么调出来信息闪光灯)

  • 微信7.0自动扣费不见了(微信7.0自动扣费怎么取消)

    微信7.0自动扣费不见了(微信7.0自动扣费怎么取消)

  • 怎么把三个文件放在一个文件夹里(怎么把三个文件打包成一个文件)

    怎么把三个文件放在一个文件夹里(怎么把三个文件打包成一个文件)

  • vivox9s忘记锁屏密码怎么解锁(vivox9s忘记锁屏密码怎么恢复出厂设置)

    vivox9s忘记锁屏密码怎么解锁(vivox9s忘记锁屏密码怎么恢复出厂设置)

  • 4800万像素能比过单反吗(4800万像素比1200万像素噪声降低多少)

    4800万像素能比过单反吗(4800万像素比1200万像素噪声降低多少)

  • 来源qq空间是什么意思(来源是qq空间的是怎么加的)

    来源qq空间是什么意思(来源是qq空间的是怎么加的)

  • miui是什么牌子(miui是什么牌子手机多少钱)

    miui是什么牌子(miui是什么牌子手机多少钱)

  • 电脑怎么打不出小写字母(电脑怎么打不出拼音)

    电脑怎么打不出小写字母(电脑怎么打不出拼音)

  • oppoace2有耳机孔吗(oppoace2有耳机转接头吗)

    oppoace2有耳机孔吗(oppoace2有耳机转接头吗)

  • 华为p40pro如何截屏(mate50怎么长截图)

    华为p40pro如何截屏(mate50怎么长截图)

  • 200m带宽下载速度多少(200M带宽下载速率)

    200m带宽下载速度多少(200M带宽下载速率)

  • 16th是什么手机(手机16+1t)

    16th是什么手机(手机16+1t)

  • 5gwifi需要5g手机吗(5gwifi是不是要5g手机才能用)

    5gwifi需要5g手机吗(5gwifi是不是要5g手机才能用)

  • 网络开小差如何处理(为什么总是显示网络开小差)

    网络开小差如何处理(为什么总是显示网络开小差)

  • 魅族开发者模式有啥用(魅族开发者模式怎么调最流畅)

    魅族开发者模式有啥用(魅族开发者模式怎么调最流畅)

  • vivoy3有没有防水功能(vivoy3s防水性能怎么样)

    vivoy3有没有防水功能(vivoy3s防水性能怎么样)

  • 快手怎么搜索正在直播(快手怎么样搜索)

    快手怎么搜索正在直播(快手怎么样搜索)

  • vue视频怎么添加文字(vue视频怎么添加背景图片)

    vue视频怎么添加文字(vue视频怎么添加背景图片)

  • 手机网络hd什么意思(手机网络上面显示hd)

    手机网络hd什么意思(手机网络上面显示hd)

  • 苹果手表如何数据插卡(苹果手表怎么量多少毫米)

    苹果手表如何数据插卡(苹果手表怎么量多少毫米)

  • 微信怎么刷公交乘车码(微信怎么刷公交车乘车码支付)

    微信怎么刷公交乘车码(微信怎么刷公交车乘车码支付)

  • 荣耀8x怎么添加铃声(荣耀8x怎么添加隐私空间)

    荣耀8x怎么添加铃声(荣耀8x怎么添加隐私空间)

  • vivoz5x有没有nfc(vivoZ5x有没有红外线)

    vivoz5x有没有nfc(vivoZ5x有没有红外线)

  • 虚拟机怎么安装Ubuntu 15.04试用?(虚拟机怎么安装iso镜像文件)

    虚拟机怎么安装Ubuntu 15.04试用?(虚拟机怎么安装iso镜像文件)

  • 网络游戏架构的前世今生——网关(游戏的系统架构)

    网络游戏架构的前世今生——网关(游戏的系统架构)

  • 行政事业单位卖废品怎么处理
  • 工程附加税怎么计算
  • 生育津贴到公司账上怎么发给员工
  • 个税申报系统跟工资表累计扣除数不一致怎么办
  • 一般纳税人工会经费返还政策
  • 个人以不动产投资入股
  • 产权转让与股权转让
  • 产品不合格造成客户损失怎么赔付
  • 失控发票进项税转出企业无法承担所得税怎么办
  • 违约金没有发票
  • 货车挂靠企业需要交增值税吗?
  • 个人开增值税普票有没有限额
  • 小规模企业跨季报税流程
  • 这几点政府补助会计新准则值得关注
  • 财政总预算会计分为三级
  • 垫付按揭保证金怎么做账
  • 工程施工合同暂估价格入账会计分录
  • 已计提的存货跌价准备确认为净损失吗
  • 房租摊销表怎么做
  • 资金账簿印花税申报期限
  • 小规模纳税人代账一年多少钱
  • 合同取得成本和增量成本有什么区别
  • 购买收益权如何缴税
  • windows10如何关闭病毒和威胁防护设置
  • 实收资本可以大于注册资本嘛
  • 生产车间报表表格图片
  • 冲销去年多计提所得税怎么做
  • 未分配收益怎么取出
  • 公允价值变动损益会计处理
  • 图书发行流程
  • 三年以上的应付账款
  • 增值税常见账务处理方法
  • 预收账款通俗易懂的说法
  • 出现质量问题赔偿标准
  • 财税2016年12号文件解读
  • vscode的常用插件
  • yii框架搭建
  • js经典案例代码大全
  • 待抵扣进项税额是什么情况下用的
  • 当月增加的房产 要交房产税吗
  • 资本性支出与资本性支出(基本建设)的区别
  • 新办企业购置设备申请
  • 航空公司开具的代订机票费可以抵扣吗
  • 企业不交所得税的情况
  • 如何快速删掉通讯录联系人
  • mysql 5.7.1
  • 交强险必须要买嘛
  • 定期定额纳税申报表计税依据怎么填
  • 什么是企业年金险
  • 所得税税率变化对已确认递延所得税资产的影响
  • 专票红冲信息表填开显示红字信息表金额大于蓝色金额
  • 公司新产品研发上市的意义和价值
  • 银行帐户维护费怎么算
  • 出口退税企业如何更正申报增值税
  • 固定资产报废属于非流动资产处置损失吗
  • winxp系统怎么设置默认账户登入
  • 启动游戏出现dmp的文件
  • ubuntu x
  • mac命令行指令
  • centos做bond4
  • Win7防火墙怎么设置
  • pgptray.exe - pgptray是什么进程 有什么用
  • Linux VPS vsftp/proftpd FTP时间差八小时的解决方法
  • win7系统计算机管理打不开
  • 修改win10登录界面
  • android 图像处理
  • cocos2dx入门
  • android observer
  • python利用matplotlib将扇形平分成50份
  • linux小技巧
  • javascript高级程序设计pdf下载
  • js实现兼容性较好的方法
  • unity中事件分发系统 EventDispatcher
  • js工具类库
  • Android性能优化的方面12个
  • 国税局发票查验平台查询不到
  • 税务通知书一般什么内容
  • 小规模纳税企业的增值税税率一律为3%
  • 出口退税的汇率按什么时候的汇率
  • 微信 税务
  • 免责声明:网站部分图片文字素材来源于网络,如有侵权,请及时告知,我们会第一时间删除,谢谢! 邮箱:opceo@qq.com

    鄂ICP备2023003026号

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

    友情链接: 武汉网站建设