Flutter 蓝牙打印到 Zebra

标签 flutter bluetooth serial-port zebra-printers zpl

我需要在 Zebra zq520 蓝牙热敏打印机上添加打印功能。 我设法使用 flutter_blue 插件来做到这一点,但我对实现并不满意。 我讨厌将字符串分成更小的 block 以便通过蓝牙(并且等待!!!!!)。 我想知道是否有更好的方法,就像我们在(好?)旧时代的 java for android 使用 android.bluetooth.BluetoothAdapter 类使用的方法

谢谢。

最佳答案

我最终创建了自己的插件。

source code

编辑:2021/11/29 整合评论部分的一些评论

  1. 此代码不限于 zpl。理论上它可以支持所有向蓝牙串口发送明文的打印机语言

  2. 仅适用于 Android

  3. 要使此源代码按原样工作:

  • 您必须配对名称以“zebra”开头的蓝牙打印机
  • 您必须以字符串形式发送 zpl 命令。
  • 检查 zpl 命令是否有效的最简单方法是使用非常有用的 labelary viewer 。测试标签布局(字体大小、图像、条形码等)的最简单方法是使用上述免费服务。事实上,您所要做的就是在 labelary 中创建所需的布局,然后将整个字符串从第一个 ^XA 到最后一个 ^XZ 复制到 FlutterCblue.printToBT。例如,如果您发送此内容
  • printToBT("^XA
    
    ^FX Top section with logo, name and address.
    ^CF0,60
    ^FO50,50^GB100,100,100^FS
    ^FO75,75^FR^GB100,100,100^FS
    ^FO93,93^GB40,40,40^FS
    ^FO220,50^FDIntershipping, Inc.^FS
    ^CF0,30
    ^FO220,115^FD1000 Shipping Lane^FS
    ^FO220,155^FDShelbyville TN 38102^FS
    ^FO220,195^FDUnited States (USA)^FS
    ^FO50,250^GB700,3,3^FS
    
    ^FX Second section with recipient address and permit information.
    ^CFA,30
    ^FO50,300^FDJohn Doe^FS
    ^FO50,340^FD100 Main Street^FS
    ^FO50,380^FDSpringfield TN 39021^FS
    ^FO50,420^FDUnited States (USA)^FS
    ^CFA,15
    ^FO600,300^GB150,150,3^FS
    ^FO638,340^FDPermit^FS
    ^FO638,390^FD123456^FS
    ^FO50,500^GB700,3,3^FS
    
    ^FX Third section with bar code.
    ^BY5,2,270
    ^FO100,550^BC^FD12345678^FS
    
    ^FX Fourth section (the two boxes on the bottom).
    ^FO50,900^GB700,250,3^FS
    ^FO400,900^GB3,250,3^FS
    ^CF0,40
    ^FO100,960^FDCtr. X34B-1^FS
    ^FO100,1010^FDREF1 F00B47^FS
    ^FO100,1060^FDREF2 BL4H8^FS
    ^CF0,190
    ^FO470,955^FDCA^FS
    
    ^XZ")
    

    你会得到这个:

    You will get this:

    还有一件事:请记住,如果您想打印特殊语言字符(我需要打印希腊语),您必须找到打印机中安装的正确字体。例如:为了打印希腊字符,我必须集成这个

    ^CWN,E:TT0003M_.FNT

    就在第一个 ^XA 之后。然后我使用 N 字体来打印希腊语。如果您了解基础知识,它会非常灵活

    希望对你有帮助

    关于Flutter 蓝牙打印到 Zebra,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59384323/

    相关文章:

    c - 从串行端口读取原始字节

    java - Android应用程序通信串口数据

    Flutter 如何停止在背景状态下播放视频?

    flutter - 通过 flutter 导航保持对话框

    firebase - 无法更改 flutter 的功能区域

    Flutter - 如何创建一个框架,我可以在其中拥有 Debug 和 Prod 版本,其中调试版本可以通过某种方式选择测试环境

    iphone - 显示蓝牙设置页面

    android - 蓝牙设备的循环问题

    c++ - Serial.Read() 代码

    java - 如何在 java/shell 中的 javax.comm.PortInUseException 后释放串口