Мова опису розмітки використовується для друкованої форми документів, які виводяться на принтери та Фіскальні Реєстратори (надалі ФР).
Основна одиниця друку - документ у форматі xml з кореневим тегом <doc>.
Найпростіший документ у цій розмітці має такий вигляд:
<doc>текст для друку</doc>
Результат:
| текст для друку |
У прикладах наводиться очікуване виведення на принтер з одним підтримуваним шрифтом і шириною стрічки в 30 символів. Для позначення початку і кінця рядка (країв паперу) використовується символ " | ".
Розмітка документа не залежить від пристроїв і під час виведення адаптується під можливості конкретного пристрою. Після друку документа на пристроях, де це підтримується, виконується розрізка стрічки.
Розмітка документа має працювати на пристроях із шириною стрічки 16 символів - мінімальна ширина стрічки з пристроїв, які підтримуються на момент створення цієї статті.
Назва | Можливі значення | Призначення |
bell | Порожній рядок (перевіряється тільки наявність) | Увімкнення кухонного дзвінка перед початком друку документа. Працює тільки для принтерів. |
font | f0, f1, f2, barcode, qrcode | Вибір шрифту (див. далі Керування шрифтами) |
align | center, justify, left, right | Вибір вирівнювання (див. далі Керування шрифтами) |
formatter | cut, split, wrap | Вибір способу перенесення рядків (див. далі Керування перенесенням тексту) |
Є три розміри шрифту. Вони нумеруються цифрами від 0 до 2 у порядку збільшення розміру: шрифт номер 0 - найменший, шрифт номер 2 - найбільший. Якщо явно не вказано шрифт, то за замовчуванням використовується шрифт номер 0.
Усі теги, зазначені в таблиці нижче, змінюють шрифт для всіх вкладених у них елементів.
Назва | Призначення | |
<f0></f0> | Форматування вкладеного контенту шрифтом розміру 0. | |
<f1></f1> | Форматування вкладеного контенту шрифтом розміру 1. | |
<f2></f2> | Форматування вкладеного контенту шрифтом розміру 2. | |
<barcode></barcode> | Форматування вкладеного тексту як штрих-код. Підтримує тільки текст. Якщо пристрій не підтримує друк штрих-кодів, то цей тег буде проігноровано. | |
<qrcode></qrcode> | Форматування вкладеного тексту як двовимірний штрих-код (QR-код). Підтримує тільки текст. Якщо пристрій не підтримує виведення штрихкодів, то цей тег буде проігноровано. Опціональні атрибути розміру size QR-коду і ступеня завадостійкості correction. Приклад тега:<qrcode size="normal" correction="medium"> https://www.knaipateam-borsch.com/ </qrcode> |
Назва | Можливі значення | Призначення |
size | tiny, small, normal, large, extralarge | Розмір QR-коду |
correction | low, medium, high, ultra | Ступінь корекції (завадостійкості). Для малого розміру не слід вказувати значення ultra/high, оскільки це може призвести до помилки розпізнавання QR-коду. |
У таблиці для кожного розміру шрифту вказано кількість символів у рядку.
Назва пристрою | Шрифт 0 | Шрифт 1 | Шрифт 2 |
Comstar | 25 | 15 | 15 |
Epson TM-T88 | 42 | 28 | 21 |
Epson TM-U220 (кодування gb2312) | 32 | 32 | 16 |
Epson TM-U220 (усі кодування крім gb2312) | 30 | 30 | 15 |
SPrint TM200 | 72 | 36 | 36 |
SPrint TM200 Min | 48 | 48 | 24 |
Штрих-600 | 30 | 24 | 15 |
Posiflex | 42 | 28 | 21 |
STAR SPxxx матричний | 42 | 23 | 17 |
SP298 | 42 | 34 | 20 |
STAR TSPxxx | 48 | 38 | 19 |
OPOS принтер | 48 | 24 | 19 |
Zebra Epl | Залежить від налаштувань dpi | Залежить від налаштувань dpi | Залежить від налаштувань dpi |
Epson TM-U295 | 35 | 21 | 14 |
Усі ФР підтримують форматування тільки одним шрифтом, розміри якого задаються в налаштуваннях ФР, в Syrve Office.
Теги й атрибути зміни шрифтів заборонені всередині таблиць, для цього необхідно користуватися атрибутом font для комірок таблиці.
За замовчуванням у документі задано вирівнювання по лівому краю. У таблиці подано теги, що дають змогу змінювати спосіб вирівнювання для всіх вкладених у них елементів.
Теги для керування вирівнюванням
Назва | Призначення |
<center></center> | Вирівнювання по центру. |
<justify></justify> | Вирівнювання по ширині. |
<left></left> | Вирівнювання по лівому краю. |
<right></right> | Вирівнювання по правому краю. |
За замовчуванням у документі друк зображень вимкнено. Тег для друку зображень:
Назва | Призначення |
<logo>index</logo> | Друк раніше завантаженого зображення з енергонезалежної пам'яті або також з пам'яті пристрою (NV image store) з числовим індексом index. |
За замовчуванням у документі використовується перенесення тексту в будь-якому місці. У таблиці перелічено теги, які можна використовувати для перенесення тексту в документі.
Теги для керування перенесенням тексту
Назва | Призначення |
<split></split> | Розбити текст на рядки, при перенесенні на пробільних символах (пробіл, табуляція тощо). |
<wrap></wrap> | Розбити текст на рядки, при перенесенні в будь-якому місці. |
<cut></cut> | Обрізати текст, який не поміщається в рядок. |
<br /> | Перехід на новий рядок. Перехід здійсниться тільки якщо поточний рядок порожній. Будь- яка кількість підряд-рядних <br /> на виході дадуть один порожній рядок. |
<np /> | Новий параграф. Після його застосування, наступний за ним текст почнеться з нового рядка, і водночас, якщо попередній параграф було відформатовано по ширині, то останній рядок цього параграфа буде вирівняно по лівому краю (аналогічно працює MS Word). |
<nobr /> | Нерозривний пробіл. Слова, які йдуть через нерозривний пробіл, сприйматимуться як єдине слово. Це означає, що вони не розбиватимуться під час форматування під час використання split formatter або justify alignment. |
За замовчуванням порожній простір між символами заповнюється пробілами. Тег <fill /> дає змогу перевизначити цю поведінку.
Назва | Призначення |
<fill /> | Перевизначає символ, який використовується для заповнення порожнього простору. Новий символ (або набір символів) задається атрибутом @symbol. Не успадковується таблицею, якщо її обернути тегом <fill />. |
Слід враховувати, що тег <fill /> не перевизначає пробільні символи користувацького тексту.
<doc> <left> текст з пробілом </left> <fill symbols="."> <br /> <left> текст з пробілом </left> <np /> <table> <columns> <column /> <column /> </columns> <cells> <c>лівий текст</c> <c> <right>правий текст</right> </c> </cells> </table> </fill> </doc>
Результат:
| текст з пробілом | | текст з пробілом ...................| |.....................................| |лівий текст правий текст|
Форматування таблиць - основний спосіб форматування документів.
Таблиця визначається тегом <table></table>, який містить обов'язкові дочірні теги: <columns></columns> (колонки таблиці), <cells></cells> (клітинки таблиці), які, своєю чергою, мають містити хоча б одне визначення колонки та комірки відповідно.
Назва | Можливі значення | Призначення |
cellspacing | Ціле число, більше або рівне 0. За замовчуванням: 1 | Ширина, у символах, внутрішніх відступів між колонками. |
<doc> <table> <columns> <column /> </columns> <cells> <c>Текст</c> </cells> </table> </doc>
Колонки визначаються тегами <column /> усередині тега <columns /> у напрямку зліва направо. Для всіх клітинок кожної колонки можна задавати спосіб форматування за допомогою загальних атрибутів форматування: font, align і formatter (див. вище Атрибути тега <doc>).
Назва | Можливі значення | Призначення |
autowidth | Будь-яке, важливий факт наявності атрибута. | Чи розтягується колонка під вміст. |
minwidth | Ціле число, більше або рівне 1. За замовчуванням: 1 | Мінімальна ширина колонки, у символах. Використовується тільки для колонок, що розтягуються. |
maxwidth | Ціле число, більше або рівне 1. За замовчуванням: не задано | Максимальна ширина колонки, у символах. Використовується тільки для колонок, що розтягуються. |
width | Ціле число, більше або рівне 1. За замовчуванням: не задано | Фіксована ширина колонки. Не можна використовувати спільно з autowidth. |
valign | bottom, center, top За замовчуванням: top | Вертикальне вирівнювання в комірках цього стовпчика. |
align | center, justify, left, right | Вибір вирівнювання (див. вище Керування вирівнюванням) |
formatter | cut, split, wrap | Вибір способу перенесення рядків (див. вище Керування перенесенням тексту) |
Колонки, які не розтягуються (атрибут autowidth) і для яких явно не задано розмір в атрибуті width, розподіляють місце, що залишилося від інших колонок, порівну.
Осередки (клітинки) визначаються тегами <c /> або <ct /> усередині тега <cells /> у напрямку зліва направо, згори вниз.
За замовчуванням у кожному рядку таблиці виводиться стільки ж клітинок, скільки і колонок.
Тег <c> може містити будь-який контент, зокрема й інші теги форматування. Тег <ct /> може містити тільки текст.
У колонках, що розтягуються (з атрибутом autowidth), має бути хоча б один осередок типу <ct />, і тільки за ним рахують ширину колонки для врахування розтягування колонки й обмежень minwidth і maxwidth.
Назва | Можливі значення | Призначення |
colspan | Ціле число, більше або рівне 0. За замовчуванням: 1 | Об'єднує вказану кількість колонок. 0 - комірка займає всю ширину таблиці. |
font | f0, f1, f2 | Встановлює шрифт для рядка таблиці. Цей атрибут має бути встановлений для першої комірки рядка, атрибут в інших комірках ігнорується. |
Механізм форматування підтримує таблиці, вкладені в таблиці.
Але є особливість: якщо таблицю вкладено в клітинку, що не займає весь рядок, то шрифт у ній зафіксовано, він дорівнює поточному шрифту рядка батьківської таблиці. Атрибути зміни шрифтів для рядків вкладеної таблиці будуть проігноровані.
<doc> <table> <columns> <column width="10" /> <column /> </columns> <cells> <c>котрийсь текст</c> <c>котрийсь інший текст</c> <c font="f1"> <table cellspacing="0"> <columns> <column /> <column valign="bottom" /> </columns> <cells> <c>f0c1</c> <c>f0c2</c> <c font="f2">f2c1</c> <c>f2c2</c> </cells> </table> </c> <c>текст у батьківській таблиці</c> </cells> </table> </doc>
<f0>, <f1> - це умовне позначення для рядків, що друкуються шрифтом f0 і f1.
У цьому прикладі для першого рядка застосовано шрифт <f0>, тому що це шрифт за замовчуванням для документа і він не перевизначений.
Шрифт вкладеної таблиці визначається шрифтом, заданим для рядка батьківської таблиці, у якому знаходиться вкладена таблиця. Перевизначення для другого рядка вкладеної таблиці (font="f2") не спрацювало, оскільки таблиця не займає цілий рядок батьківської таблиці.
Макроси - це теги, які не визначені в базовому наборі тегів форматування, і є скороченими версіями деяких типових конструкцій.
Будемо позначати @attribute значення атрибута attribute з вихідного тега.
Назва тега | Опис |
<line /> | Виводить один рядок, заповнений символом @symbols. За замовчуванням: @symbols='-', тобто в результаті застосування тега <line /> без атрибутів на виході вийде горизонтальна лінія на всю ширину документа. Підсумкова розмітка:<fill symbols="@symbols"> <np /> </fill> |
<linecell /> | Додає клітинку на всю ширину таблиці, заповнену символом @symbols. За замовчуванням @symbols='-', тобто в результаті застосування тега <linecell /> без атрибутів на виході вийде горизонтальна лінія на всю ширину таблиці. Підсумкова розмітка:<c colspan="0"> <fill symbols="@symbols"> <np /> </fill> </c> |
<pair /> | Виводить в один рядок пару значень @left, @right, вирівняні вліво і вправо відповідно. Якщо @fit='left', то підсумкова розмітка:<table> <columns> <column align="left" autowidth="" /> <column align="right" /> </columns> <cells> <ct>@left</ct> <ct>@right</ct> </cells> </table>Якщо @fit='right', то підсумкова розмітка: <table> <columns> <column align="left" /> <column align="right" autowidth="" /> </columns> <cells> <ct>@left</ct> <ct>@right</ct> </cells> </table> |
leftpair | Виводить в один рядок пару значень @left, @right, обидва вирівняні вліво.Підсумкова розмітка:<table> <columns> <column align="left" autowidth="" /> <column align="left" /> </columns> <cells> <ct>@left</ct> <ct>@right</ct> </cells> </table> |
<doc> <left> <split> ****************************************** Мій ресторан ----- ТОВ «Syrve» РНОКПП 1234657890 ****************************************** </split> </left> <center>ГОСТЬОВИЙ РАХУНОК</center> <pair fit="right" left=“Основний зал" right=“Стіл: 2" /> <pair fit="right" left=“Відкрито: 13.03.2023 16:39" right=“Замовлення №459" /> <left>Офіціант: Орест</left> <table> <columns> <column /> <column align="right" autowidth="" /> <column align="right" autowidth="" /> </columns> <cells> <linecell /> <ct>Найменування</ct> <ct>К-сть</ct> <ct>Сума</ct> <linecell /> <c colspan="0">Гість 1</c> <ct>Ковбаска</ct> <ct>1</ct> <ct>10.00</ct> <ct> +1</ct> <ct /> <ct>1.00</ct> <ct>Горілка. Безалкогольна. Так, це можливо;)</ct> <ct>1</ct> <ct>20.00</ct> <ct> +9</ct> <ct /> <ct /> <c colspan="2" /> <c> <line /> </c> <c colspan="2">Всього до сплати Гість 1:</c> <ct>31.00</ct> <linecell symbols=" " /> <c colspan="0">Гість 2</c> <ct>Ковбаска</ct> <ct>1</ct> <ct>10.00</ct> <c colspan="2" /> <c> <line /> </c> <c colspan="2">Всього до сплати Гість 2:</c> <ct>10.00</ct> <linecell /> <c colspan="2">ВСЬОГО ДО СПЛАТИ:</c> <ct>41.00</ct> </cells> </table> <np /> <center> <split> ДЯКУЄМО! ПРИХОДЬТЕ ЩЕ! </split> </center> <np /> <np /> <center>Гарного дня!</center> <np /> </doc>
Результат:
|****************************************** | |Мій ресторан ----- ТОВ «Syrve» | |РНОКПП 1234657890 | |****************************************** | | ГОСТЬОВИЙ РАХУНОК | |Основний зал Стіл: 2| |Відкрито: 13.03.2023 16:39 Замовлення №459| |Офіціант: Орест | |------------------------------------------------------------| |Найменування К-сть Сума| |------------------------------------------------------------| |Гість 1 | |Ковбаска 1 10.00| | +1 1.00| |Горілка. Безалкогольна. Так, це можливо;) 1 20.00| | +9 | | ------| |Всього до сплати Гість 1: 31.00| | | |Гість 2 | |Ковбаска 1 10.00| | ------| |Всього до сплати Гість 2: 10.00| |------------------------------------------------------------| |ВСЬОГО ДО СПЛАТИ: 41.00| | | | ДЯКУЄМО! ПРИХОДЬТЕ ЩЕ! | | | | | | Гарного дня! | | |