调用打印机和小票打印前端(TSPL )功能
时间:2025-06-24 11:55:52 来源:新华社
【字体:  

Ⅰ- 壹 - 使用需求。

前端 的方式 点击此按钮󿀌让打印机直接打印我想要的东西。

github地址: https://github.com/whqgo/nodeWebPrint。

Ⅱ - 贰 - 小票打印。

目前比较好的方法是直接使用 TSPL 标签打印指令集, 基本环境就不多说了。该功能的实现是使用USB发送指令。现在我们缺乏与USB沟通的工具。以下是推荐的程序驱动程序安装通用USB驱动程序.。

  • 注: TSPL是一套通用的标签打印指令集,许多主流标签打印机都支持。市场上标签打印机的通信方式主要包括:串口、USB、蓝牙和WIFI,以上方式发送相应的TSPL指令,标签打印机可以按照指令打印。

usb 插件需要的 程序驱动(Zadig)

https://zadig.akeo.ie/。

下载后打开,依次操作。

  1. 勾选这些。
    在这里插入图片描述
  2. 选择连接的usb USB打印机, 一般是 打印机商品名称,我用的是佳博打印机。
    在这里插入图片描述

3.安装驱动器。在这里插入图片描述

编写代码。

目录结构。

在这里插入图片描述

main入口文件。

webprintutils文件夹 具体实现。

  • index : 实现功能的逻辑。
  • bitmap_nodejs : 使用image转bitmap。
  • tspl.class : TSPL 指令重新包装。
  • usb.class: 用于连接 usb数据写入操作。

例如,我们想画条形码。

在tspl.class.在js文件中添加barcode方法, 在网上很容易找到具体的指令。

/** * 条码,code128固定在这里 * 单位都是dot *  * @param { Number} [x=0] - x * @param { Number} [y=0] - y * @param { Number} [height=80] - height * @param { String} [content=""] - 条码内容󿀌请遵循code128的协议,不是所有的字符都可以放在里面 * @param { Boolean} [label=true] - 条码的label部分是否显示? * @param { Number} [elementWidth=2] - 每位条形码宽度 * @param { Number} [rotate=0] - 旋转角度󿀌支持0,90,180,270 * @returns { Tspl} * @public */barcode (     x = 0,     y = 0,    height = 80,    content = "",    label = true,    elementWidth = 2,    rotate = 0) {     return this.#append(`BARCODE ${ x},${ y},"128",${ height},${ +label},${ rotate},${ elementWidth},${ elementWidth*2},"${ content}"`);}。

实例化后只需传参即可使用。

const Printer = require('./printer.class')const Usb = require('./usb.class')const Tspl = require('./tspl.class')const {  encode } = require('GBKCodec')// 实例化 一个 80mm, consttt,40mm的画布 print = new Printer({     connection: new Usb,    language: new Tspl({         size: "80mm, 40mm",        gap: "2mm, 0mm",        encoder: encode    })});print.barcode(30, 20, '120', data.c, false, 3)。

现在这个tspl.class.js中 添加了二维码、条形码、文本、图片、下划线、盒子和色块。

现在这个tspl.class.js中 添加了基本的常用物品,包括二维码、条形码、文本、图片、下划线、绘制盒子和颜色块。

匹配后可以打印。await。print。.。text。(。40。,10。,'精致掌握前端,#39;,2。,'TSS24.BF2')。await。print。.。bar。(。5。,96。,560。,4。)。await。print。.。qrcode。(。40。,110。,"http://weixin.qq.com/r/zRHk-Bjezuuarvyf90tf;)。// 二维码。await。print。.。print。(。)。

在这里插入图片描述

;

Ⅲ - 叁 - 普通打印。

可能想到 的是 , 通过浏览器直接打印 `window.print()调用,但会弹出操作页面,不行 领导说这样不好看不透明。 否决。这一需求的重点不是打印内容,无论是添加到iframe中,还是将打印内容转换为图片 相反,我想直接打印。那种无痛的,想想看,也就是说,只有python才能这样做。python将脚本编译成exe,然后用node调用。没有办法,所以曲线救了国家。.。

这里用到了 python模块 win32com.client 它提供调用 windows 底层组件对 word 、Excel、PPT 操作功能,只能在 Windows 在环境下使用󿀌并且需要安装 office 相关软件(相关软件;WPS也可以)import。win32com。win32com。 .。client# 打印def。openRrint。(。)。 :。lg。='打印xlsx文件路径'try。 :。xlApp。=win32com。.。client。.。Dispatch。(。"Excel.Application")。# UpdateLinks        # CorruptLoad。= 2。尽量修复损坏的文件        # xlBook。=xlApp。.。Workbooks。.。Open。(。lg。,UpdateLinks。=0,CorruptLoad。=2。 )。# 打印的文件        xlBook。=xlApp。.。Workbooks。.。Open。(。lg。,UpdateLinks。=0)。# 打印的文件        xlApp。 .。Visible。=0# 不在后台运行        xlApp。 .。DisplayAlerts。=False  # 显示弹窗        xlApp。.。ActiveWorkbook。.。Sheets。(。1。)。.。PageSetup。 .。Orientation。=win32com。.。client。.。constants。.。xlLandscape # 水平打印设置        xlApp。.。ActiveWorkbook。.。Sheets。(。1。)。.。PageSetup。 .。Zoom。=False        xlApp。.。ActiveWorkbook。.。Sheets。(。1。)。.。PageSetup。 .。FitToPagesWide。=1。# 页数范围        xlApp。.。ActiveWorkbook。.。Sheets。(。1。)。.。PageSetup。 .。FitToPagesTall。=10。# xlBook。.。Save。(。 )。#保存        ename。=xlApp。.。ActiveWorkbook。        .。Name  # 获取打开工作表的名称。print。(。"正在打印>",ename。)。xlBook。.。PrintOut。(。)。print。(。xlApp。,"名称===")。print。(。xlBook。,"打印文件===")。print。(。lg。,"lg===")。# xlBook。.。PrintOut。(。1。,5。)。# 打印页数。1。-。5。xlApp。.。Quit。(。 )。# 退出    except Exception。as。e。:。print。(。f。"打印 Excel 文件中的错误: { str(e)}")。 if。__name__。=="__main__"    :。# 调用打印机。openRrint。(。

)。

pass。 然后打包成exe文件,Pyinstaller。-。F。init。

.。

py 包装exe。node可以用child_process模块执行一个文件。const。 { 。execFile。}。=require。(。'child_process')。execFile。(。

url。

)。

这个代码就实现了 我想要的需求 python 相当强大,但也有一些问题 就这点代码 包装exe高达40mb,相当离谱。保持这个问题还有别的办法。 在解决, 这是未来的优化点,计算工作量.。最后这一步 我寻思 最好使用wasm(node直接调用wasm) 这个功能没有用c实现,python3不仅转换为wasm,还有吗? 大老板帮助完善这最后一步啊 真的很需要。

[责任编辑:百度一下]
检察日报数字报 | 正义网 |
Copyrights©最高人民检察院 All Rights Reserved.