V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
V2EX 提问指南
dys0327
V2EX  ›  问与答

大佬们,请教一下关于标签打印的方案

  •  
  •   dys0327 · 20 天前 · 1588 次点击
    目前的技术栈是前端 element plus ,Vue3+TS ,后端 SpringBoot ,数据库 mysql

    需要做一个标签打印功能(仓库使用):
    1.支持设计标签模板(跟快递面单类似,有发货人,收货人,地区、箱数、商品信息、二维码等,模板样式自己设计,可能不同客户模板不同)
    2.在系统中查询数据后,通过调用对应标签模板将指定数据进行批量打印,一条数据填充模板生成一个标签

    现有问题:
    以前开发系统时的打印功能都是调用浏览器直接选择打印机进行打印,没接触过标签打印的需求,比如标签尺寸 15mm*10mm, 不知道连接标签打印机进行打印是否需要其他操作,网上搜索了了一下,有的文章说标签打印机需要自己把标签数据转换为打印指令,传输给打印机?希望有相关经验的大佬不吝赐教
    33 条回复    2024-09-03 17:17:58 +08:00
    okakuyang
        1
    okakuyang  
       20 天前
    最近看见一个人实现了 webUSB 还是啥的用小票机打印
    Ranhao
        2
    Ranhao  
       20 天前
    还是用原来 web 打印的方案,打印不同尺寸只是在打印机设置里面新增纸张大小,web 打印预览时选中不同的纸张就好
    JamesR
        3
    JamesR  
       20 天前
    做个 Excel 导出功能得了,有专门的标签设计打印软件 Bartender ,让客户用这个软件去打,这个软件支持通过 Excel 或者连接 MySQL 数据库后打印。
    boks
        4
    boks  
       20 天前
    买个精臣的就行
    电脑用 usb 连接,手机上可以做成小程序或 app ,使用低功耗蓝牙连接
    按文档上操作就行,不会就加群问,他们技术和客服还是挺积极的,我之前做的时候不会原生安卓,他们还帮忙开发了 uniapp 插件
    hangzhou
        5
    hangzhou  
       20 天前   ❤️ 1
    看看这个插件能满足需求吗 vue-plugin-hiprint
    datocp
        6
    datocp  
       20 天前
    还在用 bartender v9.4,支持 access/excel/mssql/orade/ole db/udl/odbc/文本文件,平时常用 excel 进行变量赋值。

    现在常用 LabelSoft ,在条形码长宽比方面可以随意拉动。

    一般对于 tsc TTP-244 Pro ,网页打到 15mm*10mm ,要预先设定一张 15mm*10mm 的标签,调用它就能打出这个尺寸。
    dys0327
        7
    dys0327  
    OP
       20 天前
    @JamesR #3 之前就是用 Bartender 打印,不是很方便;现在是想要直接在 web 页面查询筛选数据,填充到模板中打印出来
    threeBoy
        8
    threeBoy  
       20 天前
    可以通过菜鸟云打印实现,web 端图形界面自定义模板 https://cloudprint.cainiao.com/print/templates.htm?tbpm=3 免费
    threeBoy
        9
    threeBoy  
       20 天前
    @threeBoy 生成的模板类似 xml 可以填充数据 通过 websocket 传递给菜鸟云打印组件软件 就可以打印了
    dys0327
        10
    dys0327  
    OP
       20 天前
    @boks #4 大概看了下,点了几个商用的标签打印机,貌似都是热敏的,热敏时间久了就褪色了,客户要求不能使用热敏
    dys0327
        11
    dys0327  
    OP
       20 天前
    @hangzhou #5 这个看着还不错,我研究研究
    Felldeadbird
        12
    Felldeadbird  
       20 天前
    标签软件可以读 mysql 的。 后端把数据发数据库。 标签软件设置好打印格式。 要打印时软件读取一下数据库现在的内容,就开始自动打印了。

    我公司目前是这样操作。
    thoo61871
        13
    thoo61871  
       20 天前
    我司是按照尺寸输出成 PDF
    web 自动打开 PDF
    一页一张标签
    然后手动点击打印
    thoo61871
        14
    thoo61871  
       20 天前
    标签打印机也是打印机
    安装完驱动
    你去打印机设置那里设置尺寸
    例如 100*100mm
    70*20mm
    crazytudou
        15
    crazytudou  
       20 天前
    以前做过, 做成标签纸大小的浮窗,直接打印页面。
    BingoXuan
        16
    BingoXuan  
       20 天前
    我的方案是:直接 html 渲染对应大小后打印,前提是打印机配置好对应的尺寸
    matepi
        17
    matepi  
       20 天前
    好多年前做过用 mht 模板填充、word 打印的方案
    比 html 的优势在于,不管是批量每个小标签连续打印、还是拼接成大文件批量打印,都比 html 浏览器直接打印稳定和效率好不少
    tywtyw2002
        18
    tywtyw2002  
       20 天前
    本地驱动 直接用 zpl 语言打,商用机基本上 ZPL 都是标配。

    网页要用 webusb 调用吧。要不就本地启动个 agent ,来接受网页上的命令调用驱动打
    xieaoting
        19
    xieaoting  
       20 天前
    @hangzhou 我用这个插件做了一个可编辑模板然后用数据去打印模板的
    ArleneCheung
        20
    ArleneCheung  
       20 天前
    真是问到专业对口了。我是我们公司的嵌入式。

    我们公司是专门做标签打印机的,给你列如下几种方式。

    一般通用的比较小型的打印机可能不太会内置指令集:CPCL/ESC/ZPL/EPL/TSPL 我列出来的是几种常见的指令集。

    CPCL 、ZPL 、EPL 都是斑马公司,ESC 指令集是 EPSON 打印机的。这种都是开源的,可以直接去网上找标准的协议。

    在你开发自己 demo 前我可以给你推荐一些调试工具去测试这些指令是否健全。

    还有一些国产的做的很精美标签机,非常非常小,打印头为半寸的,这种大多都有自己的 app ,这种一般是把需要打印的样张转化为位图传输给打印机。这种如果你想做上位机驱动可能需要和对应打印机公司的 SDK 对接,比如使用他们现成的 SDK 文件。

    看你的需求,那种稍微大一点 2 寸 3 寸,或者大四寸,快递行业,大标签行业一般用 CPCL 指令集 ZPL/EPL 。

    小票多用 EPSON 的 ESC 指令集 它的原理为边收边打,那种非常小的因为硬件资源有限可能不会内置指令集,当然国外的我不清楚,毕竟我们公司做标签机+耗材,我也调研了不少国内的竞品,比较小的 半寸 一寸 很少有带指令集的,或者有的话也不是很全。主要也是用指令集中的位图指令。

    指令集的原理其实是上位机给打印机发送指令,真正生成图像是在打印机这一端,如果是传输位图,则上层就需要绘制好图像。如果你用指令集方式可能对自己生成图像的难度系数较小,如果是传输图像数据可能会涉及一维码/二维码库的调用,以及数据压缩,数据传输超时等等这些因素。

    当然这只是我从嵌入式方向给你的一些建议,毕竟我也不做 SDK ,我也不做 APP ,我只负责打印机固件端开发,能提供的建议只有这么多。有任何指令集相关的疑问,也可以私下问我,因为我是专门做打印机指令集开发的。
    ArleneCheung
        21
    ArleneCheung  
       20 天前
    @ArleneCheung 补充一下,其实不同公司的驱动打印,走的可能也是不同的指令集,可以抓一下 USB 的数据大概就清楚不同品牌用的是什么指令集,有的是标准指令集,有的是自己定的位图协议。驱动也是对应公司封装好的,只要清除其中的规则,其实完全可以自己写,我们公司也有很多二开用户,我平常对接的售后主要都是二开用户。
    ArleneCheung
        22
    ArleneCheung  
       20 天前
    @boks 太巧了,很荣幸被 cue 到了我的公司,我们公司有热转印的机器。
    ArleneCheung
        23
    ArleneCheung  
       20 天前
    翻了一下上面的楼,居然被提到了我的公司,真是荣幸。
    nomytwins
        24
    nomytwins  
       20 天前
    试试 clodop ,我们集成过
    dys0327
        25
    dys0327  
    OP
       20 天前
    @xieaoting #19 大佬,有没有开源,开源了的话放个地址我去看看
    dys0327
        26
    dys0327  
    OP
       20 天前
    @thoo61871 #14 也就是标签打印机可以看做是普通 a4 纸那种打印机,安装完驱动之后,直接在浏览器调用打印,选择标签打印机就 OK 吗?
    dys0327
        27
    dys0327  
    OP
       20 天前
    @nomytwins #24 看介绍貌似可以做到无感打印,web 页面直接调用打印服务完成打印,不需要弹出浏览器的那个打印预览、纸张选择的那个弹窗?
    dys0327
        28
    dys0327  
    OP
       20 天前
    @ArleneCheung #21 电脑连接打印机并安装打印服务 web 通过打印服务的端口发送打印请求,如同 24 楼所说的 clodop 与 上述指令集的方式相比,指令集的方案开发难度是不是更高一点?
    ArleneCheung
        29
    ArleneCheung  
       20 天前
    @dys0327 没错,因为你的各种内容,文字,条码,一维码,需要你编码转成相关的指令,等于你自己编程需要想象成一张画布,在这个画布上用你的编程语言绘制图像,并且根据这个图像转化成指令集。但是指令集一般比较高效,需要传输的数据较少,生成端在打印机这端。还有一些控制指令可以访问打印机状态,上报异常等等。当然如果不是大体量或者复杂项目,直接调用打印服务的端口发送请求也是完全足够了。
    thoo61871
        30
    thoo61871  
       19 天前
    @dys0327 是的
    什么指令啊那些完全不用考虑
    你又不是写驱动
    或者你想实现全自动化
    tywtyw2002
        31
    tywtyw2002  
       18 天前 via iPhone
    @ArleneCheung B1 原生支持 ZPL 吗 还是只有位图协议。
    ArleneCheung
        32
    ArleneCheung  
       17 天前
    @tywtyw2002 B1 不支持指令集,位图协议都没有,只能通过原生 SDK 进行接入。
    dys0327
        33
    dys0327  
    OP
       15 天前
    @xieaoting #19 我在查看的时候发现无感打印的时候有个 pageSize 不生效的 bug ,作者说是 electron 的 bug ,我查看了 electron 的 issue ,貌似还没有修复,你有没有遇到这个问题?
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   5672 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 28ms · UTC 01:51 · PVG 09:51 · LAX 18:51 · JFK 21:51
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.