当前位置: 首页 > news >正文

前端处理导出PDF。Vue导出pdf

前言:该篇主要是解决一些简单的页面内容导出为PDF

1.安装依赖

使用到两个依赖,项目目录下运行这两个

//页面转换成图片
npm install --save html2canvas 
//图片转换成pdf
npm install jspdf --save 

2.创建通用工具类exportPdf.js文件

可以保存在工具类目录下;

// 导出页面为PDF格式
import html2Canvas from 'html2canvas'
import JsPDF from 'jspdf'export function getPdf(title, id) {// 参数校验if (!title || !id) {console.error('Title and ID are required.')return}const element = document.querySelector(`#${id}`)if (!element) {console.error(`Element with ID "${id}" not found.`)return}html2Canvas(element, {allowTaint: true,useCORS: true,scale: 2}).then(function (canvas) {const contentWidth = canvas.widthconst contentHeight = canvas.height// A4纸尺寸 (单位: pt)const a4Width = 595.28const a4Height = 841.89// 设置外边距 (单位: pt)const marginLeft = 20const marginTop = 20const marginRight = 20const marginBottom = 20// 计算可用内容区域const availableWidth = a4Width - marginLeft - marginRightconst availableHeight = a4Height - marginTop - marginBottom// 计算缩放比例,使内容宽度适配可用区域const scale = availableWidth / contentWidth// 按比例计算图像在页面上的尺寸const imgWidth = contentWidth * scaleconst imgHeight = contentHeight * scale// 计算每页可容纳的高度(考虑上下边距)const pageHeight = availableHeightlet leftHeight = imgHeightlet position = 0const pageData = canvas.toDataURL('image/jpeg', 0.95)const PDF = new JsPDF('', 'pt', 'a4')if (leftHeight < pageHeight) {// 内容高度小于页面可用高度,直接添加图片(带外边距)PDF.addImage(pageData, 'JPEG', marginLeft, marginTop, imgWidth, imgHeight)} else {// 内容高度大于页面可用高度,分页处理while (leftHeight > 0) {// 添加当前页面图像(带外边距)PDF.addImage(pageData, 'JPEG', marginLeft, marginTop + position, imgWidth, imgHeight)leftHeight -= pageHeightposition -= a4Height// 如果还有剩余内容,添加新页面if (leftHeight > 0) {PDF.addPage()}}}PDF.save(title + '.pdf')}).catch(function (error) {console.error('PDF导出失败:', error)})
}

3.Demo例子

<template><div><!-- 容器 --><div id="pdfHtml" ref="printHtml"><h1>这是一个Demo。</h1></div><button @click="exportPDF">PDF导出</button></div>
</template>
<script>
import { getPdf } from '@/utils/exportPdf';
export default {methods: {// 导出pdfexportPDF() {getPdf('关键因素', 'pdfHtml');}}
}
</script>
http://www.xdnf.cn/news/1321489.html

相关文章:

  • 王树森深度强化学习DRL(三)围棋AlphaGo+蒙特卡洛
  • STRIDE威胁模型
  • 新手向:Java方向讲解
  • Python实战--基于Django的企业资源管理系统
  • 块体不锈钢上的光栅耦合表面等离子体共振的复现
  • 后端通用基础代码
  • 在嵌入式单片机开发中,通过校验和或者校验码来比对程序版本好有何优劣势
  • 【OLAP】trino安装和基本使用
  • 【完整源码+数据集+部署教程】无人机目标检测系统源码和数据集:改进yolo11-efficientViT
  • Linux网络服务(一)——计算机网络参考模型与子网划分
  • Linux bash核心介绍及目录命令
  • Android中使用RxJava实现网络请求与缓存策略
  • Git-2025-0818
  • 数据结构:查找表
  • 开源im即时通讯软件开发社交系统全解析:安全可控、功能全面的社交解决方案
  • 从零到GPT:Transformer如何引领大模型时代
  • Nextcloud 私有云部署:cpolar 内网穿透服务实现安全远程文件访问
  • 4G高负荷解决方案
  • 《红色脉-络:一部PLMN在中国的演进史诗 (1G-6G)》 第6篇 | 专题:核心网的第一次革命——从电路交换到“用户/控制面分离”
  • python-----机器学习中常用的数据预处理
  • 英特尔公司Darren Pulsipher 博士:以架构之力推动政府数字化转型
  • Apache RocketMQ,构建云原生统一消息引擎
  • 云原生事件驱动引擎(RocketMQ-EventBridge)应用场景与技术解析
  • Qt5基础控件详细讲解
  • Spring Boot 实用小技巧:多级缓存(Caffeine + Redis)- 第545篇
  • 民俗博物馆如何选择数字技术?交互体验如何创新文化传播方式?
  • mac查看nginx安装位置 mac nginx启动、重启、关闭
  • bun + vite7 的结合,孕育的 Robot Admin 【靓仔出道】(十三)
  • Git+Jenkins 基本使用
  • Windows桌面自动化的革命性突破:深度解析Windows-MCP.Net Desktop模块的技术奥秘