vue3-print-nb 表格打印分页,第一页有空白的情况出现解决方法(两种:一种原生,一种基于element表格)
第一种:基于element表格分页
<template><!-- element分组打印 --><div class="hello"><button v-print="printContent">打印</button><div id="printDiv"><p>工资统计表</p><p><span>单据日期:2024-08-04 00:00:00</span><span>年份:2024</span><span>月份:8月份</span><span>项目: 山东远大新能源科技有限公司</span></p><div v-for="(item, index) in tableData" :key="`${index}`"><el-table :data="item.tableData" stripe style="width: 100%"><el-table-column prop="code" label="序号" width="180" /><el-table-column prop="name" label="姓名" width="180" /><el-table-column prop="key1" label="日工考勤" /><el-table-column prop="key2" label="日工工资" /><el-table-column prop="key3" label="承包考勤" /><el-table-column prop="key4" label="承包工资" /><el-table-column prop="key5" label="回程路费" /><el-table-column prop="key6" label="应扣项" /><el-table-column prop="key7" label="借款" /><el-table-column prop="key8" label="质保金" /><el-table-column prop="key9" label="应得工资" /><el-table-column prop="key10" label="工人签字" /></el-table><div class="fy" v-if="index!==tableData.length-1"></div></div></div></div>
</template><script>
export default {name: 'HelloWorld',props: {msg: String},data(){return{tableData:[],printContent:{id: 'printDiv',// preview: true, // 预览工具是否启用// previewTitle: '', // 预览页面的标题popTitle: '', // 打印页面的页眉}}},created(){for(let s=0;s<4;s++){const datas = {tableData:[]}for(let a=0;a<20;a++){const data = {code:(s * 20)+a + 1,name:"name" + (s * 20)+a + 1,key1:(s * 20)+a + 1,key2:(s * 20)+a + 1,key3:(s * 20)+a + 1,key4:(s * 20)+a + 1,key5:(s * 20)+a + 1,key6:(s * 20)+a + 1,key7:(s * 20)+a + 1,key8:(s * 20)+a + 1,key9:(s * 20)+a + 1,key10:(s * 20)+a + 1}datas.tableData.push(data)}this.tableData.push(datas)}}
}
</script><!-- Add "scoped" attribute to limit CSS to this component only -->
<style scoped>
h3 {margin: 40px 0 0;
}
ul {list-style-type: none;padding: 0;
}
li {display: inline-block;margin: 0 10px;
}
a {color: #42b983;
}.fy{page-break-before: always;
}
</style>
第二种基于原生表格分页
<template><!-- 原生表格打印 --><div class="hello"><button v-print="printContent" @click="printing">打印</button><div id="printDiv"><p style="text-align: center;">工资统计表</p><p><span>单据日期:2024-08-04 00:00:00</span><span>年份:2024</span><span>月份:8月份</span><span>项目: 山东远大新能源科技有限公司</span></p><table border="0" class="techniques" cellpadding="0" cellspacing="0" style="margin-top: 1px;width: 100%;border:solid 1px #f1f1f1"><thead><tr><td>序号</td><td>姓名</td><td>日工考勤</td><td>日工工资</td><td>承包考勤</td><td>承包工资</td><td>回程路费</td><td>应扣项</td><td>借款</td><td>质保金</td><td>应得工资</td><td>工人签字</td></tr></thead><tbody class="paging"><tr v-for="(item, index) in tableData" :key="`akl-${index}`"><td>{{item['code']}}</td><td>{{item['name']}}</td><td>{{item['key1']}}</td><td>{{item['key2']}}</td><td>{{item['key3']}}</td><td>{{item['key4']}}</td><td>{{item['key5']}}</td><td>{{item['key6']}}</td><td>{{item['key7']}}</td><td>{{item['key8']}}</td><td>{{item['key9']}}</td><td>{{item['key10']}}</td></tr></tbody></table>
</div></div>
</template><script>
export default {name: 'HelloWorld',props: {msg: String},data(){return{tableData:[],printContent:{id: 'printDiv',// preview: true, // 预览工具是否启用// previewTitle: '', // 预览页面的标题popTitle: '', // 打印页面的页眉},PAGE_HEIGHT:1100}},created(){for(let s=0;s<100;s++){const data = {code:s+1,name:"name" + s+1,key1:s+1,key2:s+1,key3:s+1,key4:s+1,key5:s+1,key6:s+1,key7:s+1,key8:s+1,key9:s+1,key10:s+1}this.tableData.push(data)}},methods:{printing(){const splitDoms = document.getElementsByClassName('paging')let startY = 0 // 占用A4纸的高度,从每页第一个poetry div的top值开始累加for (let i = 0; i < splitDoms.length; i++) {const splitDom = splitDoms[i]const splitValue = splitDom.getBoundingClientRect()if (startY === 0) {startY = splitValue.top}const pageHeight = splitValue.bottom - startY// 当加上当前div的高度大于A4纸高度时,给前一个div加上分页标识if (pageHeight > this.PAGE_HEIGHT) {console.log(i)startY = 0if (i > 0) {splitDoms[i - 1].style.pageBreakBefore = 'always'; // 给前一个元素添加分页符}}}
}}
}
</script><!-- Add "scoped" attribute to limit CSS to this component only -->
<style scoped>
/* 添加CSS样式以确保换页 */
@page {size: auto A4 landscape;margin-top: 20mm;
}@media print {.section {page-break-before: always;/* 在每个部分之前始终开始新页面 */margin-top: 0;}
}
td{border:solid 1px #f1f1f1;
}
</style>相关文章:
vue3-print-nb 表格打印分页,第一页有空白的情况出现解决方法(两种:一种原生,一种基于element表格)
第一种:基于element表格分页 <template><!-- element分组打印 --><div class"hello"><button v-print"printContent">打印</button><div id"printDiv"><p>工资统计表</p><p>…...
搜维尔科技:借助 Xsens中的远程人体录制功能,可以在任何位置以无限量同时捕捉无限数量演员的身体动作
借助 Xsens中的远程人体录制功能,可以在任何位置以无限量同时捕捉无限数量演员的身体动作 搜维尔科技:借助 Xsens中的远程人体录制功能,可以在任何位置以无限量同时捕捉无限数量演员的身体动作...
2024/08 近期关于AI的阅读和理解[笔记]
#Cohere 就像商业能力很强的云数仓公司 Snowflake 一样,Cohere 也采用了按需付费模式而不是按月或按年付费,而且它的付费模式很精细。Cohere 按照模型的不同能力,包括文本生成,文本总结,重新排名,文本分类…...
SmartEDA:解锁设计新境界,从工具到灵感的飞跃之旅!
在这个数据驱动的时代,每一次点击、每一次滑动都蕴含着无限的可能与洞察。然而,在众多数据分析工具中,SmartEDA不仅仅是一把解锁数据奥秘的钥匙,它更是一座桥梁,连接着冰冷的数据世界与创意无限的设计灵感之源。今天&a…...
解决Minizip压缩后解压时的头部错误问题
最近,在处理文件压缩的任务时,我遇到了一个有趣的问题。使用Minizip库进行文件压缩后,在解压过程中收到了一个关于"头部错误"的警告。尽管这个警告看似令人担忧,但解压操作最终仍然能够成功完成文件的解压。这引发了我的…...
数据库表水平分割和垂直分割?
0.数据库表的水平分割和垂直分割是两种常见的数据库优化技术,它们分别针对不同的场景和需求进行数据表的拆分。 1. 水平分割(Horizontal Splitting)主要是按照记录进行分割,即不同的记录被分开保存在不同的表中&#x…...
Linux源码阅读笔记18-插入模型及删除模块操作
基础知识 模块是一种向Linux内核添加设备驱动程序、文件系统及其他组件的有效方法,不需要编译新内核 优点 通过使用模块,内核发布者能够预先编译大量驱动程序,而不会致使内核映像的尺寸发生膨胀。内核开发者可以将实验性的代码打包到模块中&a…...
力扣面试经典算法150题:移除元素
移除元素 今日的题目依旧是力扣面试经典算法150题中数组相关的题目:移除元素 题目链接:https://leetcode.cn/problems/remove-element/description/?envTypestudy-plan-v2&envIdtop-interview-150 题目描述 给定一个排序数组 nums 和一个值 val&a…...
java关于前端传布尔值后端接收一直为false问题
前端传值: {"message":"我肚子疼","isChiefComplaint": true }后端接收对象结构体: public class SymptomInquiryDTO {private String message;private boolean isChiefComplaint; }结果后端接收到的值一直是false&…...
工具学习_CVE Binary Tool
1. 工具概述 CVE Binary Tool 是一个免费的开源工具,可帮助您使用国家漏洞数据库(NVD)常见漏洞和暴露(CVE)列表中的数据以及Redhat、开源漏洞数据库(OSV)、Gitlab咨询数据库(GAD&am…...
智观察 | 行业赛道里的AI大模型
“AI改变世界”被炒得热火朝天,结果就换来AI聊天? 实际上,在日常娱乐之下,AI正在暗暗“憋大招”,深入各行各业,发挥更专业的作用。 自动驾驶 最近“萝卜快跑”霸榜热搜长达一周,让无人驾…...
linux 进程 inode 信息获取
根据端口查找 ss -neltup | grep "$port"根据 pid 查找 ss -neltup | grep "pid$pid"根据 inode 查找 ss -neltup | grep "ino:$inode"根据pid查找进程打开的inode ls -al /proc/$pid/fd查看inode信息 cat /proc/$pid/net/tcp | grep $ino…...
计算机网络-网络层
负责在不同的网络之间转发数据包,基于数据包的 IP地址转发,每个数据包可以按照不同路径传输。网络层不负责丢包重传,以及数据包之间数据顺序的的问题。 网络设备 路由器工作在第三层:网络层,能看到网络层的地址&…...
机器学习:识别AI,GraphRAG,LoRA,线性变换,特征
1.AI识别 1.bitgrit 生成式 AI API 文档 生成式 AI 假图像检测 API 可用于以编程方式检测假图像(即由生成式 AI 创建的图像)。2.X Virality Prediction API 旨在预测推文的潜在病毒式传播力。https://bitgrit.net/api/docs/x_virality_prediction 2.Gr…...
阿里云SMS服务C++ SDK编译及调试关键点记录
一. 阿里云SMS服务开通及准备工作 在阿里云官网上完成这部分的工作 1. 申请资质 个人or企业 我这里是用的企业资质 2. 申请签名 企业资质认证成功后,会自动赠送一个用于测试的短信签名 也可以自己再进行申请,需要等待审核。 3. 申请短信模板 企…...
Flutter 正在迁移到 Swift Package Manager ,未来会弃用 CocoaPods 吗?
什么是 Swift Package Manager ?其实 Swift Package Manager (SwiftPM) 出现已经挺长一段时间了,我记得第一次听说 SwiftPM 的时候,应该还是在 2016 年,那时候 Swift 3 刚发布,不过正式出场应该还是在 2018 年的 Apple…...
PDF——分割pdf的10个工具
PDF分割器是一种可用于将PDF文档分割成更小的文档甚至单个页面的工具。分割 PDF 文档的主要原因是为了更容易共享。 但该过程的成功取决于您用于拆分 PDF 的工具。较简单的工具仅提供几个选项,可能并不适合所有类型的文档。我们将在本文中列出的 10 个最佳 PDF 分割…...
深入解析 Nginx 反向代理:配置、优化与故障排除
深入解析 Nginx 反向代理:配置、优化与故障排除 Nginx 是一个高性能的 HTTP 和反向代理服务器,它以其高并发和高可扩展性在业界享有盛誉。反向代理是 Nginx 的重要功能之一,通过反向代理可以实现负载均衡、安全代理、缓存等多种用途。本篇文…...
深度学习入门(一):感知机与输入数据
单层感知机与多层感知机 单层感知机(Single-Layer Perceptron)和多层感知机(Multi-Layer Perceptron,简称MLP)是神经网络的基本形式,用于执行各种机器学习任务,包括分类和回归。它们都基于早期…...
kubernetes 集群组件介绍
kubernetes 集群组件介绍 Kubernetes 架构 在Kubernetes(k8s)集群中,主节点(Master Node)和工作节点(Worker Node)都运行特定的软件组件,它们共同管理和运行容器化的应用程序。以下…...
【Python】 -- 趣味代码 - 小恐龙游戏
文章目录 文章目录 00 小恐龙游戏程序设计框架代码结构和功能游戏流程总结01 小恐龙游戏程序设计02 百度网盘地址00 小恐龙游戏程序设计框架 这段代码是一个基于 Pygame 的简易跑酷游戏的完整实现,玩家控制一个角色(龙)躲避障碍物(仙人掌和乌鸦)。以下是代码的详细介绍:…...
2024年赣州旅游投资集团社会招聘笔试真
2024年赣州旅游投资集团社会招聘笔试真 题 ( 满 分 1 0 0 分 时 间 1 2 0 分 钟 ) 一、单选题(每题只有一个正确答案,答错、不答或多答均不得分) 1.纪要的特点不包括()。 A.概括重点 B.指导传达 C. 客观纪实 D.有言必录 【答案】: D 2.1864年,()预言了电磁波的存在,并指出…...
质量体系的重要
质量体系是为确保产品、服务或过程质量满足规定要求,由相互关联的要素构成的有机整体。其核心内容可归纳为以下五个方面: 🏛️ 一、组织架构与职责 质量体系明确组织内各部门、岗位的职责与权限,形成层级清晰的管理网络…...
MODBUS TCP转CANopen 技术赋能高效协同作业
在现代工业自动化领域,MODBUS TCP和CANopen两种通讯协议因其稳定性和高效性被广泛应用于各种设备和系统中。而随着科技的不断进步,这两种通讯协议也正在被逐步融合,形成了一种新型的通讯方式——开疆智能MODBUS TCP转CANopen网关KJ-TCPC-CANP…...
什么是Ansible Jinja2
理解 Ansible Jinja2 模板 Ansible 是一款功能强大的开源自动化工具,可让您无缝地管理和配置系统。Ansible 的一大亮点是它使用 Jinja2 模板,允许您根据变量数据动态生成文件、配置设置和脚本。本文将向您介绍 Ansible 中的 Jinja2 模板,并通…...
代理篇12|深入理解 Vite中的Proxy接口代理配置
在前端开发中,常常会遇到 跨域请求接口 的情况。为了解决这个问题,Vite 和 Webpack 都提供了 proxy 代理功能,用于将本地开发请求转发到后端服务器。 什么是代理(proxy)? 代理是在开发过程中,前端项目通过开发服务器,将指定的请求“转发”到真实的后端服务器,从而绕…...
Springboot社区养老保险系统小程序
一、前言 随着我国经济迅速发展,人们对手机的需求越来越大,各种手机软件也都在被广泛应用,但是对于手机进行数据信息管理,对于手机的各种软件也是备受用户的喜爱,社区养老保险系统小程序被用户普遍使用,为方…...
【JVM面试篇】高频八股汇总——类加载和类加载器
目录 1. 讲一下类加载过程? 2. Java创建对象的过程? 3. 对象的生命周期? 4. 类加载器有哪些? 5. 双亲委派模型的作用(好处)? 6. 讲一下类的加载和双亲委派原则? 7. 双亲委派模…...
怎么让Comfyui导出的图像不包含工作流信息,
为了数据安全,让Comfyui导出的图像不包含工作流信息,导出的图像就不会拖到comfyui中加载出来工作流。 ComfyUI的目录下node.py 直接移除 pnginfo(推荐) 在 save_images 方法中,删除或注释掉所有与 metadata …...
MacOS下Homebrew国内镜像加速指南(2025最新国内镜像加速)
macos brew国内镜像加速方法 brew install 加速formula.jws.json下载慢加速 🍺 最新版brew安装慢到怀疑人生?别怕,教你轻松起飞! 最近Homebrew更新至最新版,每次执行 brew 命令时都会自动从官方地址 https://formulae.…...
