Vue3+hooks快速接入Lodop打印插件

news2024/11/30 0:46:15

文章目录

  • 前言
  • 一、下载并修改LodopFuncs.js
    • 1.1 调整LodopFuncs.js代码, 暴露 getLodop
  • 二、自定义useLodop hooks抽取共用的lodop逻辑
    • CheckLodopIsOk
    • getPrinterArr
    • printLabel
    • printA4Paper
  • 总结


前言

上面文章《Vue快速接入菜鸟打印组件》讲了vue3如何快速集成菜鸟打印组件,这篇讲讲vue3如何集成lodop组件。


一、下载并修改LodopFuncs.js

在官网 Lodop 官网 下载入门案例,其中有LodopFuncs.js

在这里插入图片描述
我们需要的文件 LodopFuncs.js ,其他案例也可以稍微运行看看。
在这里插入图片描述

1.1 调整LodopFuncs.js代码, 暴露 getLodop

我们在尾部加上一下代码,暴露Lodop的初始化函数。

export { getLodop }

在这里插入图片描述

二、自定义useLodop hooks抽取共用的lodop逻辑

在项目的hooks 文件夹下创建一个hook。根据自己的项目,按实际情况命名。
这里是 useLodop.ts

// 引入上一步骤创建的lodopfuns
import { getLodop } from '@/utils/lodop/LodopFuncs'
import { reactive } from 'vue'
import { ElMessage } from 'element-plus'

export function useLodop() {
  const variable = reactive({
    printerArr: []
  })
  let LODOP = null
  const CheckLodopIsOk = async () => {
    try {
      LODOP = getLodop()
      if (LODOP.VERSION) {
        if (LODOP.CVERSION) {
          return true
        } else {
          return true
        }
      }
    } catch (err) {
      return false
    }
  }
  const printLabel = async (options: {
    strBASE64Code: string
    xxxx: string
    rawRow: {
      paperType: PaperTypeEnum
    }
  }) => {
    LODOP = getLodop()
    if (!LODOP) {
      return ElMessage.warning('请安装/启动Lodop 打印插件')
    }
    LODOP.PRINT_INIT('')
    // 根据打印的类型,获取设置的打印机字符串。根据自己的实际业务修改
    const printerStr = await getPrinter(options?.xxx, options?.rawRow?.paperType)
    if (!LODOP.SET_PRINTER_INDEX(printerStr)) {
      return Promise.resolve(false)
    }
    if ((options.rawRow.paperType ) == 'Label_4X6') {
      LODOP.SET_PRINT_PAGESIZE(1, '100mm', '152.4mm', '') // 纸张方向大小
    } else {
      LODOP.SET_PRINT_PAGESIZE(3, '', '', 'A4') // 纸张方向大小
    }
    LODOP.ADD_PRINT_IMAGE(0, 0, '100%', '100%', options?.strBASE64Code)
    // 设置打印的显示比例
    LODOP.SET_PRINT_STYLEA(0, 'Stretch', 1)
    // LODOP.PREVIEW();
    const isPrintSuccess = LODOP.PRINT()
    return Promise.resolve(!!isPrintSuccess )
  }

  const printA4Paper = async (options: {
    rawObj: Object
    xxxx: string
    TableId: string
  }) => {
    LODOP = getLodop()
    if (!LODOP) {
      return ElMessage.warning('请安装/启动Lodop 打印插件')
    }
    LODOP.PRINT_INIT('')
    const printerStr = await getPrinter(options?.xxxx, 'A4')
    if (!LODOP.SET_PRINTER_INDEX(printerStr)) {
      return Promise.resolve(false)
    }
    // 条形码
    LODOP.ADD_PRINT_BARCODE('20mm', 32, '40%', 100, '128B', `${options.rawObj?.barcode}`)
    LODOP.SET_PRINT_STYLEA(0, 'ItemType', 1)
    // LODOP.ADD_PRINT_BARCODE(5,734,168,146,"QRCode","1234567890版本7的最大值是122个字符123123");
    LODOP.SET_PRINT_STYLE('FontSize', 12)
    LODOP.SET_PRINT_PAGESIZE(3, 0, 0, 'A4') // 纸张方向大小
    LODOP.SET_PRINT_STYLEA(0, 'TableHeightScope', 3) //高度包含页尾
    //  ADD_PRINT_HTM(intTop,intLeft,intWidth,intHeight,strHtml)增加超文本项
    LODOP.SET_PRINT_COPIES(1) // 份数
    // LODOP.SET_PRINT_STYLE('Bold', 1)
    LODOP.SET_PRINT_STYLE('FontSize', '12')
    LODOP.ADD_PRINT_TEXT(
      '20mm',
      '115mm',
      '100mm',
      '5mm',
      `Warehouse:${options.rawObj?.baseWarehouseVo?.name}`
    )
    // 放在某处后面表示每一页都有这个内容 , 类似页眉页脚用法
    LODOP.SET_PRINT_STYLEA(0, 'ItemType', 1)
   }

    // 表格部分
    LODOP.ADD_PRINT_HTM(
      '59mm',
      '0mm',
      'RightMargin:2mm',
      '100%',
      document.getElementById(`${options.TableId}`).innerHTML
    )
    // LODOP.ADD_PRINT_TABLE(
    //   '59mm',
    //   '0mm',
    //   '198mm',
    //   '275mm',
    //   document.getElementById(`${options.TableId}`)?.innerHTML
    // )
    // 页码
    LODOP.ADD_PRINT_HTM(
      '6mm',
      '90%',
      '100mm',
      20,
      "<span tdata='pageNO'>##</span> of <span tdata='pageCount'> ##</span>"
    )
    LODOP.SET_PRINT_STYLEA(0, 'ItemType', 1)

    const isPrintSuccss = LODOP.PRINT() // 直接打印
    return Promise.resolve(!!isPrintSuccss)
  }

  const getPrinterArr = () => {
    variable.printerArr = []
    if (!CheckLodopIsOk()) {
      ElMessage.warning('请安装/启动Lodop打印插件')
      return false
    }
    let counter = LODOP.GET_PRINTER_COUNT() // 获取打印机个数
    for (let i = 0; i < counter; i++) {
      var curPrintName = LODOP.GET_PRINTER_NAME(i)
      variable.printerArr.push({
        name: curPrintName,
        label: curPrintName
      })
    }
    localStorage.setItem('PRINTER_ARR', JSON.stringify(variable.printerArr || []))
    return true
  }
  return {
    getPrinterArr,
    printLabel,
    printA4Paper,
    CheckLodopIsOk
  }
}

上述代码大概暴露4个方法分别为

CheckLodopIsOk

CheckLodopIsOk : 判断lodop 插件是否安装、启动了,相应的逻辑处理,一般插件都没开启直接提示就好

getPrinterArr

getPrinterArr :这个是判断有没有可以用打印机,需要安装了lodop插件后,调用他的api 获取。这里获取后储存了起来方便其他页面调用

printLabel

printLabel : 这个方法用来处理base64 数据,打印标签, 其中 LODOP.SET_PRINT_STYLEA(0, ‘Stretch’, 1) 用来调整显示比例

printA4Paper

printA4Paper: 这个是打印A4纸质的表单,常见的仓库里的拣货单等


总结

本文讲解Vue3 项目如何从零到1集成lodop 实现标签打印与A4纸质类型的打印。

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

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

相关文章

蓝桥杯专题-真题版含答案-【骑士走棋盘】【阿姆斯壮数】【Shell 排序法 - 改良的插入排序】【合并排序法】

Unity3D特效百例案例项目实战源码Android-Unity实战问题汇总游戏脚本-辅助自动化Android控件全解手册再战Android系列Scratch编程案例软考全系列Unity3D学习专栏蓝桥系列ChatGPT和AIGC &#x1f449;关于作者 专注于Android/Unity和各种游戏开发技巧&#xff0c;以及各种资源分…

字符迷宫(期末考模拟题)

很有趣的一道题 难点主要在于对于 * 的处理 题目描述的是可以多次匹配相同的字母&#xff0c;这就涉及到两个方面&#xff1a; 一是这个匹配的相同的字母如何储存 二是当你’ * ‘位置递归结束的时候&#xff0c;你该什么时候变回‘ * ’号 这里给出我的思路&#xff0c;如…

索尼(ILCE-7M3)MP4文件只能播放前两分钟修复案例

索尼的ILCE-7M3是一款经典设备&#xff0c;其HEVC编码效果是比较不错的&#xff0c;因此受到很多专业人士的青睐。之前我们说过很多索尼摄像机断电生成RSV文件修复的案例&#xff0c;今天来讲一个特殊的&#xff0c;文件已经正常封装但仅能播放前两分钟多一点的画面。 故障文件…

用23种设计模式打造一个cocos creator的游戏框架----(十六)亨元模式

1、模式标准 模式名称&#xff1a;亨元模式 模式分类&#xff1a;结构型 模式意图&#xff1a;运用共享技术有效地支持大量细粒度的对象 结构图&#xff1a; 适用于&#xff1a; 1、一个应用程序使用了大量的对象. 2、完全由于使用大量的对象&#xff0c;造成很大的存储开…

信号与线性系统预备训练3——MATLAB软件在信号与系统中的应用初步

信号与线性系统预备训练3——MATLAB软件在信号与系统中的应用初步 The Preparatory training3 of Signals and Linear Systems 对应教材&#xff1a;《信号与线性系统分析&#xff08;第五版&#xff09;》高等教育出版社&#xff0c;吴大正著 一、目的 1.熟悉和回顾MATLAB…

MYSQL练题笔记-高级字符串函数 / 正则表达式 / 子句-简单3题

这个系列先写了三题&#xff0c;比较简单写在一起。 1.修复表中的名字相关的表和题目如下 看题目就知道是有关字符串函数的&#xff0c;于是在书里查询相关的函数&#xff0c;如下图&#xff0c;但是没有完全对口的函数&#xff0c;所以我还是去百度了。 然后发现结合上面的4个…

C#教程(三):字符串的各种用法

在C#中&#xff0c;字符串&#xff08;string 类型&#xff09;是一种常用的数据类型&#xff0c;用于存储和操作文本数据。以下是一些C#中字符串的常见用法 1、输出任意的字符串长度 代码 #region 输出任意的字符串长度 Console.WriteLine("请输入你心中想到的名字&…

html+css+javascript实现渐隐轮播

实现效果&#xff1a; 图片自动轮播&#xff0c;点击左右按钮会操作图片向前或向后&#xff0c;图片与小圆点相互呼应&#xff0c;具有交互效果。 编写思想&#xff1a; 实现交互时使用了排他思想&#xff0c;同选项卡的功能&#xff1b; 自动轮播采用了setInterval()&#…

Python 全栈体系【四阶】(六)

第四章 机器学习 五、线性模型 1. 概述 线性模型是自然界最简单的模型之一&#xff0c;它描述了一个&#xff08;或多个&#xff09;自变量对另一个因变量的影响是呈简单的比例、线性关系。例如&#xff1a; 住房每平米单价为 1 万元&#xff0c;100 平米住房价格为 100 万…

发现隐藏的 Web 应用程序漏洞

随着 Web 2.0 的扩展&#xff0c;近年来社交媒体平台、电子商务网站和电子邮件客户端充斥着互联网空间&#xff0c;Web 应用程序已变得无处不在。 国际知名网络安全专家、东方联盟创始人郭盛华透露&#xff1a;‘应用程序消耗和存储更加敏感和全面的数据&#xff0c;它们成为对…

MIT6.S081-实验准备

实验全程在Vmware虚拟机 (镜像&#xff1a;Ubuntu-20.04-beta-desktop-amd64) 中进行 一、版本控制 1.1 将mit的实验代码克隆到本地 git clone git://g.csail.mit.edu/xv6-labs-2020 1.2 修改本地git配置文件 创建github仓库&#xff0c;记录仓库地址 我的仓库地址就是htt…

国内最好的开源MES/免费MES/低代码MES

一、系统概述&#xff1a; 万界星空科技免费MES、开源MES、商业开源MES、市面上最好的开源MES、MES源代码、适合二开的开源MES、功能最全的开源MES、好看的数字大屏、开源自动排班系统、开源质检系统。 1.万界星空开源MES制造执行系统的Java开源版本。 开源mes系统包括系统管…

Java与前端:风云变幻的技术之路

前言 近日&#xff0c;有关“Java已死、前端已凉”的言论在IT圈内流传甚广&#xff0c;引起了广泛关注和讨论。这究竟是真相还是一场对技术人员的焦虑贩卖呢&#xff1f;让我们一同探讨这场技术风暴带来的变化与机遇&#xff0c;并分享一些实用的建议。 一、技术变革的常态 …

0x31 质数

0x31 质数 定义&#xff1a; 若一个正整数无法被除了1和它自身之外的任何自然数整除&#xff0c;则称该数为质数&#xff08;或素数&#xff09;&#xff0c;否则则称该正整数为合数。 在整个自然数集合中&#xff0c;质数的数量不多&#xff0c;分布比较稀疏&#xff0c;对…

Support Vector Machine(SVM)——支持向量机

1.从逻辑回归到SVM 回顾一下逻辑回归的模型 然后经过sigmoid函数得到预测y1的概率&#xff0c;sigmoid函数如下图 对于单个样本来说损失函数如下 当一个输入的真实标签为1时&#xff0c;损失函数就只剩&#xff0c;如左图所示,我们想要让&#xff0c;来使损失函数尽可能的小 对…

实验报告九、使用枚举法验证6174猜想

一、实验目的&#xff1a; 1、了解6174猜想的内容。 2、熟练使用选择结构和循环结构。 3、了解标准库itertools中combinations()函数的用法。 4、熟练使用字符串的join&#xff08;方法。 5、熟练使用内置函数int()、str()、 sorted()。 二、实验内容&#xff1a; 1955…

机器学习的数据管理

.机器学习的数据管理注意事项 机器学习的生命周期包括如下部分 (1).业务的理解&#xff0c;机器学习问题框架 (2).数据理解和收集 (3).模型的训练和评估 (4)模型部署 (5).模型监控 (6).业务衡量 数据管理和机器学习的生命周期的2&#xff0c;3&#xff0c;4个阶段有关。…

Pikachu漏洞练习平台之暴力破解(基于burpsuite)

从来没有哪个时代的黑客像今天一样热衷于猜解密码 ---奥斯特洛夫斯基 Burte Force&#xff08;暴力破解&#xff09;概述 “暴力破解”是一攻击具手段&#xff0c;在web攻击中&#xff0c;一般会使用这种手段对应用系统的认证信息进行获取。 其过程就是使用大量的认证信息在认…

【STM32】STM32学习笔记-EXTI外部中断(11)

00. 目录 文章目录 00. 目录01. 中断系统02. 中断执行流程03. STM32中断04. NVIC基本结构05. NVIC优先级分组06. EXTI简介07. EXTI基本结构08. AFIO复用IO口09. EXTI框图10. 计数器模块11. 旋转编码器简介12. 附录 01. 中断系统 中断&#xff1a;在主程序运行过程中&#xff0…

使用PyQt5连接mysql数据库实现用户管理(增,删,改,查,附代码和完整界面)

一&#xff1a;环境搭建 首先本地需要安装python,PyQt5环境&#xff0c;我是用pip安装的 python -m pip install PyQt5 或者 pip install PyQt5 python -m pip install PyQt5-tools 或者 pip install PyQt5-tools 如果网络不好&#xff0c;还可以使用其他源 pip install PyQt…