当前位置: 首页 > 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.dtcms.com/a/338198.html

相关文章:

  • GPT-5博士级AI使用教程及国内平替方案
  • 活到老学到老之vue-vben-admin项目安装
  • WordPress (LNMP 架构) 一键部署 Playbook
  • django+Vue3实现前后端分离式实时聊天室
  • Java面试考点
  • ​Kali Linux 环境中的系统配置文件与用户配置文件大全
  • MySQL 自增主键满了咋办?
  • PowerBI CrossFilter解决关联关系过滤传播问题
  • 对象存储 COS 端到端质量系列 —— 终端网络诊断工具
  • 【大模型】RAG
  • 明远智睿 RK3588:以技术突破解锁开发新维度
  • 【Python】源码安装python后报错:ModuleNotFoundError: No module named ‘_lzma‘
  • Jenkins持续集成系统
  • github 如何在 readme 显示Star History
  • NL2SQL:从自然语言到SQL查询的深度解析
  • PostgreSQL 从参数调优到 AI 诊断的实战指南
  • Unity开发中的浅拷贝与深拷贝
  • Java获取京东评论数据的实战指南
  • 06.文件权限管理
  • quic协议与应用开发
  • 视觉语言导航(12)——LLM-VLN 4.2
  • 如何部署 PHPWind 8.5 UTF8 论坛?从下载到安装全流程(附安装包下载)
  • GraphPad Prism10.1安装包免费下载中文版下载以及详细安装教程!!
  • Tomcat Wrapper源码解析:深入理解Servlet生命周期与请求分发机制
  • SQL Server 基本语法
  • NodeJs 桌面开发学习 electron.js (一)
  • 黑马java入门实战笔记
  • 【从0到1制作一块STM32开发板】8. PCB添加丝印
  • c++中的auto自动类型推导
  • JVM-类加载详情