原生JS使用PrintJs进行表格打印 -- 遇到的问题总结

2024-02-08 10:52

本文主要是介绍原生JS使用PrintJs进行表格打印 -- 遇到的问题总结,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

需求1:表格自动分页之后,表头在每一页都需要显示

html中表头增加 thead 标签
css样式新增:

thead {display: table-header-group; /* 这个属性使thead总是在新的page-break之后重新开始 */
}

需求2:表格自动分页之后,页头需要在每一页都显示

因为表头能重复显示,所以我是直接将需要重复的页头也放在表头中,然后给一个高度进行样式的调整。

不论是多表头还是只有一个表头,表头的高度要小于整页高度的四分之一,表头过高会让浏览器认为是一种错误,不重复显示表头

需求3:表格自动分页之后,页尾需要在每一页都显示

html中增加 tfoot 标签,使用空格来进行高度占位。

 <tfoot><tr><td><div class="footer-space">&nbsp;</div><div class="footer-space">&nbsp;</div><div class="footer-space">&nbsp;</div><div class="footer-space">&nbsp;</div><div class="footer-space">&nbsp;</div><div class="footer-space">&nbsp;</div></td></tr>
</tfoot>

css样式:

/* 页尾内容固定显示在底部 */
.printFooter {position: fixed;bottom: 0;
}

完整代码:

<!DOCTYPE html>
<html lang="en">
<head><meta charset="UTF-8"><meta name="viewport" content="width=device-width, initial-scale=1.0"><title>打印页面</title><style>/* 点击的按钮 */#btn {margin: 20px;padding: 20px 40px;font-size: 24px;}</style>
</head>
<body><button id="btn">点击按钮进行打印</button><div id="printJS-form"><!-- 打印单中间 表格部分--><div class="printBody"><table class="printBody-table"><thead class="printBody-tableThead"></thead><tbody class="printTbody"><tr><!-- 表格数据 --><td>1234567890zxcvbnmnmm,Print.js can be used to quickly print any image on your page, by passing the image url. This can be useful when you have multiple images on the screen, using a low resolution version of the images. When users try to print the selected image, you can pass the high resolution url to Print.js.</td><td>M</td><td>1</td><td>2</td><td>3</td></tr></tbody><tfoot><tr><td><div class="footer-space">&nbsp;</div><div class="footer-space">&nbsp;</div><div class="footer-space">&nbsp;</div><div class="footer-space">&nbsp;</div><div class="footer-space">&nbsp;</div><div class="footer-space">&nbsp;</div></td></tr></tfoot></table></div><!-- 打印单尾部 --><div class="printFooter"><div class="printFooter-tips">尾部</div></div></div><!-- 引入printJs --><script type="text/javascript" src="https://cdn.bootcdn.net/ajax/libs/print-js/1.6.0/print.js"></script><script>// 动态的数据,这里是示例,如果示例的数据的键不确定,需要对整体的数据重新进行处理,以下演示为数据的键是固定的let resData = {"tableData": [{"a": "1","b" : '动态数据-YVHYVHYVHYVHYVHYVHYVH',"c" : '动态数据-456',"d" : '动态数据-M',"e" : '动态数据-Y',},{"a": "1","b" : '动态数据-YVHYVHYVHYVHYVHYVHYVH',"c" : '动态数据-456',"d" : '动态数据-M',"e" : '动态数据-Y',}]}// 点击按钮之后,首先进行动态数据的插入,然后再调用printJs进行打印let btnDom = document.getElementById("btn")btnDom.onclick=function() {// 将动态的数据拿到后,进行模板数据的插入handleTemplate()// 打印printJS({printable: 'printJS-form', // 数据源:pdf or image的url,html类型则填打印区域元素id,json类型则是数据object。type: 'html', // 默认pdf,可选类型:pdf, html, image, jsonscanStyles: false, 	//此属性默认为true,printJs会自动扫描当前html结构所用的样式表style: stringCssFunc(), // 打印的内容是没有css样式的,此处需要string类型的css样式})}// 插入动态的数据var handleTemplate = () => {// 打印单页眉的数据动态添加let tHeadDom = document.getElementsByClassName('printBody-tableThead')[0]let printHeadHtml = `<tr><th>1</th><th>2</th><th>3</th><th>4</th><th>5</th></tr>`tHeadDom.innerHTML = printHeadHtml// 打印单中间的表格let printTbody = document.getElementsByClassName('printTbody')[0]let tempHtml = '' // 表格中的数据for(let i = 0; i < 100;i++){let item = resData.tableData[i] || {}tempHtml += `<tr><td>${item.a || 'a'}</td><td>${item.b || 'b'}</td><td>${item.c || 'c'}</td><td>${item.d || 'd'}</td><td>${item.e || 'e'}</td></tr>`}printTbody.innerHTML = tempHtml}// 样式代码var stringCssFunc = function() {return `@page {margin: 10mm;};.printBody-table thead tr:last-child {border: 1px solid #333;  }.printBody-table thead tr:last-child th {border-right: 1px solid #333;  }.printBody-table tbody tr td {white-space: wrap;text-align: center;border: 1px solid #333;}/*  **************************   打印单尾部 start ********************************* */.printFooter {width: calc(100% - 80px);padding: 20px;}.printHead-single {display: flex;}.printFooter-tips{margin-bottom: 10px;font-size: 12px;}/*  **************************   打印单尾部 end ********************************* *//* 页眉、页脚设置 */@media print {.printBody-table {page-break-inside: avoid;border-collapse: collapse;}/* 保证thead始终出现在新页顶部 */.printBody-table thead {display: table-header-group; /* 这个属性使thead总是在新的page-break之后重新开始 */}.printFooter {position: fixed;bottom: 0;}}`}</script>
</body>
</html>

最终效果:

在这里插入图片描述

这篇关于原生JS使用PrintJs进行表格打印 -- 遇到的问题总结的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/690797

相关文章

C++使用栈实现括号匹配的代码详解

《C++使用栈实现括号匹配的代码详解》在编程中,括号匹配是一个常见问题,尤其是在处理数学表达式、编译器解析等任务时,栈是一种非常适合处理此类问题的数据结构,能够精确地管理括号的匹配问题,本文将通过C+... 目录引言问题描述代码讲解代码解析栈的状态表示测试总结引言在编程中,括号匹配是一个常见问题,尤其是在

Python调用Orator ORM进行数据库操作

《Python调用OratorORM进行数据库操作》OratorORM是一个功能丰富且灵活的PythonORM库,旨在简化数据库操作,它支持多种数据库并提供了简洁且直观的API,下面我们就... 目录Orator ORM 主要特点安装使用示例总结Orator ORM 是一个功能丰富且灵活的 python O

Nginx设置连接超时并进行测试的方法步骤

《Nginx设置连接超时并进行测试的方法步骤》在高并发场景下,如果客户端与服务器的连接长时间未响应,会占用大量的系统资源,影响其他正常请求的处理效率,为了解决这个问题,可以通过设置Nginx的连接... 目录设置连接超时目的操作步骤测试连接超时测试方法:总结:设置连接超时目的设置客户端与服务器之间的连接

Java中String字符串使用避坑指南

《Java中String字符串使用避坑指南》Java中的String字符串是我们日常编程中用得最多的类之一,看似简单的String使用,却隐藏着不少“坑”,如果不注意,可能会导致性能问题、意外的错误容... 目录8个避坑点如下:1. 字符串的不可变性:每次修改都创建新对象2. 使用 == 比较字符串,陷阱满

Python使用国内镜像加速pip安装的方法讲解

《Python使用国内镜像加速pip安装的方法讲解》在Python开发中,pip是一个非常重要的工具,用于安装和管理Python的第三方库,然而,在国内使用pip安装依赖时,往往会因为网络问题而导致速... 目录一、pip 工具简介1. 什么是 pip?2. 什么是 -i 参数?二、国内镜像源的选择三、如何

使用C++实现链表元素的反转

《使用C++实现链表元素的反转》反转链表是链表操作中一个经典的问题,也是面试中常见的考题,本文将从思路到实现一步步地讲解如何实现链表的反转,帮助初学者理解这一操作,我们将使用C++代码演示具体实现,同... 目录问题定义思路分析代码实现带头节点的链表代码讲解其他实现方式时间和空间复杂度分析总结问题定义给定

Linux使用nload监控网络流量的方法

《Linux使用nload监控网络流量的方法》Linux中的nload命令是一个用于实时监控网络流量的工具,它提供了传入和传出流量的可视化表示,帮助用户一目了然地了解网络活动,本文给大家介绍了Linu... 目录简介安装示例用法基础用法指定网络接口限制显示特定流量类型指定刷新率设置流量速率的显示单位监控多个

JavaScript中的reduce方法执行过程、使用场景及进阶用法

《JavaScript中的reduce方法执行过程、使用场景及进阶用法》:本文主要介绍JavaScript中的reduce方法执行过程、使用场景及进阶用法的相关资料,reduce是JavaScri... 目录1. 什么是reduce2. reduce语法2.1 语法2.2 参数说明3. reduce执行过程

如何使用Java实现请求deepseek

《如何使用Java实现请求deepseek》这篇文章主要为大家详细介绍了如何使用Java实现请求deepseek功能,文中的示例代码讲解详细,感兴趣的小伙伴可以跟随小编一起学习一下... 目录1.deepseek的api创建2.Java实现请求deepseek2.1 pom文件2.2 json转化文件2.2

mybatis和mybatis-plus设置值为null不起作用问题及解决

《mybatis和mybatis-plus设置值为null不起作用问题及解决》Mybatis-Plus的FieldStrategy主要用于控制新增、更新和查询时对空值的处理策略,通过配置不同的策略类型... 目录MyBATis-plusFieldStrategy作用FieldStrategy类型每种策略的作