V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
• 请不要在回答技术问题时复制粘贴 AI 生成的内容
0x01Dev
V2EX  ›  程序员

请问有做过小票打印的朋友么,我们最近准备做小票打印,买了个热敏打印机,然后想前端直接调用打印

  •  
  •   0x01Dev · 22 小时 33 分钟前 · 2529 次点击

    打印机是 usb 连接电脑的,然后前端有几种方式调用,一种是使用 window.print ,然后尝试过打印效果非常差,文字很模糊

    然后调研过很多使用 esc pos 指令去打印的,然后折腾了好久,使用 web use 接口,然后访问 usb 直接提示:SecurityError: Failed to execute 'open' on’USBDevice':Access denied ,网上又搜别人说是要下载什么驱动去覆盖,但是不可能让商家下载别的驱动吧,到时候他们之前的功能都使用不了了

    不知道有没有什么通用的解决方案,在网上搜感觉相关资源很少,头疼哇,v 友们有做过类似的功能么

    第 1 条附言  ·  5 小时 17 分钟前
    谢谢大家的热心回复,最后包了一层 electron ,完美解决
    39 条回复    2025-10-20 17:21:39 +08:00
    kazeik
        1
    kazeik  
       22 小时 27 分钟前
    没有蓝牙功能吗。手机端用蓝牙可以连接吧
    0x01Dev
        2
    0x01Dev  
    OP
       22 小时 26 分钟前
    @kazeik 据我了解,很多小票打印机都不带蓝牙功能。。。我昨天在淘宝京东看了一圈
    Zy143L
        3
    Zy143L  
       22 小时 18 分钟前
    @0x01Dev 你关键词加上蓝牙就行了..价格得加个五六十
    liyafe1997
        4
    liyafe1997  
       22 小时 18 分钟前
    生成 PDF ,在 Web 端通过浏览器弹出 PDF 或 pdf.js ,然后用 PDF 的打印功能?
    JingKeWu
        5
    JingKeWu  
       22 小时 8 分钟前
    我们是购买 lodop 实现打印的
    l1ve
        6
    l1ve  
       22 小时 7 分钟前
    你参考一下菜鸟的打印组件,阿里系都用的同一个,他是统一的在本地去运行一个客户端监听端口,然后去打印,前端部分仅限于和自己的打印客户端去通信
    muxw6
        7
    muxw6  
       22 小时 3 分钟前
    可以看看 vue-plugin-hiprint
    0x01Dev
        8
    0x01Dev  
    OP
       21 小时 46 分钟前
    @Zy143L 我们是服务商家的,不能让商家去换硬件
    0x01Dev
        9
    0x01Dev  
    OP
       21 小时 46 分钟前
    @liyafe1997 打印出来很糊的
    xian366
        10
    xian366  
       21 小时 28 分钟前   ❤️ 1
    如果是 Windows 上打印,推荐用 Lodop https://www.lodop.net ,功能十分丰富(忽略网站比较复古的样式),稳定,兼容各种打印机,支持 js api ,使用 ws 通信,前端可以直接调用,demos 很多上手很快。正式使用记得购买商业授权,大概几百元。不购买打印小票有底部版权

    如果是安卓蓝牙小票打印,参考看下佳博的 sdk 及其中代码的 demo ,提供好几种语言。

    希望对你有帮助.
    0x01Dev
        11
    0x01Dev  
    OP
       20 小时 59 分钟前
    @xian366 谢谢
    SethShi
        12
    SethShi  
       18 小时 43 分钟前
    我们之前买过直接远程的 wifi 打印机,直接请求一个接口就行
    thtznet
        13
    thtznet  
       18 小时 36 分钟前
    关键字:Zebra,ZPL
    lsylsy2
        14
    lsylsy2  
       17 小时 39 分钟前
    小票打印的核心是它有两种打印模式,一种是你说的 window.print 包括 pdf 等等,本质都是渲染成一张图片然后打印,效果都很差
    另一种模式是 escpos 指令直接编程,是点对点对应的发各种文字图片条形码,这种才能打印出针对小票打印机清晰的内容,驱动的路线是对的,但是 usb 驱动不一定好用可能需要串口
    hanguofu
        15
    hanguofu  
       17 小时 27 分钟前
    不好意思歪一下楼~~ 。 有没有人知道如何用 linux 的小主机通过 USB 驱动 小票打印 机 ?
    yolee599
        16
    yolee599  
       17 小时 17 分钟前 via Android
    本地起一个 http 后台服务,这个服务就调用商家给的二开库,web 页面和后台服务通讯。商家给的库功能是最全的,兼容性最好的
    powersee
        17
    powersee  
       8 小时 55 分钟前 via iPhone
    热敏打印机支持 ZPL 语言的,这种需求我曾经搞过。

    我搞的方向是医院抽血条码(大家体检抽血贴到管子上的那个信息)。

    如果你用 PDF 热敏打印机非常模糊的,尤其是条码部分,几乎无法扫描。

    你可以翻阅 ZPL 语言,但是这个非常冷门,文档也都是英文的,但是依然可以在百度搜索到相关内容,虽然非常少。
    KavinKily
        18
    KavinKily  
       8 小时 34 分钟前   ❤️ 1
    1.针对这种标签打印机,直接通过 windows 的打印是不行的,跟 office 那些完全不是一码事
    2.票据机用的确实是 ESC/POS 指令,标签机一般用的是 tspl 指令,你需要把你要下发的东西根据 pos 指令转成对应的 data 数据,然后下发,或者你也可以考虑看看用 tspl 指令试试,你要确定好你到底是票据机还是标签机
    3.一般的这种票据机针对 pos 指令都是通用的,比如说你要下发文本 AAA 以及一张图片,那么 pos 指令是有针对 AAA 文字内容转成对应的二进制 data ,但是图片是一定要二值化处理的,也就是说我们手机拍的这个照片他的像素点颜色渐变是连续分布的,而这个图片是票据机所不支持的,你需要二值化把他转成点黑白阵图,并需要做误差扩散,然后把点阵图的像素值添加到下发数据的二进制 data 中去;但是同样的针对 AAA 文字以及图片情况也有一些商家的机器是不同的处理方式,他们都是把文字转成图片然后二值化拼接与图片拼接处理,最后是一张图片的内容下发;
    4.如果对第三点无法理解,你直接搜佳博,有对应的 sdk 提供出来,包括说 usb 打印这些其实都是要对应的打印驱动去支持的,另外移动端等也是有对应的 sdk
    realpg
        19
    realpg  
    PRO
       8 小时 24 分钟前
    路线错了

    如果你不想依赖第三方服务, 写一个 windows 原生程序后台 service 启动后 http 监听本地一个端口起 web 服务, 用它调用打印机 暴露 web 接口给你的 web app
    xj3hd
        20
    xj3hd  
       8 小时 8 分钟前
    我做过,用的是 espon 家的热敏小票打印机
    这个打印机支持会自带 http 服务,可以直接通过 http 接口调用的形式直接打印小票
    conglovely
        21
    conglovely  
       7 小时 52 分钟前
    我们用 ZEBRA 的打印机,就用它家的 ZPL 指令去打,生成文件流图片转成 ZPL 去打印
    EgbertW
        22
    EgbertW  
       7 小时 46 分钟前
    生成二值图像,用串口的方式,用 escpos 指令来打印。
    zy0829
        23
    zy0829  
       7 小时 45 分钟前
    @muxw6 配合客户端可以实现静默打印挺好的
    ShundL
        24
    ShundL  
       7 小时 30 分钟前   ❤️ 1
    Lodop 就行了,几年前做过要打印某种检测条码的贴纸,就是用的 lodop
    Razio
        25
    Razio  
       6 小时 55 分钟前
    是不是你生成了图片,canvas 之类的,这种打印出来大概了模糊。lodop 啥的我觉得一般,简单的 html+css 打印都不会吗,这内容干了好几年了,不清晰的只能说是数据或者打印机自身配置的问题。所以其他人通常会用其他工具去减少这种问题,就比如 lodop 、菜鸟等
    katalele
        26
    katalele  
       6 小时 51 分钟前
    之前用过,飞鹅打印机,感觉还不错。wifi ,直接调接口
    wei619588621
        27
    wei619588621  
       6 小时 41 分钟前
    用 html 写页面,然后用 chromedp 转为 pdf,然后用 SumatraPDF 静默打印。
    nullico
        28
    nullico  
       6 小时 38 分钟前
    同样做过打印的,其他楼没有做过小票/标签打印的就不要乱推荐了,不是你们认为的 pdf 打印,另外那个 lodop 不太建议,针对这种场景。只推荐看 18 楼的。另外再说一个坑,楼主是不想让商家更换打印机的话,那就做好有一堆坑的问题。比如,打印机打着打着不打了,打着打着打印机死机了之类的问题,尤其是蓝牙和网口打印机。
    RogerL
        29
    RogerL  
       6 小时 36 分钟前
    我之前做过前端的打印,用的串口
    要求打印的东西比较复杂,所以是先转为了 PDF 再打印的,我是电脑上跑了一个本地服务,本地服务去调用 PDFtoPrinter 这个东西去做的打印,默认打印出来确实挺糊,转为 PDF 的时候可以设置清晰度,最好 2 倍以上,再缩放,这样就清楚了,但是缺点也有,jsPDF 在配置低的电脑上渲染相当慢
    我是建议,如果没什么特别复杂的样式需求,最好直接用 escpos ,这块有条件可以让后端干,传数据就行
    musi
        30
    musi  
       6 小时 33 分钟前
    用 electron 包装一下,Failed to execute 'open' on’USBDevice':Access denied 猜测是产品自己的 usb 驱动把 libusb 给顶掉了。换成 libusb 就行了,可以把整个功能包装成一个应用,用应用去处理就好了
    ratazzi
        31
    ratazzi  
       6 小时 24 分钟前
    Windows 压根不支持 PDF 打印的,都是要自己做栅格化的
    aqqwiyth
        32
    aqqwiyth  
       6 小时 2 分钟前
    https://open.iot.kuaimai.com/#/cloudPrinter 试试我司一个产品配合 jssdk 可以实现需求
    aqqwiyth
        33
    aqqwiyth  
       5 小时 59 分钟前
    不换硬件用用 lodop ,各大电商的打印控件也基本都是抄的 lodop
    0x01Dev
        34
    0x01Dev  
    OP
       5 小时 11 分钟前
    @musi 谢谢,报了一层 electron ,完美解决
    demen
        35
    demen  
       4 小时 19 分钟前
    如果不想用本地控件的方式,我试过一个牌子的芯烨( XINYE )的热敏打印机可以支持云端 api 来打印,非常的方便
    cchan
        36
    cchan  
       3 小时 42 分钟前
    热敏打印机模糊的话可是看看是否分辨率够不够,一般物流面单 203PPI ,再清晰点的可试试 300PPI
    asong
        37
    asong  
       35 分钟前
    @0x01Dev 最终是通过 包一层 electron 加 esc pos 指令实现的打印吗
    KongLiu
        38
    KongLiu  
       16 分钟前
    以前做过小程序热敏打印,用的 BLE 的
    0x01Dev
        39
    0x01Dev  
    OP
       6 分钟前
    @asong 对的
    关于   ·   帮助文档   ·   自助推广系统   ·   博客   ·   API   ·   FAQ   ·   Solana   ·   5598 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 23ms · UTC 09:28 · PVG 17:28 · LAX 02:28 · JFK 05:28
    ♥ Do have faith in what you're doing.