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

news2024/11/19 9:21:31

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

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

//打印功能
print() {
      var print = document.getElementById("print"); //获取到你表格绑定的id
      var 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.coloradmin.cn/o/1150053.html

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

相关文章

3D RPG Course | Core 学习日记二:PolyBrush / Pro Builder构建场景

前言 我们这次将要学习的是使用PolyBrush和Pro Buillder构建精美的游戏场景。 PolyBrush 在Package Manager中导入的时候要注意,将Shader Examples(URP)也一起导入,不然PolyBrush对URP渲染的素材进行操作时会出现问题。 导入完成之后在Tools里将…

EDUSRC-记一次登录过程中的信息泄露

语法 org"China Education and Research Network Center" && body"登录" 起因 在进行登录测试的时候发现一处登录框 闲来无事抓个包输入个账号密码 问题是后端没抓到包,但是前端跳出了提示,账号密码错误 这极大的可能是…

c语言运算符表达式

c语言运算符表达式 c语言运算符表达式 c语言运算符表达式一、算数运算符二、赋值运算符【 - * / %】三、比较运算符【 > < > < !】 一、算数运算符 算数运算符&#xff1a; 用于各类数值运算。包括加()、减(-)、乘(*)、除(/)、求余(或称模运算&#xff0c;%)、…

【HTML】HTML基础知识扫盲

1、什么是HTML&#xff1f; HTML是超文本标记语言&#xff08;Hyper Text Markup Language&#xff09;是用来描述网页的一种语言 注意&#xff1a; HTML不是编程语言&#xff0c;而是标记语言 HTML文件也可以直接称为网页&#xff0c;浏览器的作用就是读取HTML文件&#xff…

使用@antv/g2plot实现文字权重分布划分图

最后效果展示 安装antv/g2plot npm i antv/g2plot 使用&#xff0c;示例是使用vue3viteunocss <template><div class"w-440px h-200px" id"wordcloudG2"></div> </template><script setup lang"ts"> import { …

vant4的基础用法

基于vue3和ts平台来使用 这篇文章会手把手的教你如何用vant开发h5 介绍 Vant 是一个轻量、可靠的移动端组件库&#xff0c;基于 Vue3&#xff0c;由有赞开发并且维护。有赞作为早期以 H5 商城、小程序商城做微信生态的起家&#xff0c; Vant 一直是这些产品的主要组成部分&am…

“软件开发报价混乱?看这一篇就够了!“

大家好&#xff0c;今天我们要聊一聊软件开发报价的那些事儿。相信很多企业和个人都曾为此犯过愁&#xff0c;看着报价单上一串串数字&#xff0c;心里直犯嘀咕&#xff1a;这价格靠谱吗&#xff1f;是不是被忽悠了&#xff1f;别急&#xff0c;今天我们就来揭开软件开发报价的…

小型内衣裤洗衣机哪个牌子好?迷你洗衣机品牌推荐

近日&#xff0c;国内著名的电子商务平台公布了“内衣洗衣机产业趋势”的研究报告。该报告指出&#xff0c;由于消费者对生活质量的要求越来越高&#xff0c;内衣洗衣机的行业也有了长足的发展&#xff0c;特别是在今年以来&#xff0c;内衣洗衣机的销售额同比上涨了830%&#…

PDF文件恢复?记住这3个就够了!

“各位大佬&#xff01;我想问问如果不小心删除了电脑中的PDF文件&#xff0c;还有什么方法将它们找回来吗&#xff1f;我丢失的是比较重要的文件&#xff0c;希望大家帮我出出主意&#xff01;” PDF文件现在越来越成为受用户青睐的一种文件保存方式。使用PDF格式的文件能更有…

Anaconda下载安装以及环境变量的配置

一、下载安装anaconda 可以在官网下载&#xff1a;Anaconda | The World’s Most Popular Data Science Platform 也直接用清华源镜像进行下载&#xff1a;Index of /anaconda/archive/ | 清华大学开源软件镜像站 | Tsinghua Open Source Mirror 按照需要选则自己需要的版本…

2023年Q3户外装备市场行业分析报告(京东数据分析):同比增长7%,品牌化发展是核心

近年来&#xff0c;户外运动在我国不少地方蓬勃兴起&#xff0c;发展至今&#xff0c;户外运动早已不是聚焦专业领域的小众群体活动&#xff0c;现已发展成为当下热门的大众休闲活动&#xff0c;参与人群愈发广泛&#xff0c;而这股热潮也带动着相关产业的发展。 今年Q3&#x…

基于非对称加密证书(算法)机制实现的单向身份鉴别和双向身份鉴别原理

单向认证一般是指客户端确认服务端身份&#xff0c;而双向认证一般是指客户端和服务器端都需要验证对方的身份。 双向认证的客户端需要从服务器端下载服务器的公钥证书进行验证&#xff0c;还需要把客户端的公钥证书上传到服务器端给服务器端进行验证&#xff0c;等双方都认证…

内网穿透的应用-如何在Termux 中使用SFTP 文件传输并结合内网穿透实现远程传输

文章目录 1. 安装openSSH2. 安装cpolar3. 远程SFTP连接配置4. 远程SFTP访问4. 配置固定远程连接地址 SFTP&#xff08;SSH File Transfer Protocol&#xff09;是一种基于SSH&#xff08;Secure Shell&#xff09;安全协议的文件传输协议。与FTP协议相比&#xff0c;SFTP使用了…

Linux C语言开发-D15一维数组

数组&#xff1a;有一定顺序关系的数据类型相同变量的变量集合 形式&#xff1a;<存储类型> <数据类型> <数组名> [<表达式>] 数组名表示内存首地址&#xff0c;是一个地址常量&#xff0c;sizeof(数组名)是数组占用的总内存空间 编译时分配连续内存…

yum 命令

基本语法 yum [选项] [参数] 选项说明 -y 对所有提问都回答“yes” 参数说明 实操 yum list | grep firefox yum -y remove firefox yum -y install firefox

C++设计模式_20_Composite 组合模式

Composite 组合模式和后面谈到的Iterator&#xff0c;Chain of Resposibility都属于“数据结构”模式。Composite 组合模式核心是通过多态的递归调用解耦内部和外部的依赖关系。 文章目录 1. “数据结构”模式1.1 典型模式 2. 动机( Motivation )3. 模式定义4. Composite 组合模…

LeetCode刷题---简单组(五)

文章目录 &#x1f352;题目一 58. 最后一个单词的长度&#x1f352;解法一&#x1f352;解法二&#x1f352;题目二 66. 加一&#x1f352;解法一&#x1f352;题目三 67. 二进制求和&#x1f352;解法一 &#x1f352;题目一 58. 最后一个单词的长度 给你一个字符串 s&#x…

阿里8年经验之谈 —— Python实现性能自动化测试竟然如此简单!

一、思考❓❔ 1.什么是性能自动化测试? 性能 系统负载能力超负荷运行下的稳定性系统瓶颈自动化测试 使用程序代替手工提升测试效率性能自动化 使用代码模拟大批量用户让用户并发请求多页面多用户并发请求采集参数&#xff0c;统计系统负载能力生成报告 2.Python中的性能自动化…

【多线程相关其三】多线程使用

1.为什么要使用多线程&#xff1f; 线程在程序中是独立的、并发的执行流。与分隔的进程相比&#xff0c;进程中线程之间的隔离程度要小&#xff0c;它们共享内存、文件句柄 和其他进程应有的状态。 因为线程的划分尺度小于进程&#xff0c;使得多线程程序的并发性高。进程在执行…

winodws10系统C盘文件夹目录讲解

背景&#xff1a; 电脑安装系统一段时间后&#xff0c;发现C盘的空间越来越小&#xff0c;于是乎&#xff0c;想了解一下C盘文件目录结构&#xff0c;删除一下非必要的文件&#xff0c;同时增强一些操作系统的知识。 目前我的C盘目录如下&#xff1a; 如果开启显示隐藏文件&…