What
With the print templates in the Restaurant POS app, print templates can be created, edited, and customized.
Where
Restaurant POS app: Menu > Templates. |
Introduction
The print template list has been revised. It now provides you with a much clearer overview of all available receipt templates – whether stored locally, store-specific, or globally defined. From here, you can manage templates, create new ones, or access the template editor.
Opening the editor
The print templates can be accessed via the Restaurant POS app: Menu > Templates.
Overview columns
Name: The name of the template.
Receipt type: Indicates which type of receipt the template is used for, e.g.
- Hospitality receipt
- Invoice receipt
- Cash register closing
- Correction receipt (kitchen)
Availability: This column clearly shows where a template is valid
- Global default template: System template, read-only, cannot be deleted.
- All stores: Template is used across all locations.
- This store: Template applies only to your current store.
- Device: Stored locally on this device – ideal for testing or alternative layouts.
This allows you to immediately see the scope of a template.
Printer: Shows which printer the template is assigned to.
Actions: The following functions are available per template:
- Edit → opens the template editor.
- Download → saves the template as a JSON file.
- Delete → not available for global standard templates.
Hide default templates: Hides the global, read-only default templates from the list.
Resync (Resynchronize): Updates the entire template list.
Import template: You can import templates in two ways:
- Paste JSON text directly: Convenient for support cases or quick restoration.
- Import from file: To load previously exported templates (JSON files).
Create new template: When creating a new template, two options are available:
- Blank template – without content or settings: Ideal for completely custom designs.
- Copy existing template: You can copy any template you have access to, whether it is:
- local
- store-specific
- global default template
The template is fully duplicated and can then be edited.
Template editor – design & customize print templates
Introduction
With the template editor, you can design the layout of your receipts – for example, invoices or kitchen slips.
The interface has been completely redesigned: clear, intuitive, and ideal for creating custom layouts or layouts that apply across multiple stores.
The template editor consists of two sections:
- General – Template properties
- Style – Designing the actual layout
After editing, you can save the template locally and then publish it for one or all stores.
1. "General" tab – template properties
In the "General" tab, you define the basic structure of the template.
Name: The name of the template as it appears in the print template list.
Receipt type: Here you specify which receipt the template will be used for (e.g., invoice, hospitality receipt, cash register closing).
Paper width: The width of the receipt printer (e.g., 58 mm or 80 mm).
This setting affects the layout width and image sizes in the Style section.
This tab contains only the basic key settings of the template — the actual design work takes place in the "Style" tab.
Elements in the style section
Text row
A text row is an element that allows you to place multiple text fields next to each other in a single line. It is ideal for tabular or column-based representations on the receipt, such as item name – quantity – price.
Within a text row, you can add as many text fields as needed, each containing its own content:
- static text (e.g., "Quantity")
- dynamic values using object + field (e.g., order_number, article_name, article_price)
The width of the text fields adjusts dynamically so that all content is displayed neatly in one line. Each Text Row can be formatted and, if necessary, printed only under specific conditions.
Typical use cases:
- tabular item lines
- combined layouts on a single line
- values that logically belong together and should be printed side by side
Text field
A text field is a single text element that you can place freely within the layout.
It is suitable for simple text components that should stand alone in a line — such as headings, notes, totals, or individual values.
A text field can contain:
- static text (e.g., "Thank you for your order")
- dynamic data from an object + field (e.g., order number, date, customer)
Text fields can be customized in font size, alignment, and conditions, and they form the basis for all simple text outputs that do not need to be displayed as a table.
Typical use cases:
- Headings ("Items", "Payment section")
- Single values such as total amount or order channel
- Notices and footer texts
Barcode
Places a barcode on the receipt, e.g., for invoice numbers or order IDs.
You can select the barcode type, width/height, and which field from the order should be used as the code.
Typically used for pickup codes, invoice numbers, or internal process numbers.
Code 128 is a barcode standard that allows encoding three different character sets from the ASCII character set.
- Code 128 A encodes uppercase letters, numbers, control characters, and special characters.
- Code 128 B includes uppercase and lowercase letters, numbers, control characters, and special characters.
QR code
Inserts a QR code, e.g., for website links, tracking URLs, or navigation links for drivers.
You can freely configure the size, error correction level, and data source (object/field).
Error correction level (QR code)
The error correction level determines how resilient a QR code is to damage or poor print quality.
The higher the level, the more of the code can be missing or covered — but the larger and denser the QR code becomes.
The levels:
- L (Low) – lowest error correction, smallest QR code
- Suitable for clean, high-quality prints.
- M (Medium) – standard level
- Good balance between size and robustness.
- Q (Quartile) – higher error correction
- Still readable even when partially damaged.
- H (High) – highest error correction
- Can withstand the most obstruction or dirt, but produces the largest QR code.
In short:
- Higher level = more robust, but larger
- Lower level = smaller, but more sensitive
Separator
The separator is used to clearly divide sections of the receipt. It consists of one or multiple freely definable characters that are automatically repeated across the entire width of the receipt.
1. What the separator can do
You can enter any character or combination of characters, and the editor automatically repeats it until the entire line is filled.
2. Set the number of repetitions (lines)
You can define how many lines of the separator should be printed.
Examples:
1 line:
-+-+-+-+-+-+-+-+-+
2 lines:
------------------
------------------
3 lines, e.g., using *:
******************
******************
******************
3. Conditional printing ("Print only if…")
As with all style elements, you can specify that the separator should only be printed if a certain object, table, or field exists.
This allows you to print the separator only when items exist or when certain additional sections should appear.
Cut
Cuts the receipt.
Inserts a cut command for the printer. At this point, the receipt printer will cut the paper (e.g., between the customer section and a Google Maps QR code for the driver).
Image
Allows you to insert a logo or graphic.
The maximum width depends on the selected paper width.
Maximum image width:
- 80 mm paper: max. 76 mm (538 px at 180 dpi / 607 px at 203 dpi)
- 58 mm paper: max. 54 mm (382 px at 180 dpi / 431 px at 203 dpi)
3. Working with data – clearly explained
To integrate order information into the layout, the editor uses a clear structure:
Objects:
An object groups data that logically belongs together, e.g., order, customer, or item position.
Fields:
Individual values within an object, such as:
- order number
- date
- customer name
Tables:
Lists that contain multiple entries, for example:
- all items in an order
- all toppings
- all discounts
Tables automatically repeat the corresponding element for each entry.
This data structure enables dynamic, flexibly generated receipts.
4. "Print only if …" – element-specific output
Each element in the style section can optionally be printed only under certain conditions.
How it works:
- Enable the checkbox "Print only if …".
- Select an object or table that must exist.
- The element will only be printed if this data exists.
- Optionally, you can also select a field that must contain a value.
Examples of conditions:
- A note field, e.g., "Doorbell sign", is printed only if a doorbell sign was specified.
- A section with company information appears only for corporate customers.
- Additional information for delivery orders appears only if the order includes a delivery address.
Benefit:
You can create a universal template that automatically determines which sections to print — depending on which information is present in the order.
5. Save & publish
Save: When you create a new template or edit an existing one, it is initially saved only on your computer or tablet.
Publish: To publish a print template (i.e., make it active for one store or all stores), a user needs the corresponding role: Print template editor (POS app).
Administrators have this permission by default and do not need any additional assignment.
Employees without administrator rights must be assigned this role manually.
Assigning the role:
In the administration area under Admin: Personell management > Employee > Edit > Open Password and Authorization > Assign user groups > Check: Print template editor (POS app) > Save changes.
After saving a print template in the Restaurant POS app, the button changes to "Publish".
When publishing, you can choose:
- This store → template is valid only in this store.
- All stores → template is used across all stores.
The layout becomes active in live operation only after publishing.

Overview of field values and their meaning
Customer data
| Name | Description | Object | Field |
| Customer Number | Unique internal customer identifier | customer | ordercustomer_customer_number |
| First Name | Customer’s first name | customer | ordercustomer_user_name |
| Last Name | Customer’s last name | customer | ordercustomer_user_surname |
| Street | Customer’s street | customer | ordercustomer_customer_street |
| Street Number | Customer’s street number | customer | ordercustomer_customer_streetnumber |
| ZIP Code | Customer’s ZIP code | customer | ordercustomer_customer_zip |
| City | Customer’s city | customer | ordercustomer_customer_city |
| Email | Customer’s email address | customer | ordercustomer_customer_email |
| Telephone | Customer’s phone number | customer | ordercustomer_customer_telephone |
| Company Name | Customer’s company name | customer | ordercustomer_customer_companyname |
| Department | Customer’s department | customer | ordercustomer_customer_department |
| Internal Comment | Internal comment about the customer | customer | ordercustomer_customer_internalComment |
| Pathfinder | Directions to customer’s location | customer | ordercustomer_customer_pathfinder |
| Doorbell | Doorbell information | customer | ordercustomer_customer_doorbell |
| Latitude | Geographical latitude | customer | geocoding_lat |
| Longitude | Geographical longitude | customer | geocoding_lng |
| Gender | Customer’s gender | customer | ordercustomer_user_gender |
| Alias | Customer’s alias | customer | ordercustomer_customer_alias |
| Staircase | Staircase information | customer | ordercustomer_customer_locationDetails |
| Floor | Floor information | customer | ordercustomer_customer_locationDetails2 |
| Door | Door information | customer | ordercustomer_customer_locationDetails3 |
| Order Count | Total number of orders by customer | customer | customer_ordercount
|