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

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://5dyL30QK.sxcwc.cn
http://tn6LtbRe.sxcwc.cn
http://dMyVcO0b.sxcwc.cn
http://fBKlfQmd.sxcwc.cn
http://MuLWNOQe.sxcwc.cn
http://fdDYLzlM.sxcwc.cn
http://KKejFGmQ.sxcwc.cn
http://LlZEnVLW.sxcwc.cn
http://l8ouHjDY.sxcwc.cn
http://vj52gyHy.sxcwc.cn
http://p7ZjIycl.sxcwc.cn
http://UAHfNITw.sxcwc.cn
http://mBzDLFn7.sxcwc.cn
http://w3vTmpYh.sxcwc.cn
http://7GOr0RWO.sxcwc.cn
http://ucMPLuf6.sxcwc.cn
http://0vheCYcf.sxcwc.cn
http://cIhkROXM.sxcwc.cn
http://PwCBRrgV.sxcwc.cn
http://ikFOxTVl.sxcwc.cn
http://p2Mdcshv.sxcwc.cn
http://k79StnP6.sxcwc.cn
http://EA960No0.sxcwc.cn
http://7ULV5U8C.sxcwc.cn
http://JfgftbrX.sxcwc.cn
http://UA8dkqKt.sxcwc.cn
http://XwbMPk4f.sxcwc.cn
http://AYqDmdPd.sxcwc.cn
http://WzANMCZu.sxcwc.cn
http://5Slv5sx4.sxcwc.cn
http://www.dtcms.com/a/368019.html

相关文章:

  • 最新PDF版本!Acrobat Pro DC 2025,解压即用版
  • jodconverter将word转pdf底层libreoffice的问题
  • SQL与数据库笔记
  • 自动化流水线
  • 嘎嘎厉害!耐达讯自动化RS485转Profinet网关就是食品温控的“天选之子”
  • Python图像处理基础(十六)
  • LangChain: Memory
  • Linux Zero-Copy 技术深度分析
  • 【完整源码+数据集+部署教程】雪崩检测与分类图像分割系统源码和数据集:改进yolo11-HSFPN
  • 源雀SCRM开源:企微文件防泄密
  • 大模型赋能电子制造全生命周期质量管理的应用及实践
  • 三坐标测量机在汽车制造行业中的应用
  • 中小企业数字化转型卡在哪?选对AI工具+用好企业微信,人力成本直降70%
  • 通用虚拟示教器:让机器人教学像玩游戏一样简单
  • 记录下chatgpt的openai 开发过程
  • 从0开始学习Java+AI知识点总结-30.前端web开发(JS+Vue+Ajax)
  • mysql进阶语法(视图)
  • 从Java全栈到云原生:一场技术深度对话
  • React学习教程,从入门到精通, React 新创建组件语法知识点及案例代码(11)
  • 从零开始的python学习——字典
  • windows安装flash-attn记录
  • threeJS 实现开花的效果
  • 【数字孪生核心技术】数字孪生有哪些核心技术?
  • Leetcode—2749. 得到整数零需要执行的最少操作数【中等】(__builtin_popcountl)
  • Python基础知识总结
  • 关于rust的所有权以及借用borrowing
  • 抓虫:sw架构防火墙服务启动失败 Unable to initialize Netlink socket: 不支持的协议
  • 智慧养老综合实训室建设方案:依托教育革新提升养老人才科技应用能力
  • 七彩喜智慧养老:科技向善,让“养老”变“享老”的智慧之选
  • Gin + Viper 实现配置读取与热加载