^IS - Image Save
Saves the current label image into printer memory.
^IS stores the label under construction as a bitmap and not as ZPL, so
^IL is the command that would recall it later. We have not implemented ^IL yet, so that
recall does not work here. ^IS sits at the end of the format that draws the template. Its last argument decides
whether the printer also prints that template label. The renderer parses the command and honors that flag. A
saving ^ISd:o.x,N renders zero pages, matching Labelary.
Syntax
^ISd:o.x,pSupport
The command renders, with the caveat below.
The renderer reads the path and acts on the print flag: ^ISd:o.x,N saves without printing, so the format renders no output page. The raster itself is not stored, so a later recall of the saved name finds nothing. — not pinned by a test
Labelary renders this command. Scheduled for milestone 5.9.
Parameters
dStorage deviceoptional · single characterWhich memory device to save to.
- Default
- R:
- Invalid value
- enough to make the whole command be ignored. A device letter no printer answers to is reported on this parameter. The whole command is then ignored, so the print flag has no effect. Measured 2026-08-21:
^ISQ:T.GRF,NanswersX-Total-Count: 1where^ISR:T.GRF,Nanswers 0. The read-onlyZ:device is a different case. There the write is rejected, reported against the^XZ, and the page stays suppressed. - Test coverage
- The invalid-value rule is not pinned by a test.
oObject nameoptional · textName to save the image under.
- Default
- UNKNOWN
- Invalid value
- discarded, and the default applies
- Test coverage
- The invalid-value rule is not pinned by a test.
xExtensionoptional · textExtension to save the image under. The guide accepts .GRF or .PNG here.
- Default
- .GRF
- Invalid value
- discarded, and the default applies
- Test coverage
- The invalid-value rule is not pinned by a test.
pPrint image after storingoptional · Y or NWhether the printer also prints the label.
- Default
- Y
- Invalid value
- discarded, and the default applies. Measured 2026-08-21: an omitted, empty or rejected value all leave the default
Ystanding and the label prints. An over-long value is trimmed to its first character and reported, soNNstill saves without printing. - Test coverage
- No documented value is exercised by a test (Y, N). The invalid-value rule is not pinned by a test.
Y- Print the label and save it (default)
N- Save only, do not print
Behavior
^IS saves the page as the parser reaches the command, so it goes after the fields of
the template and before ^XZ. It stores the raster only. The ZPL does not come back from
it, and a saved image accepts no later edit.
The print flag defaults to Y. We measured this against Labelary on 2026-08-21. An omitted
slot, an empty slot, a bare ^IS, and a rejected value like Q leave that default
standing, so the label prints. A rejected value is reported on parameter 2. An over-long
value is read by its first character, so ,NN still saves without printing. A surplus
third slot draws an unrecognized-content warning from the scanner.
A device letter no printer answers to changes the whole command's effect. The save does
not happen, a device warning is reported on parameter 1, and the label still prints one
page, for example with ^ISQ:T.GRF,N.
The read-only Z: device differs. The write is rejected, and the renderer reports it
against ^XZ, where the save happens. The page count still drops to zero there.
A path with no device writes to R:. An omitted name defaults to UNKNOWN, and an
omitted extension defaults to .GRF. The guide accepts .PNG as well as .GRF for the
stored object, the only command in this family with a free extension. Every other
extension is accepted as written.
A ^PQ copy count follows whatever page count N leaves standing, so N suppresses
copies too. A ^PH slew page still prints, because that is the printer feeding media, not
the format printing itself.
An ^IS stored in a ^DF template body reaches the ^XF recall that replays it, and no
further. ~IS is not a real command. Labelary reports that it does not exist and prints
the label anyway. Only the caret spelling works.
Differences from the specification
zpl.tools against Labelary
Where our output differs from Labelary for the same input. These are the differences that break a migration.
- Labelary stores the finished label and hands it back to a later
^XGor^ILof the same path. The renderer stores nothing, so that recall reports the file does not exist. We measured this on 2026-08-21.^ISR:T.GRF,Nfollowed by^XGR:T.GRF,1,1draws the saved label there, pixel for pixel, and reportsFile 'R:T.GRF' does not existhere. Pages are built as a PDF operator stream and rasterized a stage later, so no whole-label bitmap exists to file at the^XZwhere the save happens. — not pinned by a test
Example
A template saved with the print flag left at Y, so the label prints as well as being stored:
^XA
^FO50,50^GB300,120,3^FS
^FO70,90^A0N,40,40^FDCONSTANT^FS
^ISR:TEMPLATE.GRF,Y
^XZ
Related commands
^ILImage LoadLoads a stored image as the background of the label.^IMImage MoveDraws a stored image at the current field origin.^XGRecall GraphicDraws a previously downloaded graphic, optionally magnified.