从 React Native 直接打印到 Zebra ZQ520

Direct print from React Native to Zebra ZQ520

我目前正在尝试从我的 React Native 应用程序打印到 Zebra ZQ520 便携式打印机。我已经能够使用第三方打印服务进行打印,但部分问题是我还需要它来直接打印(静默打印),因为我想避免 Android 打印预览屏幕。

我正在使用 Expo 进行开发,所以这增加了另一个问题,因为如果不先从 Expo 中退出,许多库将无法使用。如果需要,这是我可以做的事情,但现在我只是想找到解决这个问题的最佳方法。

到目前为止,我已经通过调用 Expo 的 Print.printAsync(options) 并通过 HTML 通过第 3 方打印服务进行了打印,但是同样,这仅用于调用 android 打印预览屏幕我试图避免。我还查看了直接来自 Zebra (https://www.zebra.com/us/en/support-downloads/printer-software/pdf-virtual-device.html) 的 PDF,这显示了一些前景,因为您还可以使用 Expo 的 Print.printToFileAsync() 保存为 .PDF 格式。有了这个选项,我目前还没有找到是否可以直接从 Android 设备使用 PDF。

我对弹出的想法是使用 react-native BLE PLX 包 (https://github.com/Polidea/react-native-ble-plx) 来处理与 Zebra 打印机的直接连接并将原始 CPCL 命令发送到打印机。这似乎提出的问题是任何可能需要打印的图像的限制。

我是 React 的新手,直到现在我也从未接触过硬件,所以我一直在努力学习。如果有人能指出正确的方向,我将不胜感激。

我可能和你在同一条船上,但我使用的是 ZT410 打印机。我能够使用 ZPL 命令对打印机执行简单的 HTTP Post。不确定您的打印机是否支持它。

  function Print() {
    var zpl = "^XA" + "^FO50,50" + "^A0N50,50" + "^FDHello, World!^FS" + "^XZ";
    fetch("http://192.168.0.58:6101/pstprntHTTP/1.1", {
      method: "POST",
      headers: {
        "Content-Type": "text/plain",
        "Content-Length": zpl.length,
      },
      body: zpl,
    });
  }

对于现在遇到这个话题的任何人: 我设法使用此库通过蓝牙从 (ios) React 本机应用程序连接到 Zebra ZD421:https://github.com/GeekyAnts/react-native-zebra-bluetooth-printer

您需要打印机的mac ID才能连接,您可以通过图书馆的扫描方法或Zebra Printer Setup Utility.

找到。

之后你基本上可以通过以下命令打印:

const printerSerial = String('87056752-6FCC-525A-4426-872756C3884A');
const zpl = generateZPL();
await RNZebraBluetoothPrinter.connectDevice(printerSerial)
  .then(async (res: any) => await RNZebraBluetoothPrinter.print(zpl))}
  .catch((err: any) => alert(`Problems while connecting to printer: ${err}`))

几个月前我找到了一个解决方案,并认为我应该 post 答案以防它对其他人有帮助。 anderwald 上面提到的库我实际上曾经检查过一次,但它不够健壮,无法满足我的需求,因为我需要直接打印 .PDF

我最终放弃了 Expo,只是将我的应用程序转换为纯 react-native 构建并处理连接,我使用了这些人的服务:https://mobiprintapp.com/

这不是 100% 理想的,因为需要的许可成本很小,但是它很容易集成并且完全按照我的需要去做,所以对我来说这是值得的。