Slide 4
Slide 4 text
iOS
アプリで ESC/POS
コマンドを実装する
先の例で挙げた「Hello World
」を印刷するコマンドを、前節の Bluetooth
の制御関数で実行します。
var command = Data()
command.append(contentsOf: [0x1b, 0x40]) // 初期化
command.append(contentsOf: [0x1b, 0x45, 0x01]) // 太字オン
command.append(contentsOf: [0x48, 0x65, 0x6c, 0x6c, 0x6f, 0x20,
0x57, 0x6f, 0x72, 0x6c, 0x64]) // Hello World
command.append(contentsOf: [0x0a]) // 改行
try send(data: command)
「プリンターにコマンドを送る」は難しい印象がありますが、簡単なコードで実現できます。なお、一度に書
き込めるデータのサイズに上限があるので、その上限サイズを調べて、データを分割して書き込みます。
// これで上限値が取得できるが、値は適切ではない(値が大きく、印刷失敗する)
// 実際のアプリでは、適当な固定値を設定しました
let mtuSize = peripheral.maximumWriteValueLength(for: .withResponse)
上記の例は直接コマンドを書いているため、可読性は悪いです。一例ですが、実際にコーディングする際は
enum
で印刷命令を定義して、それに対応するコマンドを返すと可読性は保たれるでしょう。
enum PrintOrder {
case bold(isBold: Bool)
func command() -> Data {
switch self {
case .bold(let isBold):
return Data([0x1b, 0x45, isBold ? 0x01 : 0x00])
}
}
}
先に挙げたコマンド以外で、レシートを印刷する際に便利な ESC/POS
コマンドのいくつかを Swift
のコー
ド実装と共に紹介していきます。なお、今回はコマンドを簡単に説明します。詳細はメーカーが提供するド
キュメント を確認してください。
日本語
例では英字を印刷しましたが、日本語も印刷できます。私が保持しているサーマルプリンターは ShiftJIS
で
エンコードしたものを利用します。
var command = Data()
if let textData = "こんにちは世界".data(using: .shiftJIS) {
command.append(textData)
}
return command
2