POS printer templates
On this page
POS printer templates define what is printed on receipts and labels at the point of sale. Templates are created in Salesforce and then selected from within the POS hardware settings.
StoreConnect supports three printer template types:
| Type | Used for |
|---|---|
| Receipt | Transaction receipts, layby dockets |
| Label | Product labels, barcode labels |
| Document | PDF documents generated via jsPDF Liquid tags |
Templates also have a context that determines when they can be selected. Most templates have the product context. Cart templates are a special context described below.
Create a printer template
Templates are created in Salesforce on the Store record.
- Open your store in StoreConnect.
- Go to the Additional Relationships tab.
- In the Store Printable Templates section, select New or open an existing template.
- Complete the template fields:
- Name — a descriptive name you will recognize in the POS template selector
- Printer Type — select Receipt or Label
- Type — select Product for most templates
- Template — enter the template code using Liquid and print markup
- Select Save.
For a full receipt template example with code explanations, see Create or update a POS receipt template.
Template syntax
Templates use a combination of Liquid (for dynamic data) and print markup tags (for layout and formatting).
Print markup tags control layout:
| Tag | Description |
|---|---|
{document} |
Opens the document with optional settings (e.g. word-wrap=true) |
{center} / {left} |
Text alignment |
{bold} / {endBold} |
Bold text |
{line} |
Blank line |
{rule} |
Horizontal rule |
{table cols=N ...} |
Multi-column table layout |
{image src="..." size=N} |
Image (e.g. outlet logo) |
{qrcode data="..."} |
QR code |
Liquid variables provide transaction data. Common examples:
liquid
{{ current_order.total | money }}
{{ current_order.contact.name }}
{{ outlet.name }}
{% for item in current_order.items %}
{{ item.product.name }} x{{ item.quantity }}
{% endfor %}
Select a template in the POS
Once a template exists in Salesforce, select it from within the POS:
- In the POS, go to Settings > Hardware.
- Select the printer type (Receipt or Label).
- Choose the template from the list. A green tick confirms it is selected.
- Select Test print to verify the output before starting a shift.
See POS hardware setup for the full hardware configuration walkthrough.
Cart templates
Cart templates let you print the contents of the current cart before an order is placed — for example, to produce a quote or cart summary for a customer.
To use cart templates: 1. Create a printer template in Salesforce with the context set to Cart (instead of Product). 2. In the POS, go to Settings > Printer Templates and select the template under Cart template. 3. Add a print:cart action to a POS layout button to allow staff to print at any time.
Liquid context for cart templates
Cart templates receive the root variable current_cart:
| Variable | Description |
|---|---|
{{ current_cart.id }} |
Cart token |
{{ current_cart.total }} |
Calculated cart total |
{{ current_cart.item_count }} |
Total quantity across all items |
{{ current_cart.contact.name }} |
Assigned customer name (if any) |
{{ current_cart.items }} |
Collection of cart items |
{{ item.name }} |
Item name (in a {% for item in current_cart.items %} loop) |
{{ item.quantity }} |
Item quantity |
{{ item.data.s_c__unit_price__c }} |
Item unit price (raw field via item.data.*) |
:::note
Cart templates use the same printer type (Receipt, Label, or Document) as other templates. The print:cart action routes to whichever printer type the selected template specifies.
:::
Label templates
Label templates follow the same structure as receipt templates but are assigned Printer Type: Label. Labels are typically used for product or barcode printing.
Label printing can also be triggered by a POS layout action button, allowing staff to print a label directly from a record in a custom layout. See POS customization and design for layout action configuration.
Document templates (PDF)
Document templates generate PDFs using jsPDF. Instead of print markup tags, document templates use a set of Liquid tags that map directly to jsPDF methods. All document tags must be wrapped in a {% pdf %}...{% endpdf %} block.
Structure
liquid
{% pdf orientation: "portrait", unit: "mm", format: "a4" %}
{% set_font "helvetica", "normal" %}
{% set_font_size 12 %}
{% text "Hello, world!", 20, 20 %}
{% endpdf %}
The {% pdf %} tag accepts any jsPDF constructor options as keyword arguments (orientation, unit, format). Only one {% pdf %} block is allowed per template.
Available tags
All tags take arguments that match the corresponding jsPDF method signature.
Text
| Tag | jsPDF method |
|---|---|
{% text %} |
text() |
{% text_with_link %} |
textWithLink() |
{% set_font %} |
setFont() |
{% set_font_size %} |
setFontSize() |
{% set_text_color %} |
setTextColor() |
{% split_text_to_size %} |
splitTextToSize() |
Drawing
| Tag | jsPDF method |
|---|---|
{% circle %} |
circle() |
{% ellipse %} |
ellipse() |
{% line %} |
line() |
{% lines %} |
lines() |
{% rect %} |
rect() |
{% rounded_rect %} |
roundedRect() |
{% triangle %} |
triangle() |
Color and style
| Tag | jsPDF method |
|---|---|
{% set_draw_color %} |
setDrawColor() |
{% set_fill_color %} |
setFillColor() |
{% set_line_width %} |
setLineWidth() |
{% set_line_cap %} |
setLineCap() |
{% set_line_dash %} |
setLineDash() |
{% set_line_dash_pattern %} |
setLineDashPattern() |
{% set_line_join %} |
setLineJoin() |
{% stroke %} |
stroke() |
{% fill %} |
fill() |
{% fill_stroke %} |
fillStroke() |
{% fill_even_odd %} |
fillEvenOdd() |
Page
| Tag | jsPDF method |
|---|---|
{% add_page %} |
addPage() |
{% delete_page %} |
deletePage() |
{% set_page %} |
setPage() |
{% move_page %} |
movePage() |
Image
| Tag | jsPDF method |
|---|---|
{% add_image %} |
addImage() |
{% add_svg_as_image %} |
addSvgAsImage() |
Path
| Tag | jsPDF method |
|---|---|
{% path %} |
path() |
{% move_to %} |
moveTo() |
{% line_to %} |
lineTo() |
{% curve_to %} |
curveTo() |
{% clip %} |
clip() |
{% clip_even_odd %} |
clipEvenOdd() |
{% discard_path %} |
discardPath() |
State
| Tag | jsPDF method |
|---|---|
{% save_graphics_state %} |
saveGraphicsState() |
{% restore_graphics_state %} |
restoreGraphicsState() |
{% scale %} |
scale() |
{% set_current_transformation_matrix %} |
setCurrentTransformationMatrix() |
Link and annotation
| Tag | jsPDF method |
|---|---|
{% link %} |
link() |
{% create_annotation %} |
createAnnotation() |
Document properties
| Tag | jsPDF method |
|---|---|
{% set_properties %} |
setProperties() |
{% set_document_properties %} |
setDocumentProperties() |
{% pdf_comment %} |
comment() |
Quest Airpay TAP receipts
Quest Airpay TAP payment receipts can be printed using the print:quest_receipt action with the order_sc_id parameter. This action prints the receipt data returned by the Quest terminal and does not use a configurable template.
To customize Quest payment output on a receipt, use a standard print:receipt action with a custom template and access the Quest receipt data via payment.gateway_receipt:
liquid
{% for payment in order.payments %}
{% if payment.gateway_receipt %}
{{ payment.gateway_receipt }}
{% endif %}
{% endfor %}
:::note Printer template changes made in Salesforce are reflected in the POS the next time the template list is loaded in hardware settings. No POS restart is required. :::