Для термопринтерів використовуються попередньо завантажені шрифти для пришвидшення друку. Отриманий байт перетворюється на графічне представлення.
У прикладі працюватимемо із шрифтом для термопринтера Citizen. Формуємо файл шрифту:
Парсимо вхідний файл, тут допомагає документація, витягуємо Font ID, опис структури шрифту, самі бінарні дані.
byte 0 0x0f (15) format byte 1 0x00 (00) continuation byte 2 0x02 (02) descriptor size byte 3 0x0f (15) class byte 4 0x00 (00) } byte 5 0x04 (04) } character data size (inc. header) byte 6 0x00 (00) } byte 7 0x03 (03) } glyph ID byte 8 0x00 (00) reserved byte byte 9 0xf9 (249) checksum byte
Перша проблема: знайти висоту і ширину символу, вибираємо шрифт із графічними символами.
Виставляємо, і напишемо свій парсер.
Робимо декодування заголовків для 12 кегля:
032(20) = 04 00 0E 01 00 00 00 00 00 20 00 09 00 27 00 24 = 78 037(25) = 04 00 0E 01 00 00 00 00 00 20 00 1e 00 27 00 78 = 156 219(db) = 04 00 0E 01 00 00 00 00 00 20 00 1e 00 27 00 78 = 156 255(ff) = 04 00 0E 01 00 00 00 00 00 20 00 12 00 27 00 48 = 117
Робимо декодування заголовків для 14 кегля:
032(20) = 04 00 0E 01 00 00 00 00 00 23 00 0B 00 2C 00 2C = 88 037(25) = 04 00 0E 01 00 00 00 00 00 23 00 23 00 2C 00 8C = 220 219(db) = 04 00 0E 01 00 00 00 00 00 23 00 1C 00 2C 00 70 = 176 255(ff) = 04 00 0E 01 00 00 00 00 00 23 00 0b 00 2C 00 2C = 88
Робимо декодування заголовків для 20 кегля:
032(20) = 04 00 0E 01 00 00 00 00 00 34 00 10 00 41 00 40 = 130 037(25) = 04 00 0E 01 00 00 00 00 00 34 00 32 00 41 00 C8 = 455 219(db) = 04 00 0E 01 00 00 00 00 00 34 00 32 00 41 00 C8 = 455 255(ff) = 04 00 0E 01 00 00 00 00 00 34 00 1E 00 41 00 78 = 260
Робимо декодування заголовків для 150 кегля:
032(20) = 04 00 0E 01 00 00 00 00 01 7F 00 76 01 D9 01 D8 - = 7095 056(38) = 04 00 0E 01 00 00 00 00 01 7F 00 eb 01 D9 03 AC - = 14190 057(39) = 04 00 0E 01 00 00 00 00 01 7F 00 eb 01 D9 03 AC - = 14190
Другий шрифт це поворот шрифту.
Референси:
https://h30434.www3.hp.com/t5/Printers-Archive-Read-Only/How-can-I-create-a-soft-font-file-sfp/td-p/5681663
https://www.brother.eu/-/media/product-downloads/devices/printers/dcp/dcp8040/de/guide_pcl5.pdf?rev=5f2e78da81954ff1a88ab6ae404a78e9&hash=219CDE625AB8A6FAD5868D8BFF9A352FEA6119E6
PCLЮрій Р. ◯ 0009-0005-3702-9223. (2022). Декодуємо бітмаповий шрифт. Блог UA ID. Взято з: https://blog.uaid.net.ua/bitmap-font