Декодуємо бітмаповий шрифт

Для термопринтерів використовуються попередньо завантажені шрифти для пришвидшення друку. Отриманий байт перетворюється на графічне представлення.

У прикладі працюватимемо із шрифтом для термопринтера 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

soft font file (sfp)

PCL
Використання фотографій або текстового контенту на інших ресурсах без клікабельного індексованого посилання заборонено.