vue3.0项目生成标签条形码(插件:jsbarcode)并打印(插件:Print.js)支持pda扫码枪扫描

news2024/11/16 16:33:47

文章目录

    • 功能场景
    • 生成条形码设置
    • 打印功能
    • 踩坑

功能场景

功能场景:供应链中对一些货品根据赋码规则进行赋码,赋码之后生成根据赋码结果生成条形码,执行打印功能,贴在货品之上,打印之后可以用pda的手枪进行扫描,进行上架,下架,发货,移库,等操作。

生成条形码设置

  1. 引入jsbarcode
  • 安装jsbarcode库,这个库 vue2和vue3都兼容
    npm install jsbarcode --save
    // 或
    npm i jsbarcode
    // 我目前做的项目是pnpm
    pnpm i jsbarcode
    
  • script 标签引入js文件
    <script src="JsBarcode.all.min.js"></script>
    
  1. 在需要的页面进行引入
import JsBarcode from 'jsbarcode';
  1. 创建条形码生成容器(有三种方法)
<!-- 第一种svg格式 优点清晰度高 缺点在面积小的纸张兼容性不好不能约束尺寸 不适用打印功能(天坑 踩过) -->
<svg id="svgcode"></svg>
 
<!-- 第二种img格式 优点适用打印页面能约束宽高 缺点清晰度低点 但是能扫出来  -->
<img id="imgcode" />
 
<!-- 第三种画布格式   pda扫不出来 -->  
<canvas id="canvascode"></canvas> 
  1. 参数设置(options)
option默认值类型说明
format“auto” (CODE128)String条形码的类型
width2Number每个条条的宽度,注意这里不是指整个条形码的宽度
height100Number整个条形码的宽度
displayValuetrueBoolean是否显示条形码下面的文字
fontOptions“”String设置条形码文本的粗体和斜体样式 bold / italic / bold italic
font“auto” (CODE128)String条形码的类型
format““monospace”String设置条形码显示文本的字体
textAlign“center”String条形码文本的水平对齐方式,和css中的类似: left / center / right
textPosition“bottom”String条形码文本的位置 bottom / top
textMargin2Number条形码文本 和 条形码之间的间隙大小
fontSize20Number设置条形码文本的字体大小
background“#ffffff”String (CSS color)整个条形码容器的背景颜色
lineColor“#000000”String (CSS color)条形码和文本的颜色
margin10Number整个条形码的外面距
marginTopundefinedNumber整个条形码的上边距
marginBottomundefinedNumber整个条形码的下边距
marginLeftundefinedNumber整个条形码的左边距
marginRightundefinedNumber整个条形码的右边距
validfunction(valid){}Function执行完条形码的一个回调函数,正确true 错误false
options 使用方法
let options = {
  fontSize: 12,
  background: "#cccccc"
};
JsBarcode("#barcode", "Hi world!", options); 
  1. 有批量生成和单独生成功能 批量生成存放的容器必须要是唯一的
  • 单独生成功能

    <svg class="barcodeSvg" style="margin: auto" ref="barcodeRef" />
    // js部分
    const barcodeRef = ref(null);
    const options = reactive({
        // format: 'EAN13', // 格式
        height: 68,
        width: 1.1,
        // text: text,
        fontSize: 16,
        background: '#ffffff',
        lineColor: 'black',
      });
      const render = (text) => {
        JsBarcode(barcodeRef.value, text, options);
      };
    

    在这里插入图片描述

  • 批量生成

     //批量打印的渲染DOM结构(不需要可以直接跳过)
    <div
       class="prinPage"
       v-for="(item, index) in prinList"
       :key="index">
      <img :id="'barcode-' + index"/>
    </div>
    
    let prinList = ref([]);
    let getBarcode = () => {
      let options = {
        text: "编码内容",//等同于JsBarcode第二个参数 
        fontSize: 10,//条形码下方文字的大小
        height: 60,//条形码的高度
        width: 2.5,//条形码 条的宽度不是总体的宽度 (宽度过小 扫描枪会扫描不出来 天坑我踩过)
        displayValue: false,//隐藏条形码下方文本
      };
      // JsBarcode第一个参数是容器ID名 第二个参数是条形码扫描后的内容(默认条形码的内容会在条形码下方展示) 第三个参数是方法的配置项(具体配置查看官网)
      JsBarcode("#barcode", '5', options);
      //这个函数是实现批量生成的功能(没用可以删除)
      // prinList.value.forEach((item, index) => {
      //   options.text = item.order_number;
      //   options.order_number = item.order_number;
      //   JsBarcode("#barcode-" + index, '5', options);  挂载条形码方法 注意批量生成 容器必须是唯一的 且同时都	要存在 思路容器加上循环的index即可
      // });
    };
    onMounted(() => {
      nextTick(() => {
        getBarcode(); //需要再真实DOM渲染完成后执行否则就会报错
      });
    });
    
    

jsbarcode

打印功能

项目中用的printjs插件

  1. Print.js 简介
    Print.js 主要是为了帮助我们直接在我们的应用程序中打印 PDF 文件,无需离开界面,也无需使用嵌入。 对于用户无需打开或下载 PDF 文件而只需打印它们的特殊情况。
    支持“pdf”、“html”、“image”和“json”四种打印文档类型。默认为“pdf”。
    print.js官网
  2. PrintJS参数配置表
参数默认值描述
printablenull文档来源:pdf 或图片 url、html 元素 id 或 json 数据对象。
type‘pdf’可打印类型。可用的打印选项有:pdf、html、image、json 和 raw-html。
headernull用于与 HTML、图像或 JSON 打印的可选标题。它将被放置在页面顶部。此属性将接受文本或原始 HTML。
headerStyle‘font-weight: 300;’要应用于标题文本的可选标题样式。
maxWidth800最大文档宽度(以像素为单位)。根据需要更改此设置。在打印 HTML、图像或 JSON 时使用。
cssnull应用于正在打印的 html 的 css 文件 URL。值可以是具有单个 URL 的字符串或具有多个 URL 的数组。
stylenull自定义样式的字符串。应用于正在打印的 html。
scanStylestrue设置为 false 时,库将不会处理应用于正在打印的 html 的样式。在使用 css 参数时很有用。
targetStylenull默认情况下,库仅在打印 HTML 元素时处理某些样式。此选项允许您传递要处理的样式数组。例如:[‘padding-top’, ‘border-bottom’]
targetStylesnull与 targetStyle 相同,但是,这将处理任意范围的样式。例如:[‘border’, ‘padding’],将包括’border-bottom’、‘border-top’、‘border-left’、‘border-right’、‘padding-top’等。也可以通过 [’*'] 来处理所有样式。
ignoreElements【】传入打印父 html 元素时应忽略的 html id 数组。使其不打印。
propertiesnull打印 JSON 时使用。这些是对象属性名称。
gridHeaderStyle‘font-weight: bold;’打印 JSON 数据时网格标题的可选样式。
gridStyle‘border: 1px solid lightgray; margin-bottom: -1px;’打印 JSON 数据时网格行的可选样式。
repeatTableHeadertrue打印 JSON 数据时使用。设置为 false 时,数据表标题将仅显示在第一页。
showModalnull启用此选项可在检索或处理大型 PDF 文件时显示用户反馈。
modalMessageRetrieving Document…’当 showModal 设置为 true 时向用户显示的消息。
onLoadingStartnull加载 PDF 时要执行的功能
onLoadingEndnull加载 PDF 后要执行的功能
documentTitleDocument’打印 html、图像或 json 时,这将显示为文档标题。
fallbackPrintablenull打印 pdf 时,如果浏览器不兼容(检查浏览器兼容性表),库将在新选项卡中打开 pdf。这允许您传递要打开的不同pdf文档,而不是在printable中传递的原始文档。如果您在备用pdf文件中注入javascript,这可能很有用。
onPdfOpennull打印 pdf 时,如果浏览器不兼容(检查浏览器兼容性表),库将在新选项卡中打开 pdf。可以在此处传递回调函数,该函数将在发生这种情况时执行。在某些情况下,如果要处理打印流、更新用户界面等,它可能很有用。
onPrintDialogClosenull在浏览器打印对话框关闭后执行的回调函数。
onErrorerror => throw error发生错误时要执行的回调函数。
base64false在打印作为 base64 数据传递的 PDF 文档时使用。
honorMarginPadding (已弃用)true这用于保留或删除正在打印的元素中的填充和边距。有时这些样式设置在屏幕上很棒,但在打印时看起来很糟糕。您可以通过将其设置为 false 来将其删除。
honorColor (已弃用)false若要以彩色打印文本,请将此属性设置为 true。默认情况下,所有文本都将以黑色打印。
font(已弃用)TimesNewRoman’打印 HTML 或 JSON 时使用的字体。
font_size (已弃用)12pt’打印 HTML 或 JSON 时使用的字体大小。
imageStyle(已弃用)width:100%;’打印图像时使用。接受具有要应用于每个图像的自定义样式的字符串。
  1. 安装/引入
  • 下载print.js

    从官网下载print.js,将下载的 print.js 放入项目utils文件夹
    可以全局引入即(在main.js中引入),也可以在需要的文件里面引入import Print from ‘./utils/print’

  • 使用npm安装print插件

    安装print-jsnpm install print-js --save
    可以全局引入即(在main.js中引入),也可以在需要的文件里面引入 import Print from ‘print-js’

  1. 使用-“html”类型
    // html
    <div id="printDiv" style="text-align: center" class="barcode-container">
      <div style="font-size: 16px">{{ name }}</div>
      <div style="font-size: 14px">
      ......
      </div>
      <svg class="barcodeSvg" style="margin: auto" ref="barcodeRef" />
    </div>
    // js
     printJS({
        printable: 'printDiv', // 'printFrom', // 标签元素id
         type: 'html',
         header: '', // '表单',
         targetStyles: ['*'],
         style: '@page {margin:0 10mm};', // 可选-打印时去掉眉页眉尾
         ignoreElements: ['no-print'], // ['no-print'],有class="no-print"标识就不会被打印
         font: 'Microsoft YaHei',
         scanStyles: false,
         onPrintDialogClose: async function () {
           // 在浏览器打印对话框关闭后执行的回调函数。可以进行打印成功操作
           createMessage.success('打印成功!');
         },
         onError: function () {
           console.error('打印失败!');
           // 这里可以执行打印失败后的逻辑
           createMessage.warning('打印失败!');
         },
       });
    
    点击打印按钮,弹出打印预览界面,右边栏调整打印界面。
    假设出现打印不全的问题,可以通过缩放来进行设置,数值越小,缩放的越小。
  2. 其他Type示例
    • pdf
    printJS('docs/printjs.pdf')
    // 或
    printJS({printable:'docs/printjs.pdf', type:'pdf', showModal:true})
    
    • image单个图像
    	printJS('images/print-01-highres.jpg', 'image')
    // 或
    printJS({printable: 'images/print-01-highres.jpg', type: 'image', header: 'My cool image header'})
    
    
    • image多个图像
    printJS({
    	printable: ['images/print-01-highres.jpg', 'images/print-02-highres.jpg', 'images/print-03-highres.jpg'],
    	type: 'image',
    	header: 'Multiple Images',
    	imageStyle: 'width:50%;margin-bottom:20px;'
    })
    
    • json
    someJSONdata = [
        {
           name: 'John Doe',
           email: 'john@doe.com',
           phone: '111-111-1111'
        },
        {
           name: 'Barry Allen',
           email: 'barry@flash.com',
           phone: '222-222-2222'
        },
        {
           name: 'Cool Dude',
           email: 'cool@dude.com',
           phone: '333-333-3333'
        }
     ]
      
    printJS({
        printable: someJSONdata,
        properties: ['name', 'email', 'phone'],
        type: 'json',
        gridHeaderStyle: 'color: red;  border: 2px solid #3971A5;',
        gridStyle: 'border: 2px solid #3971A5;'
    })
    

踩坑

  1. 打印之后,用pda扫描,扫描不出码。
    在打印中使用条形码就不一样了 我们需要注意条形码容器的类型 可以回到创建创建条形码生成容器(有三种方法)
    注意:条形码的内容会影响条形码的长度 内容文本越长 条形码宽度越宽
  2. svg格式无法进行宽度约束 ,一旦文本内容过长条形码就会溢出屏幕(踩坑)
    解决方案:采用img格式放弃svg格式 约束img格式的宽高
  3. 用到的扫码枪是PDA 可以在扫描出电脑上的但是无法扫码打印纸上的(踩坑)
    解决方案:options 的width配置项 不同打扫码枪能识别的条形码的条width宽度不一样
  4. 手机能识别出条形码但是PDA扫码枪识别不了(踩坑)
    解决方案 在同样的条形码条宽度手机的条形码识别宽度要小于扫描枪的识别宽度 可以配置options 的width配置项来解决
  5. 报如下错误
    在这里插入图片描述
    解决方案:错误解译,没有容器,渲染生成的条形码
    条形码容器渲染完之后,才能执行下面 JsBarcode(barcodeRef.value, text, options);
    • 生命周器,vue2.0 在mounted中,vue3.0在onMounted中设置
    • 用nextTick处理,页面DOM渲染完字后,再执行方法内部的代码

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

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

相关文章

蓝桥杯2024年第十五届省赛真题-数字接龙

思路&#xff1a;DFS&#xff0c;因为输入的i&#xff0c;j的顺序导致&#xff0c;方向向量中x是行编号&#xff0c;y是列编号。方向向量可能和直觉上不同。 错的 //int dx[8]{0,1,1,1,0,-1,-1,-1}; //int dy[8]{1,1,0,-1,-1,-1,0,1}; 对的 int dx[]{-1,-1,0,1,1,1,0,-1}; int…

Hotcoin4月16日上新热门资产:头部RWA技术提供方Centrifuge(CFG)

Hotcoin持续为全球600万用户发掘优质潜力资产&#xff0c;热门币种交易上热币。一文快速了解今日上新资产:Centrifuge(CFG) 推荐指数 8.2 交易对 CFG/USDT 交易时间 4月16日 19:00 资产赛道 RWA 项目简介 Centrifuge是一个去中心化资产融资协议&#xff0c;专注于释放现实世界资…

计算机视觉——基于OpenCV和Python进行模板匹配

模板匹配&#xff1f; 模板匹配是它允许在一幅较大的图像中寻找是否存在一个较小的、预定义的模板图像。这项技术的应用非常广泛&#xff0c;包括但不限于图像识别、目标跟踪和场景理解等。 目标和原理 模板匹配的主要目标是在一幅大图像中定位一个或多个与模板图像相匹配的…

05.MySQL索引事务

1. 索引 1.1 概念 索引是一种特殊的文件&#xff0c;包含着对数据表里所有记录的引用指针。 可以对表中的一列或多列创建索引&#xff0c;并指定索引的类型&#xff0c;各类索引有各自的数据结构实现 1.2 作用 数据库中的表、数据、索引之间的关系&#xff0c;类似于书架上的…

链表创建的陷阱与细节

链表是线性表的一种&#xff0c;它在逻辑结构上是连续的&#xff0c;在物理结构上是非连续的。 也就是说链表在物理空间上是独立的&#xff0c;可能是东一块西一块的。如下顺序表和链表在内存空间上的对比&#xff1a; 而链表的每一块空间是如何产生联系实现在逻辑结构上是连续…

pycharm永久改变sys.path

进入pycharm&#xff0c;选择file->settings->interpreter 在这里选择图中所示show all 再单击左上角减号右侧第三个&#xff0c;长得像思维导图的图标 之后添加你的路径&#xff0c;确认即可

vim使用指南:指令、配置、插件、异常

文章目录 vi / vim命令模式插入模式光标定位复制粘贴删除撤销替换删除查找 底行模式保存退出行号查找多开其他 视图模式注释 异常vim配置vim插件 vi / vim vim的本质是一个编辑器&#xff0c;是一种多模式的编辑器&#xff0c;只能进行读写操作&#xff0c;不能进行编译编辑器…

jmeter-while控制器用法

condition中添加while结束循环的条件&#xff0c;以下语句的意思是&#xff0c;当percent等于100时&#xff0c;就跳出while循环继续执行 ${__javaScript("${percent}" ! 100)} 举例&#xff0c;以下方法是getPercent为一个引出的异步接口&#xff0c;该接口的返回包…

uni-admin中引入uni-cms的缺少schema及uni-media-library缺少云函数的问题

1. 在管理端运行提示一些表找不到&#xff0c;因为是uni-admin关联的uni-starter的服务空间&#xff0c;在uni-admin的uniCloud中没有内容&#xff0c;在uni-starter的uniCloud中也没有发现对应的表&#xff0c;后面干脆在云端找到对应的表之后新建了&#xff0c;然后再下载到本…

盲人导航功能特点:革新出行体验的实时避障应用深度解析

作为一名资深记者&#xff0c;我有幸亲历并详尽报道一款专为盲人群体设计的导航应用叫做蝙蝠避障&#xff0c;它不仅提供了精准的路线指引&#xff0c;更创新性地融入了实时避障功能。这款应用凭借其盲人导航功能特点&#xff0c;正以前所未有的方式提升盲人的出行自由度与安全…

https证书是什么,怎么申请

https证书的名称有很多&#xff0c;其本名是SSL/TLS数字证书&#xff0c;本意是实现https访问的证书&#xff0c;故而很多人会称之为https证书&#xff0c;又因为其需要部署于域名服务器之上&#xff0c;所以也有人称之为域名证书。 所以https证书又名SSL证书、域名证书等。 h…

【Web】Dest0g3 520迎新赛 题解(全)

目录 phpdest EasyPHP SimpleRCE funny_upload EasySSTI middle PharPOP ezip NodeSoEasy Really Easy SQL&easysql EzSerial ljctr phpdest 尝试打pearcmd&#xff0c;但似乎没有写文件的权限 ?config-create/&file/usr/local/lib/php/pearcmd.php&a…

FreeRTOS_day3

1.总结任务调度算法之间的区别&#xff0c;重新实现一遍任务调度算法的代码。 抢占式调度&#xff1a;高优先级的任务可以打断低优先级的任务执行 时间片轮转&#xff1a;相同优先级的任务有相同的时间片&#xff08;1ms&#xff09;&#xff0c;时间片耗尽任务会强制退出 协…

2024 抖音欢笑中国年(五):Wasm、WebGL 在互动技术中的创新应用

前言 随着 Web 前端技术的不断发展&#xff0c;越来越多的新兴技术方案被引入到 Web 开发中&#xff0c;其中 Wasm 和 WebGL 作为前端领域的两大利器&#xff0c;为开发者带来了更多的可能性。 本文将结合2024 年抖音欢笑中国年的部分项目&#xff0c;重点介绍如何利用 Wasm 和…

前端三剑客 HTML+CSS+JavaScript ② HTML相关概念

他们这样形容我 是暴雨浇不灭的火 —— 24.4.18 学习目标 理解 HTML的概念 HTML的分类 HTML的关系 HTML的语义化 应用 HTML骨架格式 sublime基本使用 一、HTML初识 HTML指的是超文本标记语言&#xff0c;是用来描述网页的一种语言 HTML不是一种编程语言&#xff0c;而是一种标记…

C语言开发的医学影像数字化PACS系统源码 带三维重建和还原的PACS源码

C语言开发的医学影像数字化PACS系统源码 带三维重建和还原的PACS源码 PACS全称Picture Archivingand Communication Systems。它是应用在医院影像科室的系统&#xff0c;主要的任务就是把日常产生的各种医学影像&#xff08;包括核磁&#xff0c;CT&#xff0c;超声&#xf…

CSS基础+基本选择器和复合选择器(如果想知道CSS的基础+基本选择器和复合选择器知识点,那么只看这一篇就足够了!)

前言&#xff1a;在我们学习完了html之后&#xff0c;我们就要开始学习三大件中的第二件—CSS&#xff0c;CSS 可以控制多重网页的样式和布局&#xff0c;也就是将我们写好的html代码加上一层华丽的衣裳&#xff0c;使网页变得更加精美。 ✨✨✨这里是秋刀鱼不做梦的BLOG ✨✨✨…

halcon瓶身表面缺陷检测-滤波差值法

前言 在瓶子&#xff0c;灌装产业中&#xff0c;通常需要瓶子的瓶身进行检测&#xff0c;防止其出现划痕&#xff0c;破洞等情况。但是通常瓶身出现的缺陷都非常小&#xff0c;往往只是一些细小的划痕&#xff0c;这种情况就非常容易被误判为OK情况。 所以采用滤波差值法&…

Stability AI 发布 SD3 API:开启人工智能新篇章

文章目录 1.Stable Diffusion 3 API开放了! 2.Stability AI Document地址3.获取API Key4.API方式调用SD3出图接口地址接口请求规范接口请求响应结果 5.Stable Diffusion 3.0、Stable Image Core、Fooocus 2.3.1、MidJounery效果查看 1.Stable Diffusion 3 API开放了! Stabilit…

js高级 笔记02

目录 01 object提供的一些静态方法 02 词法作用域 03 作用域链 04 arguments的使用 05 开启严格模式 06 高阶函数 07 闭包 01 object提供的一些静态方法 Object.create() 对象继承 Object.assign(对象1,对象2) 对象合并 可以将对象2 里面的可枚举属性和自身的属性合并到…