前端打印表格功能+单号生成条形码

第一种打印方法:不需要下载任何插件

浏览器自带打印功能(不太推荐),原理是生成新的页面后被打印,当打印完成或者取消打印时,页面需要强制刷新,否则页面无法回显。

//打印功能
print() {var print = document.getElementById("print"); //获取到你表格绑定的idvar newContent = print.innerHTML;var oldContent = document.body.innerHTML;document.body.innerHTML = newContent;document.getElementsByTagName('body')[0].style.zoom=0.8;window.print();window.location.reload();//将原油页面还原document.body.innerHTML = oldContent;document.getElementsByTagName('body')[0].style.zoom=1;},

需要打印的页面:

点击打印后原始页面会被覆盖,如图:

第二种打印方法):下载print-js第三方库 + 这里顺带将列表内的单号生成条形码一同打印

第一步:下载 print-js 打印库 和  jsbarcode 条码库
npm install print-js --save
npm install jsbarcode --save
第二步:在需要打印的组件中,引入print-js,并在打印事件的处理方法中编写代码来实现打印功能。
import printJS from 'print-js'
import JsBarcode from 'jsbarcode'
printTable() {// 创建一个新的div来放置每一行数据及其对应的条形码const printContent = document.createElement('table');const title =document.createElement('tr');//自定义打印表格的表头const t1= document.createElement('th')t1.textContent='检测单号'title.appendChild(t1);const t2= document.createElement('th')t2.textContent='进场批次'title.appendChild(t2);const t3= document.createElement('th')t3.textContent='商户名称'title.appendChild(t3);printContent.appendChild(title);// 遍历表格数据,为每一行检测单号生成条形码,并将数据和条形码放置在div中this.tableData.forEach(item => {const row = document.createElement('tr');// 添加条形码const barcodeContainer = document.createElement('img');//第二个参数表示需要生成条形码的数据JsBarcode(barcodeContainer, item.detectionCode, {format: 'CODE128', // 条形码格式displayValue: true, // 显示条形码数值height:40 //条形码高度});row.appendChild(barcodeContainer);// 根据所需打印内容添加数据项const dataBatch= document.createElement('td');dataBatch.textContent = item.batch;row.appendChild(dataBatch);const tenantName = document.createElement('td');tenantName.textContent = item.tenantName;row.appendChild(tenantName);// 将每一行数据添加到打印内容div中printContent.appendChild(row);});// 将打印内容添加到body中document.body.appendChild(printContent);// 执行打印内容,这里加了一个定时器是为了解决在打印表格时条形码有时候会不显示的问题setTimeout(()=>{//解决打印时会导致样式丢失问题const style = '@media print {td{text-align:center;width:200px} }';//这里设置打印内容的样式printJS({printable: printContent,type: 'html',style: style,header: null,base64: true,}, () => {// 打印完成后需要进行的操作});},1000)//移除打印内容document.body.removeChild(printContent);},

需要打印的页面:

点击打印按钮后不会覆盖原始页面:

过程中遇到的问题:

在生成条形码这一块遇到问题:点击打印按钮后弹出打印内容的页面,发现有的时候条形码不显示,可能是因为printJS执行打印操作时,某些条形码元素还未完全加载完毕导致的。为了解决这个问题,尝试使用setTimeout函数延迟一段时间后再执行打印操作,以确保页面元素加载完全。

在上一个问题得到解决的同时产生了一个新问题:就是打印内容的页面样式丢失了(原本我的样式是在插入每一行元素前设置的),网上找了一圈方案终于得到了解决,可能是因为在延迟执行打印操作时,页面布局和样式的计算还未完成。于是我将样式写在了setTimeout里面,并将样式赋给了 printJS 里的style属性 ,最终得到了解决。

其中用到了JsBarcode库来生成条形码,printJS用来实现打印功能。

printJS官方文档: https://printjs.crabbly.com/

JsBarcode官方文档:https://lindell.me/JsBarcode/

JsBarcode里的参数设置:

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

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

相关文章

【Docker】Linux路由连接两个不同网段namespace,连接namespace与主机

如果两个namespace处于不同的子网中,那么就不能通过bridge进行连接了,而是需要通过路由器进行三层转发。然而Linux并未像提供虚拟网桥一样也提供一个虚拟路由器设备,原因是Linux自身就具备有路由器功能。 路由器的工作原理是这样的&#xff…

算法刷题记录6 - 反转链表和链表两两交换

哎,都两周没刷题了,罪过 第一题 2023.10.29 周日 上链接 206. 反转链表 难度:简单 代码随想录 文档 代码随想录 视频 这道题说难不难,但是也不知道是太久没写没感觉了还是确实细节多,不看视频确实感觉不出写的问题在…

边缘计算技术的崭新篇章:赋能未来智能系统

边缘计算是近年来云计算和物联网技术发展的重要趋势。通过将数据处理和分析从云端迁移到设备边缘,边缘计算能够实现更低的延迟和更高的数据安全。本文将探索边缘计算技术的最新进展及其在不同行业中的应用场景。 1. 实时数据处理与决策 在需要快速响应的场景中&…

理解android AIDL

理解Android AIDL 在研究了 Android Frameworks 中进程间通信(IPC)相关的一些程序后,了解到 Android 系统中进程间通信的机制绝大部分就是 Binder,主要表现在系统服务的调用,app进程间功能调用等。而 Android 上实现 …

虚幻C++基础 day1

虚幻C概念 虚幻C类的继承结构 虚幻引擎C类层级结构(Hierarchy) 这些基本类又派生出了很多子类,例: UE中的反射与垃圾回收系统 例如一个创建了一个Actor类,有一个Actor类型指针去指向这个Actor类,如果的指针被销毁了&#xff…

38基于matlab的期货预测,利用PSO优化SVM和未优化的SVM进行对比,得到实际输出和期望输出结果。

基于matlab的期货预测,利用PSO优化SVM和未优化的SVM进行对比,得到实际输出和期望输出结果。线性核函数、多项式、RBF核函数三种核函数任意可选,并给出均方根误差,相对误差等结果,程序已调通,可直接运行。 3…

谈API接入必须了解的各大API调用电商API应用场景

哪些业务场景可以使用API接口? (1)爬虫业务:在爬虫业务中,使用API接口可以帮助解决IP限制、反爬虫策略等问题,提高爬取数据的效率和稳定性。 (2)网络安全:在网络安全领…

虚拟化、容器与Docker基本介绍以及安装部署(Docker 基本管理)

虚拟化、容器与Docker基本介绍以及安装部署(Docker 基本管理) 1、Docker 概述1.1Docker与虚拟机的区别1.2容器在内核中支持2种重要技术:1.3Docker核心概念 2、安装docker服务docker安装步骤详解 3、 网络优化4、docker基本命令4.1查看镜像——…

代码随想录算法训练营第三十九天丨 动态规划part02

62.不同路径 思路 动态规划 机器人从(0 , 0) 位置出发,到(m - 1, n - 1)终点。 按照动规五部曲来分析: 确定dp数组(dp table)以及下标的含义 dp[i][j] :表示从(0 ,0)出发&#…

荣电集团与钕希科技签署全面战略合作

10月26日,荣电集团(以下简称荣电)与钕希科技南京有限公司(以下简称钕希科技)今天在合肥市签署全面战略合作协议,联合进军混合现实(Mixed Reality,以下简称MR)空间计算高科…

leetcode-字符串

1.反转字符串LeetCode344. 20230911 难度为0,此处就不放代码了 注意reverse和swap等一系列字符串函数什么时候该用,记一记库函数 swap可以有两种实现,涨知识了,除了temp存值还可以通过位运算:s[i] ^ s[j]; s[j] ^ s[i…

【c++|opencv】二、灰度变换和空间滤波---1.灰度变换、对数变换、伽马变换

every blog every motto: You can do more than you think. https://blog.csdn.net/weixin_39190382?typeblog 0. 前言 灰度变换、对数变换、伽马变换 1. 灰度变换 #include <iostream> #include <opencv2/opencv.hpp>using namespace std; using namespace c…

03_Flutter自定义下拉菜单

03_Flutter自定义下拉菜单 在Flutter的内置api中&#xff0c;可以使用showMenu实现类似下拉菜单的效果&#xff0c;或者使用PopupMenuButton组件&#xff0c;PopupMenuButton内部也是使用了showMenu这个api&#xff0c;但是使用showMenu时&#xff0c;下拉面板的显示已经被约定…

Redis(10)| I/O多路复用(mutiplexing)

上文select/epoll 在上文《Redis&#xff08;09&#xff09;| Reactor模式》 思考问题可以使用I/O多路复用技术解决多多客户端TCP连接问题&#xff0c;同时也提到为了解决最早期的UNIX系统select调用存在的四个问题。 select(int nfds, fd_set *r, fd_set *w, fd_set *e, stru…

动手学深度学习——第七次学

LeNet&#xff08;LeNet-5&#xff09;由两个部分组成&#xff1a; 卷积编码器和全连接层密集块 卷积把高宽不断变小&#xff0c;把通道数逐渐增多&#xff0c;&#xff08;最后高宽会变成&#xff0c;通道会变得很大&#xff0c;然后做全连接进行输出&#xff09;通道信息可以…

7+共病思路。WGCNA+多机器学习+实验简单验证,易操作

今天给同学们分享一篇共病WGCNA多机器学习实验的生信文章“Shared diagnostic genes and potential mechanism between PCOS and recurrent implantation failure revealed by integrated transcriptomic analysis and machine learning”&#xff0c;这篇文章于2023年5月16日发…

人到中年应该怎么交朋友

听人劝、吃饱饭,奉劝各位小伙伴,不要订阅该文所属专栏。 作者:不渴望力量的哈士奇(哈哥),十余年工作经验, 跨域学习者,从事过全栈研发、产品经理等工作,现任研发部门 CTO 。荣誉:2022年度博客之星Top4、博客专家认证、全栈领域优质创作者、新星计划导师,“星荐官共赢计…

虚拟机克隆

linux系统的组成&#xff1b; 主根目录和根目录; 所有的根目录都包含在主根目录中&#xff1b; 根目录&#xff1a; /root /home/xxx,yyy,zzz;主根目录&#xff1b;/ 一个重要的子目录&#xff1a;etc passwd, 保存了所有的三类用户信息&#xff1b;bashrc, 可以设置别名 及…

HarmonyOS开发:基于http开源一个网络请求库

前言 网络封装的目的&#xff0c;在于简洁&#xff0c;使用起来更加的方便&#xff0c;也易于我们进行相关动作的设置&#xff0c;如果&#xff0c;我们不封装&#xff0c;那么每次请求&#xff0c;就会重复大量的代码逻辑&#xff0c;如下代码&#xff0c;是官方给出的案例&am…

阿里云推出通义千问App,提供全方位的协助

&#x1f989; AI新闻 &#x1f680; 阿里云推出通义千问App&#xff0c;提供全方位的协助 摘要&#xff1a;阿里云旗下大模型通义千问App登陆各大安卓应用市场&#xff0c;具有超大规模预训练模型&#xff0c;可在创意文案、办公助理、学习助手、趣味生活等方面协助用户。功…