Swift ZPL provides a declarative interface to write ZPL faster, easier and safer.
import ZPLBuilder
let zpl = ZPL {
LabelHome(x: 0, y: 0)
ChangeAlphanumericDefaultFont(font: "A", height: 50)
Field(x: 50, y: 50) {
FieldData(text: "Swift ZPL")
}
}
print(zpl.string()) // ^XA^LH0,0^CFA,50,0^FO50,50^FDSwift ZPL^FS^XZ
swift-zpl | ZPL |
---|---|
BarcodeCode128 |
^BC and ^FD |
BarcodeDefault |
^BY |
BarcodeQR |
^BQ and ^FD |
ChangeAlphanumericDefaultFont |
^CF |
ChangeInternationalEncoding |
^CI |
Field |
^FO and ^FS |
FieldBlock |
^FB |
FieldData |
^FD |
FieldHexadecimal |
N/A |
FieldHexadecimalIndicator |
^FH |
FieldOrientation |
^FW |
FieldOrigin |
^FO |
FieldParameter |
^FP |
FieldReversePrint |
^FR |
FieldSeparator |
^FS |
FieldTypeset |
^FT |
FontIdentifier |
^CW |
GraphicBox |
^GB |
GraphicCircle |
^GC |
GraphicDiagonalLine |
^GD |
GraphicEllipse |
^GE |
GraphicField |
^GF |
GraphicSymbol |
^GS and ^FD |
HostDirectoryList |
^HW |
Hyphen |
N/A |
LabelHome |
^LH |
LabelLength |
^LL |
LabelReversePrint |
^LR |
LabelShift |
^LS |
PrintDirectoryLabel |
^WD |
PrintWidth |
^PW |
ScalableBitmappedFont |
^A |
SelectEncodingTable |
^SE |
SetDarkness |
~SD |
TextBlock |
^TB |
UseFontNameToCallFont |
^A@ |
ZPL {
LabelHome(x: 0, y: 0)
let width = 50
let spacing = 30
for row in 0..<3 {
for col in 0..<3 {
let x = width * col + spacing * (col + 1)
let y = width * row + spacing * (row + 1)
let lineWidth = col == row ? width / 2 : 1
Field(x: x, y: y) {
GraphicBox(width: width, height: width, lineWidth: lineWidth)
}
}
}
}
ZPL {
LabelHome(x: 0, y: 0)
Field(x: 50, y: 50) {
BarcodeCode128(data: "hello30678", height: 100, interpretation: .bottom)
}
}
ZPL {
LabelHome(x: 0, y: 0)
Field(x: 50, y: 50) {
BarcodeQR(data: "hello", magnificationFactor: 10)
}
}
let image: UIImage = ...
let labelWidth = 4 * 203
let labelHeight = 6 * 203
ZPLImageEncoder.default.isCompressed = true
let zpl = ZPL {
LabelHome(x: 0, y: 0)
LabelReversePrint(enabled: true)
let imageWidth = labelWidth / 2
let imageSize = ZPLGeometryUtils.size(aspectRatio: image.size, fillWidth: imageWidth)
Field(x: 0, y: 0) {
GraphicField(image: image, size: imageSize)
}
Field(x: imageWidth, y: 0) {
GraphicField(image: image, size: imageSize)
}
Field(x: imageWidth, y: 0) {
GraphicBox(
width: imageWidth,
height: Int(imageSize.height),
lineWidth: Int(min(imageSize.width, imageSize.height))
)
}
}
let image: UIImage = ...
let labelWidth = 72 * 8
let labelHeight = 72 * 9
let settings = ZPL {
LabelHome(x: 0, y: 0)
LabelReversePrint(enabled: true)
ChangeAlphanumericDefaultFont(font: "A", height: 35)
}
let body = ZPL {
Field(x: labelWidth / 2, y: 0) {
GraphicBox(width: labelWidth / 2, height: labelHeight, lineWidth: labelWidth / 2)
}
let imageSize = ZPLGeometryUtils.size(aspectRatio: image.size, fillWidth: labelWidth)
Field(x: 0, y: 0) {
GraphicField(image: image, size: imageSize)
}
Field(x: 0, y: Int(imageSize.height)) {
FieldBlock(width: labelWidth, lines: 1, justification: .center)
FieldData(text: "Swift")
Hyphen.return
}
}
let zpl = ZPL {
settings
body
}
This package currently only contains a few commands, if you can't find what you need:
You can create a new command with just a few lines of code:
struct NewCommand: ZPLCommandConvertible {
var command: String {
// command...
}
}
ZPL {
NewCommand()
}
or create a pull request to add a new command or improve/fix existing ones.