网页生成PDF表格诡异多出空白

环境:

axios: 0.27.0
egg: 2.35.0
pdf-lib: 1.17.1
puppeteer-core: 17.1.3

node: 16.20.0

element-plus: 2.3.2

vue: 3.2.47

背景:

一个报告页面含有多个统计表格和描述文字,生成PDF用于下载查看,页面使用vue3+element-plus开发完成,生成PDF功能是请求node接口,node服务使用puppeteer使用无头浏览器打开报告页面,生成PDF,返回文件流用于下载

问题:

table表格出现留白,可能出现在表格体头和底出现空白,空白高度不固定,表格中的数据也存在丢失

分析:

尝试1

一般页面生成PDF出现差异是页面打印样式的影响

// 是否在指定元素中插入分页符
//   avoid避免在元素内部插入分页符,auto如果必要则在元素内部插入分页符
page-break-inside: avoid;
// 是否在指定元素后面插入分页符
//   avoid避免在元素后面插入分页符,always在元素后面插入分页符
page-break-after: always;
// 是否在指定元素前面插入分页符
//   avoid避免在元素前面插入分页符,always在元素前面插入分页符
page-break-before: always;

给表格组件类设置page-break-inside: avoid;或者page-break-inside: auto;,也给tbody tr设置,也尝试去掉所有打印样式尝试,但是无论怎么修改都没有用

尝试2

node服务支持页眉,封面等传参,所以尝试修改参数看看是否有影响,结果虽然有点影响,但是并不能使问题不出现,只是出现位置略有变化,毕竟有页眉时顶部间距会大一些

尝试3

猜想会不会是包的版本不是新的,存在一些问题,于是尝试升级puppeteer-corepdf-lib但是也没有效果

尝试4

调试查看无头浏览器打开页面时页面显示是否正常,结果发现很正常,使用浏览器的自带打印也会出现表格留白问题,因为之前做过生成PDF功能并没有出现这种问题,所有这次出现问题感觉很莫名其妙,百度也没有找到解决办法,有点绝望了,基本能尝试的都试过了

尝试5

不报希望的分析DOM元素,查看到element-plusTable使用两个独立的table实现的,即头部和内容分别使用不同的表格元素实现,难道和这个有关系?之前做的项目中没有问题,其一是不存在表格,其二存在表格使用的是ant-design-vue组件库。查看ant-design-vueTable中是使用一个table实现的(最简单的表格使用,不存在固定列等,element-plus无论是否是简单表格都是使用两个独立表格)。尝试把所有表格都使用ant-design-vueTable,哈哈哈,结果惊喜发现问题解决了!!
在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/6777.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

用 Node.js 手写 WebSocket 协议

目录 引言 从 http 到 websocekt 的切换 Sec-WebSocket-Key 与 Sec-WebSocket-Accept 全新的二进制协议 自己实现一个 websocket 服务器 按照协议格式解析收到的Buffer 取出opcode 取出MASK与payload长度 根据mask key读取数据 根据类型处理数据 frame 帧 数据的发…

多种语言示例采集数据【淘宝天猫1688拼多多API系列】可高并发线程

长话短说,节约彼此宝贵时间,我们以淘宝商品详情数据为例: 请求方式:HTTPS POST GET 请求地址:https://o0b.cn/anzexi taobao.item_get 公共参数 名称类型必须描述技术交流18179014480keyString是调用key&#xf…

rust学习-智能指针

适用场景 有一个在编译时未知大小的类型,想在需要确切大小的上下文使用该类型值 示例1 无意义的例子:将一个单独的值存放在堆上并不是很有意义,b更应该放到栈上 fn main() {let b Box::new(5);// box 在 main 的末尾离开作用域时&#x…

[论文阅读笔记24]Social-STGCNN: A Social Spatio-Temporal GCNN for Human Traj. Pred.

论文: 论文地址 代码: 代码地址 作者在这篇文章中直接用GNN对目标的轨迹时空特征进行建模, 并用时序CNN进行预测, 代替了训练难度较大和速度较慢的RNN类方法. 0. Abstract 行人轨迹预测是一个比较有挑战性的任务, 有着许多的应用. 一个行人的轨迹不仅是由自己决定的, 而且受…

产品设计思考:如何平衡用户习惯和用户体验

在产品设计领域,平衡用户习惯与用户体验之间的关系是一个重要而复杂的任务。 用户习惯是指用户在长期使用产品过程中逐渐形成的一种行为模式,而用户体验则是用户在与产品交互时所感受到的整体感受。 在追求良好的用户体验的同时,还需要考虑用…

2023 年第二届钉钉杯大学生大数据挑战赛 初赛 B:美国纽约公共自行车使用量预测分析 问题二Python代码分析

2023 年第二届钉钉杯大学生大数据挑战赛 初赛 B:美国纽约公共自行车使用量预测分析 问题二 相关链接 【2023 年第二届钉钉杯大学生大数据挑战赛】 初赛 B:美国纽约公共自行车使用量预测分析 问题一Python代码分析 【2023 年第二届钉钉杯大学生大数据挑…

进阶级!美创暗数据发现和分类分级系统获中国信通院权威测评

近日,美创科技暗数据发现和分类分级系统顺利通过中国信通院“数据分类分级能力检验进阶级”认证,获颁数据安全产品检验证书。 数据分类分级进阶级评测通过主动探测识别率、被动探测识别率、用户相关数据识别准确率、分级标识准确率等技术指标的检测&…

AMEYA360代理线:ROHM开发出EcoGaN™减少服务器和AC适配器等的损耗和体积!

全球知名半导体制造商ROHM(总部位于日本京都市)面向数据服务器等工业设备和AC适配器等消费电子设备的一次侧电源*1,开发出集650V GaN HEMT*2和栅极驱动用驱动器等于一体的Power Stage IC“BM3G0xxMUV-LB”(BM3G015MUV-LB、BM3G007…

【C++】继承

🌇个人主页:平凡的小苏 📚学习格言:命运给你一个低的起点,是想看你精彩的翻盘,而不是让你自甘堕落,脚下的路虽然难走,但我还能走,比起向阳而生,我更想尝试逆风…

了解Unity编辑器之组件篇Video(二)

Video Player组件:用于在游戏中播放视频的组件。它提供了一系列属性来控制视频的播放、显示和交互。 1.Source(视频源):用于指定视频的来源。可以选择两种不同的视频源类型: (1)Vieo Clip&#…

RDIFramework.NET CS敏捷开发框架 V6.0发布(支持.NET6+、Framework双引擎,全网唯一)

全新RDIFramework.NET V6.0 CS敏捷开发框架发布,全网唯一支持.NET6,Framework双引擎,降低开发成本,提高产品质量,提升用户体验与开发团队稳定性,做软件就选RDIFramework.NET开发框架。 1、RDIFramework.NET…

《网络是怎样连接的》(二.1)

(83条消息) 《网络是怎样连接的》(一)_qq_38480311的博客-CSDN博客 本文主要取材于 《网络是怎样连接的》 第二章。 目录 (1)创建套接字 (2)连接服务器 (3)收发数据 &#xf…

jdk,jre和jvm三者的关系和区别

目录 一、三者的关系 二、JDK的概念 三、JRE的概念 四、JVM的概念 五、三者区别 一、三者的关系 从图中可以清楚地看到,他们之间的关系是JDK包含JRE, JRE又包含JVM。 因此,JDK包含JRE和JVM。 JDK JRE Java 开发工具包 [Java,Javac,Javadoc,Javap…

【stm32L152】段码屏驱动注解、MX_LCD_Init()初始化失败的解决方法

文章目录 断码屏驱动补充MX_LCD_Init()驱动初始化失败 断码屏驱动补充 已经有大神写过较详细的教程:https://blog.csdn.net/CSDN_Gao_16/article/details/115463499,但这篇博文仍然比较抽象,我看了好多遍才看明白-_-||,为了节省和…

【Java基础教程】(四十四)IO篇 · 上:解析Java文件操作——File类、字节流与字符流,分析字节输出流、字节输入流、字符输出流和字符输入流的区别

Java基础教程之IO操作 上 🔹本节学习目标1️⃣ 文件操作类:File2️⃣ 字节流与字符流2.1 字节输出流:OutputStream2.2 字节输入流:InputStream2.3 字符输出流:Writer2.4 字符输入流:Reader2.5 字节流与字符…

电脑新装系统优化,win10优化,win10美化

公司发了新的笔记本,分为几步做 1.系统优化,碍眼的关掉。防火墙关掉、页面美化 2.安装必备软件及驱动 3.数据迁移 4.开发环境配置 目录 目录复制 这里写目录标题 目录1.系统优化关掉底部菜单栏花里胡哨 2.安装必备软件及驱动新电脑安装360 1.系统优化 关掉底部菜单…

es通过rest接口_search、_delete_by_query查询与删除数据

1、rest接口查询数据 rest查询: http://localhost:9200/index_name/_search 查询表达式: {"query": {"wildcard": {"accountID": {"value": "v*"}}} }postman请求截图: 2、使用Rest接口删除数据 …

re学习(23)BUUCTF 刮开有奖(中间变量的获取)

INT_PTR __stdcall DialogFunc(HWND hDlg, UINT a2, WPARAM a3, LPARAM a4) {const char *v4; // esiconst char *v5; // ediint v7[2]; // [esp8h] [ebp-20030h] BYREF 虽然看名称不连续,但是通过看偏移地址,可知,这些变量在内存中是连续的&…

iOS--属性关键字

定义 chat: 在iOS开发中,属性关键字是用于声明类的属性(实例变量)的修饰符。属性关键字可以影响属性的访问权限、内存管理和生成相关的getter和setter方法。 属性关键字有哪些? 分类属性关键字原子性atomic、nonato…

Android ConstraintLayout使用攻略

原文链接 Android ConstraintLayout使用攻略 ConstraintLayout是新一代的布局,它汲取了众家之长,把布局的概念进行了大统一,灵活且强大,基本上可以干掉以前所有的常用布局(LinearLayout, RelativeLayout和FrameLayout…