zpl.tools
Print control

^SP - Start Print

Starts the print of the top of a label before the printer processes the rest.

^SP splits a label into segments, so the printer can start on the top of it before the bottom is complete. It gains throughput on a label complex enough that the format work, not the print, is the bottleneck. It changes nothing about the finished image, because the same fields print in the same places. A rendered format can keep it.

Syntax

^SPr

Support

Recognised, deliberately skippedparsed: none · state: none · rendered: none

Accepted and skipped, because it configures the printer rather than the label. It cannot change the rendered output, and Labelary skips it too.

A latency optimization for complex labels on real hardware. It splits the print into segments and does not change their content, so the image is identical. The renderer does not parse this command. It reports IGNORED_COMMAND at info severity, which does not reach X-Warnings. Labelary is also silent, so the rendered label is identical in both engines. — not pinned by a test

Labelary renders this command.

Parameters

rStart rowoptional · integer

Dot row where the first segment starts to print.

Default
0
Accepted range
0 to 32000 dot rows
Invalid value
not documented, and we have not measured it. The renderer does not parse or measure this command.
Test coverage
No test at the minimum, maximum or one step outside the range.

Behavior

The argument names the dot row where the segment ends. The printer prints everything above that row at once, and continues to receive and parse the commands after the ^SP. If the next segment is ready before the head reaches it, the media never stops. If it is not ready, the printer halts mid-label and waits, which is the failure the command must avoid.

Field order therefore matters as it does nowhere else in ZPL. The guide warns that the printer drops a field that arrives after its own row prints. A segmented label must list its fields in increasing row order. The guide also calls the split point trial and error, because it depends on the print speed and the label complexity.

The guide puts ^SP in a field of its own, ^SP#^FS, which keeps the parser from reading the command as part of a surrounding field.

The renderer segments nothing. It composes and returns the whole label in one piece, and prints every field where the format places it, whatever the order. The renderer does not parse this command. It reports IGNORED_COMMAND at info severity, which does not reach X-Warnings. Labelary is also silent, so the rendered label is identical in both engines.

Example

A label in two segments:

^XA
^FO50,40^A0N,40,40^FDSegment one^FS
^SP200^FS
^FO50,250^A0N,40,40^FDSegment two^FS
^XZ

Open in viewer

  • ^PF Slew Dot RowsFeeds the media a number of dot rows and leaves them blank.
  • ^PQ Print QuantityPrints the label more than once, the one command here that changes how many pages come back.