Измените размер шрифта программно на термопринтере Bluetooth

У меня есть 58-мм термопринтер MINI, модель: ZJ-5805DD, который я использую в качестве POS-принтера с моим POS-приложением.

Я успешно программно подключил свое приложение к принтеру через Bluetooth и могу нормально печатать текст, используя

KitchenPrinter.writeValue(myStringData, for: A2orC2, type: .withoutResponse)

*Примечание: характеристики A2 или C2 [см. ниже] дают одинаковую распечатку текста.


Изменение размера печати шрифта стало для меня тупиком. Я знаю, что это возможно, потому что руководство по принтеру попросило меня загрузить тестер печати «POS-PrinterV1.0» из AppStore, который может изменять размер шрифта.

При обнаружении службы/характеристики мы находим 4 службы A, B, C, D (для простоты обсуждения).

A:

CBService: 0x1c0a6a5c0, isPrimary = YES, UUID = 49535343-FE7D-4AE5-8FA9-9FAFD205E455

CBCharacteristic: 0x1c02adf80, UUID = 49535343-1E4D-4BD9-BA61-23C647249616, properties = 0x10, value = (null), notifying = NO

содержит УВЕДОМЛЕНИЕ

CBCharacteristic: 0x1c02bba80, UUID = 49535343-8841-43F4-A8D4-ECBE34729BB3, properties = 0xC, value = (null), notifying = NO

содержит НАПИСАТЬ НАПИСАТЬБЕЗ ОТВЕТА


B:

CBService: 0x1c0a6ce80, isPrimary = YES, UUID = E7810A71-73AE-499D-8C15-FAA9AEF0C3F2

  CBCharacteristic: 0x1c02adfe0, UUID = BEF8D6C9-9C21-4C9E-B632-BD58C1009F9F, properties = 0x3E, value = (null), notifying = NO

содержит ЗАПИСАТЬ ЗАПИСАТЬБЕЗ ОТВЕТА УВЕДОМИТЬ ПРОЧИТАТЬ УКАЗАТЬ


C:

CBService: 0x1c0a69100, isPrimary = YES, UUID = 18F0

  CBCharacteristic: 0x1c02b8000, UUID = 2AF0, properties = 0x30, value = (null), notifying = NO

содержит УВЕДОМЛЕНИЕ УКАЗАТЬ

  CBCharacteristic: 0x1c02a5700, UUID = 2AF1, properties = 0xC, value = (null), notifying = NO

содержит НАПИСАТЬ НАПИСАТЬБЕЗ ОТВЕТА


D:

CBService: 0x1c0a68300, isPrimary = YES, UUID = информация об устройстве

  CBCharacteristic: 0x1c02a5dc0, UUID = Serial Number String, properties = 0x2, value = (null), notifying = NO

содержит ЧТЕНИЕ

  CBCharacteristic: 0x1c02a77a0, UUID = Software Revision String, properties = 0x2, value = (null), notifying = NO

содержит ЧТЕНИЕ

  CBCharacteristic: 0x1c02a76e0, UUID = Hardware Revision String, properties = 0x2, value = (null), notifying = NO

содержит ЧТЕНИЕ

  CBCharacteristic: 0x1c02a6060, UUID = Manufacturer Name String, properties = 0x2, value = (null), notifying = NO

содержит ЧТЕНИЕ


Я несколько дней искал в Интернете решение Swift. Пожалуйста, может кто-нибудь помочь?


person Chameleon    schedule 13.12.2018    source источник


Ответы (1)


Решено: после обнаружения команд ESC/POS и это сообщение StackOverflow. Мне удалось изменить размер печати на принтере, известном как M58-LL или ZJ-5805, с помощью следующей функции, которая принимает массив шестнадцатеричных кодов, преобразовать их в UnicodeScalar, затем в Character и добавить их к String, который отправляется на принтер так же, как текстовая распечатка.

let hexs = [0x1b,0x21,0x20] //doubleWide
var hexString = String() 
for all in hexs {
    if let scalar = UnicodeScalar(all) {
        hexString.append(Character(scalar))
    }
}
let theData = hexString.data(using: .utf8)!
myPrinter.writeValue(theData, for: printCharacteristic, type: .withoutResponse)

//printCharacteristic corresponds with Service/Characteristic B

[0x1b,0x21,0x00] //default
[0x1b,0x21,0x01] //small font
[0x1b,0x21,0x08] //bold
[0x1b,0x21,0x10] //doubleHeight
[0x1b,0x21,0x20] //doubleWidth
[0x1b,0x21,0x20] //doubleHeightAndWidth
person Chameleon    schedule 19.01.2019
comment
Для двойной высоты и ширины правильно: [0x1b,0x21,0x30] //doubleHeightAndWidth - person Waweru Kamau; 18.06.2021