Przejdź do głównej zawartości

Język znaczników

Przegląd

Podstawowe definicje

Język znaczników jest używany do drukowanych form dokumentów. Takie dokumenty są wysyłane do drukarek oraz drukarek paragonów, znanych również jako kasy fiskalne lub KFi.

Podstawową jednostką drukowania jest dokument XML z używanym jako znacznik główny.

Przykład 1. Prosty dokument

Prosty dokument utworzony przy użyciu tego języka znaczników wygląda następująco:

<doc>wydrukowany tekst</doc>

Wynik:

| wydrukowany tekst |

Obsługiwane urządzenia

Poniższe przykłady pokazują oczekiwany tekst do wydrukowania przy użyciu jednego obsługiwanego fontu na taśmie o szerokości 30 znaków. Aby wskazać początek i koniec linii (krawędzie papieru), używany jest symbol „|”.

Znaczniki dokumentu nie zależą od urządzenia i są dostosowywane do konkretnych możliwości drukarki w momencie drukowania. Po wydrukowaniu dokumentu taśma jest cięta, jeśli urządzenie to obsługuje.

Znaczniki dokumentu działają dla taśmy o szerokości 16 znaków, która jest minimalną dopuszczalną szerokością w momencie pisania tego artykułu.

Atrybuty

NazwaMożliwe wartościFunkcja
bellPusty ciąg (sprawdzenie dostępności)Dzwonek dzwoni przed wydrukiem dokumentu.
Działa tylko dla drukarek.
fontf0, f1, f2, barcode, qrcodeWybór fontu (patrz Fonty)
aligncenter, justify, left, rightWybór wyrównania (patrz Wyrównanie)
formattercut, split, wrapWybór zawijania słów (patrz Zawijanie tekstu)

Znaczniki formatowania

Fonty

Istnieją trzy rozmiary fontów. Są one oznaczone od 0 do 2 w kolejności rosnącej rozmiaru: font 0 jest najmniejszy, font 2 największy. Jeśli nie jest określony, domyślnie używany jest font 0.

Znaczniki podane w tabeli poniżej zmieniają rozmiar fontu dla wszystkich elementów zawartych w tych znacznikach.

Znaczniki fontów

NazwaFunkcja
<f0></f0>Formatuje osadzone treści rozmiarem fontu 0.
<f1></f1>Formatuje osadzone treści rozmiarem fontu 1.
<f2></f2>Formatuje osadzone treści rozmiarem fontu 2.
<barcode></barcode>Formatuje osadzony tekst jako kod kreskowy.
Obsługuje tylko tekst.
Jeśli Twoje urządzenie nie obsługuje drukowania kodów kreskowych, ten znacznik zostanie zignorowany.
<qrcode></qrcode>Formatuje osadzony tekst jako dwuwymiarowy kod kreskowy (kod QR).
Obsługuje tylko tekst.
Jeśli Twoje urządzenie nie obsługuje drukowania kodów kreskowych, ten znacznik zostanie zignorowany.
Opcjonalne atrybuty rozmiaru i poziomu korekcji kodu QR. Przykład znacznika: <qrcode size="normal" correction="medium"> http://www.Syrve.co.uk/ </qrcode>

Styl fontu

Aby zmienić styl fontu, określ jeden lub więcej odpowiednich atrybutów: bold, italic, reverse (białe litery na czarnym tle), underline.

Te atrybuty można dodać do znaczników , , , i , na przykład:

tekst z odstępem

Atrybuty

NazwaMożliwe wartościWartości domyślneFunkcja
​align​left, center, right​centerWyrównuje obraz poziomo.
correctionlow, medium, high, ultramediumPoziom korekcji Nie zaleca się używania ultra i high dla małych rozmiarów, ponieważ może to skutkować błędem odczytu kodu QR.
sizetiny, small, normal, large, extralargenormalRozmiar kodu QR

Atrybuty

NazwaMożliwe wartościWartości domyślneFunkcja
​align​left, center, right​centerWyrównuje obraz poziomo.
heightRatiodowolna liczba dziesiętna (użyj kropki jako separatora dziesiętnego)0.3-0.35Stosunek wysokości kodu kreskowego do jego szerokości. Różni się w zależności od modeli drukarek, w zależności od tego, czy strefa ciszy jest wliczona w szerokość kodu kreskowego, czy nie.
hrion, offonWskazuje, czy tekst kodu kreskowego (Human Readable Interpretation) powinien być dodany.

Rozmiary fontów specyficzne dla urządzenia

W tabeli podano liczbę znaków na linię dla każdego rozmiaru fontu.

Nazwa urządzeniaCzcionka0Czcionka1Czcionka2
Comstar251515
Epson TM-T88422821
Epson TM-U220 (zbiór znaków gb2312)323216
Epson TM-U220 (wszystkie zbiory znaków oprócz gb2312)303015
SPrint TM200723636
SPrint TM200 Min484824
Shtrih-600302415
Posiflex422821
Drukarka igłowa STAR SPxxx422317
SP298423420
STAR TSPxxx483819
Drukarka OPOS482419
Zebra EplZależy od ustawień dpiZależy od ustawień dpiZależy od ustawień dpi
Epson TM-U295352114

Wszystkie drukarki paragonowe obsługują tylko formatowanie jednoczcionkowe, którego rozmiar jest określony w ustawieniach drukarki w Syrve Office.

Tagi i atrybuty zmiany czcionki są zabronione w tabelach; do tego celu używaj atrybutu czcionki dla komórek tabeli.

Wyrównanie 

Domyślnie zawartość jest wyrównana do lewej. Tagi podane w tabeli pozwalają zmienić wyrównanie wszystkich osadzonych elementów.

Tagi wyrównania 

NazwaFunkcja
<center></center>Wyśrodkuj zawartość
<justify></justify>Wyjustuj zawartość
<left></left>Wyrównaj zawartość do lewej
<right></right>Wyrównaj zawartość do prawej

Drukowanie obrazów 

Domyślnie drukowanie obrazów jest wyłączone.

Tagi drukowania obrazów 

NazwaFunkcja
<logo>index</logo>Wydrukuj wcześniej zaimportowany obraz z pamięci nieulotnej za pomocą indeksu numerycznego.
<image>base64</image>
Wydrukuj monochromatyczny obraz reprezentowany jako ciąg base64.

Atrybuty

NazwaMożliwe wartościWartości domyślneFunkcja
​align​left, center, right​centerWyrównuje obraz poziomo.
resizeModeclip, fitclip

Tryb zmiany rozmiaru obrazu.

  • clip — obraz nie jest rozciągany ani kompresowany. Jeśli szerokość obrazu jest większa niż szerokość etykiety, obraz zostanie przycięty w zależności od wartości parametru align:
    • center — obraz jest wyśrodkowany, przycinany równomiernie z lewej i prawej strony
    • left — obraz jest wyrównany do lewej, przycinany jest tylko prawy brzeg
    • right — obraz jest wyrównany do prawej, przycinany jest tylko lewy brzeg
  • fit — obraz jest proporcjonalnie rozciągany lub kompresowany, aby zajmować całą szerokość taśmy paragonu (lub wysokość etykiety).

Zawijanie tekstu 

Domyślnie tekst może być zawijany w dowolnym miejscu.

W tabeli pokazano tagi, które można użyć do zawijania tekstu.

Tagii zawijania tekstu 

NazwaFunkcja
<split></split>Dzieli tekst na linie i zawija w miejscach znaków odstępu (spacje, tabulacje itp.).
<wrap></wrap>Dzieli tekst na linie i zawija w dowolnym miejscu.
<cut></cut>Obcina tekst, który nie mieści się w linii.
<br />Złamanie linii. Przerwa następuje, jeśli bieżąca linia jest pusta. Dowolna liczba kolejnych <br /> spowoduje ostatecznie powstanie tylko jednej pustej linii.
<np />Nowy akapit. Po zastosowaniu, następujący tekst będzie podany w nowej linii, podczas gdy poprzednia linia zostanie wyrównana do lewej, jeśli akapit ma jakiekolwiek formatowanie szerokości (MS Word działa w ten sam sposób).
<nobr />Spacja nierozdzielająca. Słowa podzielone spacją nierozdzielającą są traktowane jako jedno słowo. Oznacza to, że nie zostaną podzielone, jeśli zastosowany jest formatator dzielenia lub wyrównanie do justowania.

Inne tagi formatowania 

Domyślnie spacja między znakami jest wypełniana znakami spacji. Tag może być użyty do zmiany tego zachowania.

Inne tagi formatowania 

NazwaFunkcja
<fill />Zmienia znak używany do wypełniania spacji. Nowy znak (lub zestaw znaków) jest ustawiany za pomocą atrybutu @symbol.
Nie jest dziedziczony, jeśli otoczony jest tagiem <fill />.

Należy pamiętać, że tag <fill /> nie zmienia znaków spacji w tekście zdefiniowanym przez użytkownika.

Przykład 2. Demonstracja tagu <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>

Wynik 

| text with space              |

| text with space .............|

|..............................|

|left text           right text|

Tabele 

Formatowanie tabel jest podstawową metodą formatowania dokumentów.

Tabela jest definiowana przez tag

, który zawiera obowiązkowe tagi potomne: oraz , które z kolei powinny zawierać co najmniej jedną kolumnę i jedną komórkę.

Atrybuty  
NazwaMożliwe wartościFunkcja
cellspacingWartość całkowita większa lub równa 0.
Domyślnie: 1
Szerokość wewnętrznego odstępu kolumny w znakach.

Przykład 3. Prosty dokument z tabelą 

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

Definicje kolumn 

Kolumny są definiowane przez tagi <column /> wewnątrz tagu <columns /> od lewej do prawej.

Można ustawić metodę formatowania dla wszystkich komórek w każdej kolumnie, używając wspólnych atrybutów formatowania, takich jak font, align i formatter (patrz Przegląd).

Atrybuty

NazwaMożliwe wartościFunkcja
autowidthDowolna. Atrybut musi być określony.Czy kolumna rozciąga się, aby dopasować zawartość.
minwidthWartość całkowita większa lub równa 1.
Domyślnie: 1
Minimalna szerokość kolumny w symbolach.

Używane tylko dla kolumn dopasowujących się automatycznie.
maxwidthWartość całkowita większa lub równa 1.
Domyślnie: nieokreślona
Maksymalna szerokość kolumny w symbolach.

Używane tylko dla kolumn dopasowujących się automatycznie.
widthWartość całkowita większa lub równa 1.
Domyślnie: nieokreślona
Stała szerokość kolumny.

Nie może być używana razem z autowidth.
valignbottom, center, top
Domyślnie: top
Wyrównanie pionowe w komórkach kolumny.
aligncenter, justify, left, rightWybór wyrównania (zobacz Wyrównanie)
formattercut, split, wrapWybór zawijania słów (zobacz Zawijanie tekstu)

Kolumny, które się nie rozciągają (autowidth) i nie mają określonego atrybutu szerokości, dzielą równo pozostałą przestrzeń.

Definicje komórek

Komórki są definiowane przez tagi <c /> lub wewnątrz tagu <cells /> od lewej do prawej.

Domyślnie każdy wiersz tabeli ma taką samą liczbę komórek i kolumn.

Tag może otaczać dowolną zawartość, w tym inne tagi formatowania.

Tag może zawierać tylko tekst.

Kolumny rozciągające się (autowidth) powinny zawierać przynajmniej jedną komórkę , która służy do określenia szerokości kolumny oraz limitów rozciągania, minwidth i maxwidth.

Atrybuty <c /> i <ct />

NazwaMożliwe wartościFunkcja
colspanWartość całkowita większa lub równa 0.
Domyślnie: 1
Scala określoną liczbę kolumn.
0 — komórka zajmuje całą szerokość tabeli.
fontf0, f1, f2Ustawia czcionkę dla wiersza tabeli. Ten atrybut powinien być ustawiony dla pierwszej komórki wiersza, atrybuty innych komórek są ignorowane.

Zagnieżdżone tabele

Mechanizm formatowania obsługuje tabele wstawione w tabele.

Jednak jeśli tabela jest wstawiona w komórkę, która nie zajmuje całego wiersza, czcionka jest ustalona i odpowiada aktualnej czcionce wiersza tabeli nadrzędnej. Atrybuty zmieniające czcionkę wierszy tabeli zagnieżdżonej będą ignorowane.

Zagnieżdżona tabela zajmująca tylko część wiersza tabeli nadrzędnej

<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>

, to symbole oznaczające wiersze drukowane za pomocą czcionek f0 i f1.

W tym przykładzie pierwszy wiersz ma zastosowaną czcionkę , ponieważ jest to domyślna czcionka dokumentu, która nie została zmieniona.

Czcionka tabeli zagnieżdżonej jest określona przez czcionkę wiersza tabeli nadrzędnej.

Czcionka drugiego wiersza tabeli zagnieżdżonej (font=f2) nie została zmieniona, ponieważ tabela nie zajmuje całego wiersza tabeli nadrzędnej.

Makra DocPreprocess.xslt

Makra to tagi, które nie są zdefiniowane w podstawowym zestawie tagów formatowania i są skróconymi wersjami niektórych typowych struktur.

Użyjmy @attribute do oznaczenia wartości atrybutu tekstu źródłowego.

Makra DocPreprocess.xslt

Nazwa taguOpis
<line />

Drukuje jedną linię wypełnioną symbolem @symbols. Domyślnie @symbols=‘-’, co oznacza, że w wyniku zastosowania tagu <line /> otrzymujemy poziomą linię rozciągającą się na cały dokument.
Wynikowy markup:

XML
<fillsymbols="@symbols"><np/></fill>
<linecell />

Dodaje komórkę rozciągającą się na całą szerokość tabeli, wypełnioną symbolem @symbols. Domyślnie @symbols=‘-’, co oznacza, że w wyniku zastosowania tagu <linecell /> otrzymujemy poziomą linię rozciągającą się na całą szerokość tabeli.
Wynikowy markup:

XML
<ccolspan="0"><fillsymbols="@symbols"><np/></fill></c>
<pair />

Drukuje parę wartości @left i @right w jednej linii, wyrównanych odpowiednio do lewej i prawej strony.
Jeśli @fit=’left’, wynikowy markup wygląda następująco:

XML
<table><columns><columnalign="left"autowidth=""/><columnalign="right"/></columns><cells><ct>@left</ct><ct>@right</ct></cells></table>

Jeśli @fit='right', wynikowy markup wygląda następująco:

XML
<table><columns><columnalign="left"/><columnalign="right"autowidth=""/></columns><cells><ct>@left</ct><ct>@right</ct></cells></table>
leftpair

Drukuje parę wartości @left i @right w jednej linii, obie wyrównane do lewej strony.  
Wynikowy markup:

XML
<table><columns><columnalign="left"autowidth=""/><columnalign="left"/></columns><cells><ct>@left</ct><ct>@right</ct></cells></table>

Przykłady użycia 

Przykład 4. Formatowanie rachunku gościa 

<doc><left><split>
**
Moja restauracja ----- Meat & Ale LLC
NIP 45345345345656
**
</split></left><center>RACHUNEK GOŚCIA</center><pair fit="right" left=“Sala jadalna: Nowa sekcja (1)" right=“Stolik: 2" /><pair fit="right" left=“Otwarte: 23.12.2010 16:37" right=“Zamówienie nr 852" /><left>Kelner: James</left><table><columns><column /><column align="right" autowidth="" /><column align="right" autowidth="" /></columns><cells><linecell /><ct>Nazwa</ct><ct>Ilość</ct><ct>Kwota</ct><linecell /><c colspan="0">Gość 1</c><ct>Kiełbasa</ct><ct>1</ct><ct>10.00</ct><ct> +1</ct><ct /><ct>1.00</ct><ct>Wódka. Bezalkoholowa. Tak, to możliwe ;)</ct><ct>1</ct><ct>20.00</ct><ct> +9</ct><ct /><ct /><c colspan="2" /><c><line /></c><c colspan="2">Kwota do zapłaty Gość 1:</c><ct>31.00</ct><linecell symbols=" " /><c colspan="0">Gość 2</c><ct>Kiełbasa</ct><ct>1</ct><ct>10.00</ct><c colspan="2" /><c><line /></c><c colspan="2">Kwota do zapłaty Gość 2:</c><ct>10.00</ct><linecell /><c colspan="2">SUMA DO ZAPŁATY:</c><ct>41.00</ct></cells></table><np /><center><split>
DZIĘKUJEMY! PROSZĘ WRÓĆ PONOWNIE!
</split></center><np /><np /><center>Miłego dnia!</center><np /></doc>

Wynik 

|******************************************                  |

|Moja restauracja ----- Meat & Ale LLC                           |

|NIP 45345345345656                                       |

|******************************************                  |

|                       RACHUNEK GOŚCIA                           |

|Sala jadalna: Nowa sekcja (1)                        Stolik: 2|

|Otwarte: 23.12.2010 16:37                        Zamówienie nr 852|

|Kelner: James                                               |

|------------------------------------------------------------|

|Nazwa                                             Ilość  Kwota|

|------------------------------------------------------------|

|Gość 1                                                     |

|Kiełbasa                                              1 10.00|

|  +1                                                    1.00|

|Wódka. Bezalkoholowa. Tak, to możliwe ;)          1 20.00|

|  +9                                                        |

|                                                      ------|

|Kwota do zapłaty Gość 1:                                    31.00|

|                                                            |

|Gość 2                                                     |

|Kiełbasa                                              1 10.00|

|                                                      ------|

|Kwota do zapłaty Gość 2:                                    10.00|

|------------------------------------------------------------|

|SUMA DO ZAPŁATY:                                            41.00|

|                                                            |

|                  DZIĘKUJEMY! PROSZĘ WRÓĆ PONOWNIE!             |

|                                                            |

|                                                            |

|                        Miłego dnia!                    |

|                                                            |