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

vue3+ts导出PDF

import html2pdf from 'html2pdf.js';主要用这个包,HTML还包含了嵌套表格-效果,我是在弹窗里引入了子组件页面,横向打印,宽度写死为了解决表格没有自适应PDF

<div class="data-table__toolbar" style="float: right;"><el-button icon="download" @click="handleExport()">导出</el-button></div><div class="handleExport" ref="ReportRef"><div><div class="summary-row" v-if="props.type === 'department'" style="width: 1082px"><div class="row-left-depname"><span class="summary-label">部门名称</span><span class="summary-value">{{ pageObject.departmentName }}</span></div><div class="row-right"><span class="summary-label">总用电量<span style="font-size: 12px;">(kWh)</span></span><span class="summary-value">{{ pageObject.totalElectricity }}</span></div></div><!-- <div class="row-left-dep" style="margin-bottom: 10px;"><span class="summary-label">明细信息</span></div> --><!-- 主表格 --><div class="table-container" v-if="props.type === 'department'"><el-table :data="pageObject.roomElectricityList" style="width: 1160px" :show-header="false"><el-table-column><template #default="{ row }"><div class="table-data-row"><div class="table-data-row-top"><div class="data-cell building-cell">所属楼宇:{{ row.buildingName }}</div><div class="data-cell floor-cell">所属楼层:{{ row.floorName }}</div><div class="data-cell room-cell">房间名称:{{ row.roomName }}</div><div class="data-cell electricity-cell">用电量:{{ row.totalElectricity }} kWh</div></div><div class="data-cell detail-cell"><el-table :data="row.categoryElectricityList" size="small" style="width: 1160px"><el-table-column label="序号" width="60" align="center" show-overflow-tooltip><template #default="{ $index }">{{ $index + 1 }}</template></el-table-column><el-table-column label="设备类型" prop="categoryName" align="center" show-overflow-tooltip /><el-table-column label="用电量(kWh)" prop="categoryElectricity" align="center"show-overflow-tooltip><template #default="{ row }">{{ row.categoryElectricity }}</template></el-table-column><el-table-column v-if="props.range === 'today'" label="最早开始时间" prop="startTime" align="center"width="160" show-overflow-tooltip><template #default="{ row }">{{ row.startTime == null || row.startTime === '' ? '-' : row.startTime }}</template></el-table-column><el-table-column v-if="props.range === 'today'" label="最晚结束时间" prop="endTime" align="center"width="160" show-overflow-tooltip><template #default="{ row }">{{ row.endTime == null || row.endTime === '' ? '-' : row.endTime }}</template></el-table-column></el-table></div></div></template></el-table-column></el-table></div></div><div class="summary-row-dep" v-if="props.type === 'building'"><div class="row-left" style="margin-bottom: 10px;"><span class="summary-label">汇总信息</span></div><el-table ref="dataTableRef" v-loading="loading" style="width: 100%" :data="pageData" highlight-current-row><el-table-column label="所属楼宇" prop="buildingName" align="center" show-overflow-tooltip /><el-table-column label="所属楼层" prop="floorName" align="center" show-overflow-tooltip /><el-table-column label="房间名称" prop="roomName" align="center" show-overflow-tooltip /><el-table-column label="部门名称" prop="departmentName" align="center" show-overflow-tooltip /><el-table-column label="总用电量" prop="totalElectricity" align="center" show-overflow-tooltip><template #default="{ row }">{{ row.totalElectricity }} kWh</template></el-table-column></el-table><div class="row-left" style="margin: 30px 0 10px;"><span class="summary-label">明细信息</span></div><el-table :data="pageDataDetailBuilding" style="width: 100%"><el-table-column label="序号" width="60" align="center" show-overflow-tooltip><template #default="{ $index }">{{ $index + 1 }}</template></el-table-column><el-table-column label="类型" prop="categoryName" align="center" show-overflow-tooltip /><el-table-column label="用电量(kWh)" prop="categoryElectricity" align="center" show-overflow-tooltip><template #default="{ row }">{{ row.categoryElectricity }}</template></el-table-column><el-table-column v-if="props.range === 'today'" label="最早开始时间" prop="startTime" align="center"show-overflow-tooltip><template #default="{ row }">{{ row.startTime == null || row.startTime === '' ? '-' : row.startTime }}</template></el-table-column><el-table-column v-if="props.range === 'today'" label="最晚结束时间" prop="endTime" align="center"show-overflow-tooltip><template #default="{ row }">{{ row.endTime == null || row.endTime === '' ? '-' : row.endTime }}</template></el-table-column></el-table></div></div>

const handleExport = async () => {try {// 宽度没有自适应-在父组件设置了宽百分比const element = document.querySelector('.handleExport');const options = {margin: 5,filename: `房间详情_${new Date().toLocaleDateString()}.pdf`,image: { type: 'png', quality: 0.98 },html2canvas: {scale: 2,        // 提高清晰度useCORS: true,letterRendering: true,backgroundColor: '#ffffff',},jsPDF: { unit: 'mm', format: 'a4', orientation: 'landscape' }, // 设置为横向pagebreak: {// 配置自动分页规则:当元素碰到页脚/页边时自动分页mode: ['css', 'legacy'],avoid: ['.el-table__header-wrapper', '.el-table__row', '.row-left'], // 避免表头被截断}};html2pdf().from(element).set(options).save();} catch (error) {console.error('导出PDF失败', error);}
}
 <el-dialog v-model="dialog.visible" :title="dialog.title" :width="'1183px'" @close="handleCloseDialog"><RoomDetails :deptId="RoomDetailsIdDeptId || ''" :range="selectedDateShortcut" :startTime="queryParams.startTime":endTime="queryParams.endTime" :type="'department'" :roomId="RoomDetailsId" /></el-dialog>

http://www.xdnf.cn/news/20013.html

相关文章:

  • 力扣55:跳跃游戏
  • 每周资讯 | 中国游戏市场将在2025年突破500亿美元;《恋与深空》收入突破50亿元
  • 52核心52线程,Intel下一代CPU憋了个大的
  • uni-app 项目 iOS 上架踩坑经验总结 从证书到审核的避坑指南
  • 一文从零部署vLLM+qwen0.5b(mac本地版,不可以实操GPU单元)
  • 为什么要用VR全景?5个答案告诉你
  • 用户眼中的VR自来水厂之旅
  • 【Android】Room数据库的使用
  • Linux系统TCP/IP网络参数优化
  • 在Unity中实现DTLN-AEC处理音频文件的功能
  • 【论文阅读】Security of Language Models for Code: A Systematic Literature Review
  • 深度学习篇---pytorch数据集
  • 【Python】数据可视化之核密度
  • 【RNN-LSTM-GRU】第二篇 序列模型原理深度剖析:从RNN到LSTM与GRU
  • 关于Spring的八股
  • vector 题目练习 算法代码分析 代码实现
  • 鸿蒙NEXT交互机制解析:从输入设备到手势响应的全面指南
  • 深度学习-----修改学习率来优化模型的几个方法
  • redis的hash表如何扩容
  • Web与Nginx网站服务
  • 2025数学建模国赛高教社杯A题思路代码文章助攻
  • 【CS32L015C8T6】配置单片机PWM输出(内附完整代码及注释)
  • rh134第二章复习总结
  • 0904 类的继承
  • 【前端:Html】--5.进阶:APIs
  • 遇享会—金湾读书会—第四期—你好,陌生人——20250823
  • 【FPGA】单总线——DS18B20
  • 单向链表的一些基本操作(Java)
  • Python可视化93阅兵武器进化
  • Git常用命令大全:高效开发必备