Швидке переміщення по статті:

Опис
- Основні терміни
- Які пристрої підтримуються
Теги форматування
- Управління шрифтами
- Управління вирівнюванням
- Друк зображень
- Управління перенесенням тексту
- Інші теги форматування
Таблиці
- Визначення колонок
- Визначення комірок
- Вкладені таблиці
Макроси DocPreprocess.xslt
Приклади використання



Опис

Основні поняття

Мова опису розмітки використовується для друкованої форми документів, які виводяться на принтери та фіскальні реєстратори (ФР).

Основна одиниця друку — документ у форматі xml з кореневим тегом <doc>.

Приклад 1. Найпростіший документ 

Найпростіший документ у цій розмітці виглядає так:

<doc>текст для печати</doc>

Результат:
| текст для друку |


Які пристрої підтримуються

У прикладах наводиться очікуваний вивід на принтер з одним підтримуваним шрифтом і шириною стрічки в 30 символів. Для позначення початку і кінця рядка (країв паперу) використовується символ «|».

Розмітка документа не залежить від пристроїв і при виведенні адаптується під можливості конкретного пристрою. Після друку документа на пристроях, де це підтримується, виконується розрізка стрічки.

Розмітка документа повинна працювати на пристроях із шириною стрічки 16 символів — мінімальна ширина стрічки з пристроїв, які підтримуються на момент створення цієї статті.

Атрибути тегу <doc> 

НазваМожливі значенняПризначення
bellПорожній рядок (перевіряється тільки наявність)Увімкнення кухонного дзвінка перед початком друку документа. Працює тільки для принтерів.
fontf0, f1, f2, barcode, qrcodeВибір шрифту (див. Управління шрифтами)
aligncenter, justify, left, rightВибір вирівнювання (див. Управління вирівнюванням)
formattercut, 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">  http://www.Syrve.co.uk/ </qrcode>

Щоб змінити стиль шрифту, вкажіть один або кілька відповідних атрибутів: жирний, курсив, інверсія (білі літери на чорному тлі), підкреслення.Ці атрибути можна додати до тегів <f0>, <f1>, <f2>, <ct> та <c>, наприклад:

<f2 italic="off" reverse="on">
    <left> text with space </left>
</f2>

Атрибути тегу <qrcode> 

НазваМожливі значенняЗначення за замовчуваннямПризначення
alignleft, center, rightcenterВирівнювання зображення по горизонталі.
correctionlow, medium, high, ultramediumСтупінь корекції (завадостійкості). Для малого розміру не слід вказувати значення ultra/high, оскільки це може призвести до помилки розпізнавання QR-коду.
sizetiny, small, normal, large, extralargenormalРозмір QR-коду

Атрибути тегу <barcode> 

НазваМожливі значенняЗначення за замовчуваннямПризначення
alignleft, center, rightcenterВирівнювання зображення по горизонталі.
heightRatioбудь-яке десяткове число (використовуйте крапку як роздільник цілої та дробової частини)0.3-0.35Співвідношення висоти штрих-коду до його ширини. Може дещо відрізнятися для різних моделей принтера, залежно від того, чи входить quiet zone в ширину штрих-коду чи ні.
hrion, offonВказує, чи необхідно додати текст штрих-коду (Human Readable Interpretation).

Розміри шрифтів для деяких пристроїв 

У таблиці для кожного розміру шрифту вказано кількість символів у рядку.

Назва пристроюШрифт0     Шрифт1Шрифт2
Epson TM-T88422821
Epson TM-U220 (кодування gb2312)323216
Epson TM-U220 (всі кодування крім gb2312)303015
Zebra EplЗалежить від налаштувань dpiЗалежить від налаштувань dpiЗалежить від налаштувань dpi
Epson TM-U295352114

Перераховані ФР підтримують форматування тільки одним шрифтом, розміри якого задаються в налаштуваннях ФР, в Syrve Office.

Теги та атрибути зміни шрифтів заборонені всередині таблиць, для цього необхідно користуватися атрибутом font для комірок таблиці.


Управління вирівнюванням

За замовчуванням у документі задано вирівнювання по лівому краю. У таблиці представлені теги, що дозволяють змінювати спосіб вирівнювання для всіх вкладених у них елементів.

Теги для керування вирівнюванням 

НазваПризначення
<center></ center>Вирівнювання по центру.
<justify></justify>Вирівнювання по ширині.
<left></left>Вирівнювання по лівому краю.
<right></right>Вирівнювання по правому краю.


Друк зображень

За замовчуванням у документі друк зображень вимкнено.

Теги для друку зображень 

НазваПризначення
<logo>index</logo>Друк раніше завантаженого зображення з енергонезалежної пам'яті (NV image store) з числовим індексом index.
<image>base64</image>Друк монохроматичного зображення, представленого у вигляді base64-рядка.

Атрибути тегу <image>

НазваМожливі значенняЗначення за замовчуванням     Призначення
alignleft, center, rightcenterВирівнювання зображення по горизонталі.
resizeModeclip, fitclipРежим зміни розміру зображення.
  • clip — зображення не розтягується і не стискається. Якщо ширина зображення більша за ширину етикетки, то зображення буде обрізане залежно від значення параметра align:
    - center — зображення центрується, обрізається зліва і справа однаково
    - left — зображення вирівняно по лівому краю, обрізається тільки правий край
    - right — зображення вирівняно по правому краю, обрізається тільки лівий край
  • fit — зображення пропорційно розтягується або стискається, щоб зайняти повністю всю ширину чекової стрічки (або висоту етикетки).

Управління перенесенням тексту

За замовчуванням у документі використовується перенесення тексту в будь-якому місці.

У таблиці перераховані теги, які можна використовувати для перенесення тексту в документі.

Теги для управління перенесенням тексту

НазваПризначення
<split></split>Розбити текст на рядки, переносячи на пробільних символах (пробіл, табуляція та ін.).
<wrap></wrap>Розбити текст на рядки, переносячи в будь-якому місці.
<cut></cut>Обрізати текст, який не вміщується в рядок.
<br />Перехід на новий рядок. Перехід відбудеться тільки якщо поточний рядок порожній. Будь-яка кількість послідовних <br /> на виході дасть один порожній рядок.
<np />Новий параграф. Після його застосування наступний за ним текст почнеться з нового рядка, і при цьому, якщо попередній параграф був відформатований по ширині, то останній рядок цього параграфа буде вирівняний по лівому краю (аналогічно працює MS Word).
<nobr />Нерозривний пробіл. Слова, які йдуть через нерозривний пробіл, будуть сприйматися як одне слово. Це означає, що вони не будуть розбиватися при форматуванні при використанні split formatter або justify alignment.

Інші теги форматування

За замовчуванням порожній простір між символами заповнюється пробілами. Тег <fill /> дозволяє перевизначити цю поведінку.

Інші теги форматування

НазваПризначення
<fill />Перевизначає символ, що використовується для заповнення порожнього простору. Новий символ (або набір символів) задається атрибутом @symbol.Не успадковується таблицею, якщо її обернути тегом <fill />.

Слід враховувати, що тег <fill /> не перевизначає пробільні символи користувацького тексту.

Приклад 2. Демонстрація тегу <fill /> 

<doc> <left> text with space </left> <fill symbols="."> <br /> <left> text with space </left> <np /> <table> <columns> <column /> <column /> </columns> <cells> <c>left text</c> <c> <right>right text</right> </c> </cells> </table> </fill></doc>


Результат 

| text with space              |
| text with space .............|
|..............................|
|left text           right text|



Таблиці

Форматування таблиць — основний спосіб форматування документів.

Таблиця визначається тегом <table></table>, який містить обов'язкові дочірні теги: <columns></columns> (колонки таблиці), <cells></ cells> (комірки таблиці), які в свою чергу повинні містити хоча б одне визначення колонки і комірки відповідно.

Атрибути тегу <table />

НазваМожливі значенняПризначення
cellspacingЦіле число, більше або рівне 0.
За замовчуванням: 1
Ширина, в символах, внутрішніх відступів між колонками.

Приклад 3. Найпростіший документ з таблицею

<doc> <table> <columns> <column /> </columns> <cells> <c>Text</c> </cells> </table></doc>


Визначення колонок

Колонки визначаються тегами <column /> всередині тегу <columns /> у напрямку зліва направо.

Для всіх комірок кожної колонки можна задавати спосіб форматування за допомогою загальних атрибутів форматування: font, align і formatter (див. Загальний опис).

Атрибути тегу <column /> 

НазваМожливі значенняПризначення
autowidthБудь-яке, важливий факт наявності атрибуту.Чи розтягується колонка під вміст.
minwidthЦіле число, більше або рівне 1.За замовчуванням: 1Мінімальна ширина колонки, в символах.
Використовується тільки для розтяжних колонок.
maxwidthЦіле число, більше або рівне 1.За замовчуванням: не заданоМаксимальна ширина колонки, в символах.
Використовується тільки для розтяжних колонок.
widthЦіле число, більше або рівне 1.За замовчуванням: не заданоФіксована ширина колонки.
Не можна використовувати разом з autowidth.
valignbottom, center, topЗа замовчуванням: topВертикальне вирівнювання в комірках даного стовпця.
aligncenter, justify, left, rightВибір вирівнювання (див. Управління вирівнюванням)
formattercut, split, wrapВибір способу перенесення рядків (див. Управління перенесенням тексту)

Колонки, які не розтягуються (атрибут autowidth) і для яких явно не задано розмір в атрибуті width, розподіляють місце, що залишилося від інших колонок, порівну.

Визначення комірок

Комірки визначаються тегами <c /> або <ct /> всередині тегу <cells /> у напрямку зліва направо, зверху вниз.

За замовчуванням у кожному рядку таблиці відображається стільки ж комірок, скільки і стовпців.

Тег <c> може містити будь-який контент, у тому числі й інші теги форматування.

Тег <ct /> може містити тільки текст.

У розтягуваних колонках (з атрибутом autowidth) повинна бути хоча б одна комірка типу <ct />, і тільки за ними обчислюється ширина колонки для врахування розтягування колонки та обмежень minwidth і maxwidth.

Атрибути тегу <c /> і <ct /> 

НазваМожливі значенняПризначення
colspanЦіле число, більше або рівне 0.
За замовчуванням: 1
Об'єднує вказану кількість стовпців.0 — комірка займає всю ширину таблиці.
fontf0, f1, f2Встановлює шрифт для рядка таблиці. Цей атрибут повинен бути встановлений для першої комірки рядка, атрибут в інших комірках ігнорується.

Вкладені таблиці

Механізм форматування підтримує таблиці, вкладені в таблиці. 

Але є особливість: якщо таблиця включена в комірку, яка не займає весь рядок, то шрифт в ній зафіксований і дорівнює поточному шрифту рядка батьківської таблиці. Атрибути зміни шрифтів для рядків вкладеної таблиці будуть проігноровані.

Вкладена таблиця, яка не займає весь рядок батьківської 

<doc> <table> <columns> <column width="10" /> <column /> </columns> <cells> <c>some text</c> <c>some other text</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>text in parent table</c> </cells> </table></doc>


<f0>, <f1> — це умовне позначення для рядків, що друкуються шрифтом f0 і <f1>.

У цьому прикладі для першого рядка застосовано шрифт <f0>, оскільки це шрифт за замовчуванням для документа і він не перевизначений.

Шрифт вкладеної таблиці визначається шрифтом, заданим для рядка батьківської таблиці, в якій знаходиться вкладена таблиця.

Перевизначення для другого рядка вкладеної таблиці (font=«f2») не спрацювало, оскільки таблиця не займає цілий рядок батьківської таблиці.



Макроси DocPreprocess.xslt

Макроси — це теги, які не визначені в базовому наборі тегів форматування і є скороченими версіями деяких типових конструкцій.

Будемо позначати @attribute значення атрибута attribute з вихідного тегу.

Макроси DocPreprocess.xslt 

Назва тегуОпис
<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>



Приклади використання 

Приклад 4. Форматування пречека 

<doc> <left> <split>      ******************************************
      My restaurant ----- Meat & Ale LLC
      Tax ID 45345345345656
      ******************************************
    </split> </left> <center>GUEST BILL</center> <pair fit="right" left=“Dining room: New section (1)" right=“Table: 2" /> <pair fit="right" left=“Open: 23.12.2010 4:37PM" right=“Order No. 852" /> <left>Waiter: James</left> <table> <columns> <column /> <column align="right" autowidth="" /> <column align="right" autowidth="" /> </columns> <cells> <linecell /> <ct>Name</ct> <ct>Qty</ct> <ct>Amount</ct> <linecell /> <c colspan="0">Guest 1</c> <ct>Sausage</ct> <ct>1</ct> <ct>10.00</ct> <ct>  +1</ct> <ct /> <ct>1.00</ct> <ct>Vodka. Non-alcoholic. Yes, it’s possible ;)</ct> <ct>1</ct> <ct>20.00</ct> <ct>  +9</ct> <ct /> <ct /> <c colspan="2" /> <c> <line /> </c> <c colspan="2">Amount due Guest 1:</c> <ct>31.00</ct> <linecell symbols=" " /> <c colspan="0">Guest 2</c> <ct>Sausage</ct> <ct>1</ct> <ct>10.00</ct> <c colspan="2" /> <c> <line /> </c> <c colspan="2">Amount due Guest 2:</c> <ct>10.00</ct> <linecell /> <c colspan="2">TOTAL DUE:</c> <ct>41.00</ct> </cells> </table> <np /> <center> <split>      THANK YOU! PLEASE COME AGAIN!
    </split> </center> <np /> <np /> <center>Have a good day!</center> <np /></doc>


Результат 

|******************************************                  |
|M restaurant ----- Meat & Ale LLC                           |
|Tax ID 45345345345656                                       |
|******************************************                  |
|                       GUEST BILL                           |
|Dining room: New section (1)                        Table: 2|
|Open: 23.12.2010 4:37PM                        Order No. 852|
|Waiter: James                                               |
|------------------------------------------------------------|
|Name                                             Qty  Amount|
|------------------------------------------------------------|
|Guest 1                                                     |
|Sausage                                              1 10.00|
|  +1                                                    1.00|
|Vodka. Non-alcoholic. Yes, it’s possible ;)          1 20.00|
|  +9                                                        |
|                                                      ------|
|Amount due Guest 1:                                    31.00|
|                                                            |
|Guest 2                                                     |
|Sausage                                              1 10.00|
|                                                      ------|
|Amount due Guest 2:                                    10.00|
|------------------------------------------------------------|
|TOTAL DUE:                                             41.00|
|                                                            |
|                  THANK YOU! PLEASE COME AGAIN!             |
|                                                            |
|                                                            |
|                        Have a good day!                    |
|                                                            |