CatPrint.swift

一个 Swift 库,用于打印到廉价的“Cat”热敏打印机,这些打印机可以在速卖通等网站上找到。 我已经使用 MX10 进行了测试,但我相信这些型号都可以使用这个库。

安装

使用 Swift Package Manager 将此仓库添加到您的项目中

用法

您需要创建一个 CatPrinter 的实例并在会话期间保留它。

例如:

import CatPrint

@MainActor
final class MyViewModel {
    let printer = CatPrinter(settings: .default)
}

然后您可以使用 try await printer.startScan() 搜索打印机。 如果 CoreBluetooth 未准备好扫描,将引发 bluetoothNotPoweredOn 错误。 如果您处理了这个错误,您可以稍后重试。

func searchForPrinters() async {
    do {
        try await printer.startScan()
    } catch CatPrinterError.bluetoothNotPoweredOn {
        try? await Task.sleep(nanoseconds: 1_000_000_000)
        await searchForPrinters()
    } catch { }
}

您可以通过订阅 availablePrinters 来监听可用的 Cat 打印机,并在您选择的方法中处理它。 此属性会在打印机连接和断开连接时自动更新。

await printer.$availablePrinters
    .dropFirst()
    .filter { $0.isEmpty == false }
    .map { State.foundPrinters(Array($0)) }
    .receive(on: RunLoop.main)
    .assign(to: &$state)

最后,一旦你有了想要打印的打印机 - 你可以通过提供一个 CGImage 来进行打印。 CGImage 将自动重采样到打印机的像素宽度并转换为灰度。 通过 imageProcessing 属性可以使用一些图像处理选项,例如抖动。

do {
    try await printer.printImage(
                image, // CGImage
                printer: printerInfo
              )
} catch CatPrinterError.noSuchPrinterConnected {
} catch { }