位置: 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怎么设置下载完关闭)

  • 华为mate30pro有红外线功能吗(华为mate30pro小红点怎么去除)

    华为mate30pro有红外线功能吗(华为mate30pro小红点怎么去除)

  • 剪映提取音乐解析失败(剪映提取的音乐怎么剪切)

    剪映提取音乐解析失败(剪映提取的音乐怎么剪切)

  • 手机膜填充液对手机有影响吗(手机膜填充液对手机好吗)

    手机膜填充液对手机有影响吗(手机膜填充液对手机好吗)

  • realtek可以卸载吗(realtek能删吗)

    realtek可以卸载吗(realtek能删吗)

  • b612可以录制多长的视频(b612视频可以录几分钟)

    b612可以录制多长的视频(b612视频可以录几分钟)

  • 钉钉呼叫受限是什么原因(钉钉电话呼叫受限)

    钉钉呼叫受限是什么原因(钉钉电话呼叫受限)

  • coocaa是什么牌子的电视(coocaa是什么牌子的电视遥控器)

    coocaa是什么牌子的电视(coocaa是什么牌子的电视遥控器)

  • 电脑硬盘oem分区什么意思(电脑硬盘oem分区在哪里)

    电脑硬盘oem分区什么意思(电脑硬盘oem分区在哪里)

  • vivoy5s手机没有显示灯吗(vivoy5s手机没有后指纹)

    vivoy5s手机没有显示灯吗(vivoy5s手机没有后指纹)

  • 手机焦距怎么调(手机焦距怎么调到最大)

    手机焦距怎么调(手机焦距怎么调到最大)

  • airpods会闪蓝光吗(airpodspro闪蓝光)

    airpods会闪蓝光吗(airpodspro闪蓝光)

  • 抖音删作品会限流吗(抖音删作品会限流量吗)

    抖音删作品会限流吗(抖音删作品会限流量吗)

  • 快手关注不按时间顺序怎么弄(快手关注不按时间发作品)

    快手关注不按时间顺序怎么弄(快手关注不按时间发作品)

  • 4gr手机信号啥意思(手机信号 4g+)

    4gr手机信号啥意思(手机信号 4g+)

  • 闲鱼实人认证总是失败(闲鱼实人认证好慢)

    闲鱼实人认证总是失败(闲鱼实人认证好慢)

  • 抖音怎么拍特效视频(抖音怎么拍特效时间能长)

    抖音怎么拍特效视频(抖音怎么拍特效时间能长)

  • 小红书怎么推广自己的笔记(小红书怎么推广作品)

    小红书怎么推广自己的笔记(小红书怎么推广作品)

  • erp怎么用(ERP怎么用外网登陆)

    erp怎么用(ERP怎么用外网登陆)

  • 技嘉主板bios更新教程(技嘉主板bios更新后无法开机)

    技嘉主板bios更新教程(技嘉主板bios更新后无法开机)

  • 怎么获取2021最新win10永久数字激活密钥 激活码分享 附激活工具(怎样获取)

    怎么获取2021最新win10永久数字激活密钥 激活码分享 附激活工具(怎样获取)

  • 运行项目报错 proxy error: could not proxy request...(运行项目报错Couldn't import Django)

    运行项目报错 proxy error: could not proxy request...(运行项目报错Couldn't import Django)

  • 最小的电池是什么(最小的电池是多大)

    最小的电池是什么(最小的电池是多大)

  • 小规模纳税人预缴企业所得税
  • 食品配送专票税率是多少
  • 结转和结转到的区别
  • 其他应收款增加银行存款减少的原因
  • 工程用车折旧年限
  • 企业轿车报废
  • 稽查查补的税款用什么时候的税率表示
  • 销售返利的会计科目
  • 出口收入账务处理
  • 土增税土地成本分摊方法
  • 福利企业要求
  • 掌握无形资产核算方法
  • 电商平台收取会员费吗
  • 预提费用 会计准则
  • 子公司注销资产负债表如何合并
  • 免税销售额和免税额区别
  • 返回的工会经费如何做账最新
  • 企业减免所得税
  • 高技术制造企业
  • 收到转账支票怎么填写凭证
  • 生产型企业进口退税政策
  • 仓库的账怎么做
  • 文件夹如何更改图标
  • 暂估入账的处理
  • 穿越火线改名卡买完了怎么用
  • 本月计提增值税的金额是怎么得来的
  • 固定资产的认定类别
  • 存贷款基准利率和lpr
  • win10蓝屏怎么弄
  • w10引导修复工具
  • 财政补助收入核算内容
  • 加速折旧法计算公式 CFA
  • idea打开vue文件
  • 小规模纳税人工商年报网上怎么报
  • pytorch train()
  • 增值税的纳税时间是多久
  • modprobe operation not permitted
  • 固定资产盘盈的账务处理
  • mongodb的基本操作
  • 成本会计的岗位要求
  • 税控服务费电子普票能抵扣吗
  • 记账凭证的总账科目和明细科目
  • 员工探亲路费报销入哪个科目
  • sql的where条件怎么写
  • sql中判断函数
  • 哪些费用可以进研发费用
  • 建行E信通贴现需要发票吗
  • 收到三代手续费如何入账
  • 医院药品进销差价会计核算
  • 采购材料未付款填什么凭证
  • 首次购买金税盘及服务费的账务处理
  • 建筑企业包工包料业务的发票开具和涉税处理
  • 房屋租赁协议印花税怎么计算
  • 运杂费计入什么会计科目
  • 本年利润的会计科目
  • 结存成本会计分录
  • 教育行业会计科目表
  • 债务重组的适用范围
  • win8本地账户
  • macbook不可以插u盘吗
  • powerremind.exe
  • win10怎么将任务栏图标从长条改成圆形
  • linux 卸载 mysql
  • Win10专业版21h2
  • react-navigation 如何判断用户是否登录跳转到登录页的方法
  • Https联网工具类
  • 爬虫爬取微博
  • nodejs 调用python代码
  • jquery设置禁用
  • shell脚本wc
  • 深入理解python特性 pdf
  • js如何封装
  • android获取手机的基本信息
  • Javascript字符串对象函数
  • jquery 插件写法
  • 南京市国家税务局溧水分局
  • 天津本田天虹90摩托车库存
  • 地税完税证明是什么样子
  • 2018年北京个人所得税查询
  • 车辆报废补贴怎么拿
  • 免责声明:网站部分图片文字素材来源于网络,如有侵权,请及时告知,我们会第一时间删除,谢谢! 邮箱:opceo@qq.com

    鄂ICP备2023003026号

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

    友情链接: 武汉网站建设