BLPrint
藍牙打印。兼容 佳博 sdk。 這里是demo
前言
1、該開始做打印,使用了 Haley-Wong
大神的 demo 。在 ios7下 能正常打印,但是到了 ios8、ios9 上之后,要么是 后面部分亂碼,要不就是打印機沒反應。被折騰了很久,最后只能用佳博他們的官方 sdk。
2、佳博 SDK 把 掃描和連接方法 封裝到 CBController 中,如果在掃描界面使用還好,但是我們需要做啟動掃描,這個 controller 也必須加載到處理就比較蛋疼。然后這個 controller 如果不加載出來,還不會給回調,異常坑爹。
3、由于產品需求,還需要 兼容其他品牌打印機,而佳博 SDK 封裝的掃描方法 結果回調 ,直接把 藍牙對象 CBPeripheral 封裝成了 MyPeripheral 。而這個對象 沒有給初始化方法,如果自己來生成這個對象,試了下是打印不出結果的,會包 Invalid data
。
郁悶了幾天,突然想到一個取巧辦法。 CoreBluetooth 的回調就那么幾個,我自己掃描,得到的回調,全部再轉發給CBController,來 模擬讓他 收到 掃描的結果。經過測試之后,發現這個方法可行。這樣一來 如果要兼容其他品牌,就可以自己掃描,判斷品牌之后,用對應的 sdk 連接就可以了。
實現
1、實現比較簡單, PrinterUtil 封裝 掃描 打印機,打印方法
2、PrinterFormatText 封裝了 排版時,拼接字符串的方法。
3、PrinterScanProtocol 定義了掃描的協議,用于每個 sdk 執行自己的掃描方法(雖然我們自己掃描了,但是他們的方法還是要執行以下,以防 他們做了什么處理),和收到回調
4、BLGprinterSDKModel 則是封裝 GPrinter 的類,實現了 PrinterScanProtocol 協議。如果要再添加其他 sdk,則再新增對應的 model。
關于打印命令
佳博 sdk 也使用的是 標準 ESC 命令,只是 做了處理而已。通過打印 發現他們 EscCommand
中的 getCommand
方法。其實 打印出的命令就是 標準的 ESC 命令,這一步是沒做處理的。 如果偷懶,我們也可以直接用他們封裝的 方法。如果用其他 sdk 打印,則只要用這個 data 就可以了。