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

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

@TOC


前言

上面文章《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纸质类型的打印。

相关文章
|
4天前
|
前端开发 JavaScript API
基于Vue3+Hooks实现4位随机数和60秒倒计时
本文介绍了如何在Vue3中使用Hooks API来实现生成4位随机数和执行60秒倒计时的功能,并提供了详细的代码示例和运行效果展示。
21 1
基于Vue3+Hooks实现4位随机数和60秒倒计时
|
4天前
|
数据可视化 JavaScript
Vue3项目使用G6可视化组件实现一个树形机构图
在Vue 3项目中使用G6可视化组件库实现树形机构图的构建和展示。
31 1
Vue3项目使用G6可视化组件实现一个树形机构图
|
3天前
|
JavaScript 算法 API
Vue 3有哪些新特性
【8月更文挑战第16天】Vue 3有哪些新特性
19 1
|
4天前
|
JavaScript UED
如何在Vue3项目中使用防抖节流技巧
在Vue 3项目中使用防抖和节流技巧以优化组件性能,包括使用`lodash`库和自定义实现这两种方法。
7 0
如何在Vue3项目中使用防抖节流技巧
|
4天前
|
JavaScript
创建 Vue3 项目
创建 Vue3 项目
10 0
|
4天前
|
JavaScript
在Vue3+ElementPlus项目中使用具有懒加载的el-tree树形控件
在Vue 3和Element Plus项目中实现具有懒加载功能的el-tree树形控件,以优化大数据量时的页面性能。
6 0
|
4天前
|
JavaScript 前端开发
在Vue3+ElementPlus项目中实现一个简单的新增/移除行记录的小组件
在Vue 3和Element Plus项目中创建一个支持新增和移除行记录的简单表格组件。
25 0
|
3天前
|
JavaScript
Vue中如何设置在执行删除等危险操作时给用户提示(二次确认后执行对应的操作)
这篇文章介绍了在Vue项目中如何实现执行删除等危险操作时的二次确认机制,使用Element UI的`el-popconfirm`组件来弹出确认框,确保用户在二次确认后才会执行删除操作。
Vue中如何设置在执行删除等危险操作时给用户提示(二次确认后执行对应的操作)
|
3天前
|
JavaScript
如何创建一个Vue项目(手把手教你)
这篇文章是一篇手把手教读者如何创建Vue项目的教程,包括使用管理员身份打开命令行窗口、找到存放项目的位置、通过vue-cli初始化项目、填写项目信息、进入项目目录、启动项目等步骤,并提供了一些常见第三方库的引入方法。
如何创建一个Vue项目(手把手教你)
|
3天前
|
前端开发
StringBoot+Vue实现游客或用户未登录系统前、可以浏览商品等信息、但是不能购买商品或者加入购物车等操作。登录系统显示用户的登录名(源码+讲解)
这篇文章介绍了使用StringBoot+Vue实现用户登录状态判断的方法,包括前端加载用户信息和后端设置session的源码示例。