前端 的方式 点击此按钮让打印机直接打印我想要的东西。
github地址: https://github.com/whqgo/nodeWebPrint。
目前比较好的方法是直接使用 TSPL 标签打印指令集, 基本环境就不多说了。该功能的实现是使用USB发送指令。现在我们缺乏与USB沟通的工具。以下是推荐的程序驱动程序安装通用USB驱动程序.。
https://zadig.akeo.ie/。
下载后打开,依次操作。
3.安装驱动器。
目录结构。
main入口文件。
webprintutils文件夹 具体实现。
例如,我们想画条形码。
在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,还有吗? 大老板帮助完善这最后一步啊 真的很需要。