Beispiele zur Nutzung der Labelixa-API mit cURL, Python, C#, Java, Node.js und PHP: ZPL-Rendering und Barcode-Erzeugung.
Ein schlanker offizieller Client statt rohem HTTP: Kontingentfehler sind eine eigene Klasse (QuotaExceeded, mit retry_after), Fehlermeldungen kommen unverändert vom Server.
from labelixa import Client
c = Client() # anonymous; Client(api_key="lbx_...") for your quota
png = c.render_png("^XA^CF0,60^FO50,50^FDHello^FS^XZ", width_in=4, height_in=6)
open("label.png", "wb").write(png)
report = c.validate("^XA^QQ^FDx^XZ") # structured lint report
epl = c.to_epl("^XA^CF0,60^FO50,50^FDHello^FS^XZ") # ZPL -> EPL2Dieselbe Oberfläche für Node — ohne Abhängigkeiten (eingebautes fetch, Node 18+), TypeScript-Typen inklusive.
import { Client } from "labelixa";
const c = new Client(); // anonymous; new Client({ apiKey: "lbx_..." })
const png = await c.renderPng("^XA^CF0,60^FO50,50^FDHello^FS^XZ", { widthIn: 4, heightIn: 6 });
await writeFile("label.png", png);
const report = await c.validate("^XA^QQ^FDx^XZ");
const epl = await c.toEpl("^XA^CF0,60^FO50,50^FDHello^FS^XZ");Dieselbe Oberfläche für Go — nur Standardbibliothek, Abbruch über context; Kontingentfehler werden mit labelixa.AsQuotaError erkannt und tragen RetryAfter.
import labelixa "github.com/Labelixa/labelixa-sdk/go"
c := labelixa.New(labelixa.Options{}) // anonymous; Options{APIKey: "lbx_..."} for your quota
ctx := context.Background()
png, err := c.RenderPNG(ctx, "^XA^CF0,60^FO50,50^FDHello^FS^XZ",
labelixa.RenderOptions{WidthIn: 4, HeightIn: 6})
if err != nil {
log.Fatal(err)
}
os.WriteFile("label.png", png, 0o644)
report, err := c.Validate(ctx, "^XA^QQ^FDx^XZ", labelixa.ValidateOptions{})
epl, err := c.ToEPL(ctx, "^XA^CF0,60^FO50,50^FDHello^FS^XZ", labelixa.RenderOptions{}) // ZPL -> EPL2Claude Desktop, Claude Code und andere MCP-Clients können Labelixa direkt als Werkzeug nutzen: ZPL-, EPL-, TSPL- und CPCL-Etiketten rendern, validieren, debuggen und konvertieren sowie Barcodes erzeugen. Verbinden Sie sich mit dem Remote-Server unter https://api.labelixa.com/mcp (nichts zu installieren; auch im offiziellen MCP-Registry als com.labelixa/zpl und auf Smithery gelistet) oder starten Sie ihn lokal:
{
"mcpServers": {
"labelixa": {
"command": "npx",
"args": ["-y", "labelixa-mcp"],
"env": {"LABELIXA_API_KEY": "lbx_..."}
}
}
}Rendert den ZPL-Block unter dem Cursor direkt im Editor und prüft die Datei während der Eingabe — die Befunde erscheinen mit echter Zeile und Spalte im Problems-Panel, mit Schnellkorrekturen für die Befunde, die die API bereits beheben kann, und Hover-Hilfe zu ZPL-Befehlen aus demselben Wörterbuch wie die Referenzseiten. Das Linting verbraucht nie Etikettenkontingent; das Rendern einer Vorschau schon, daher läuft es nur auf Befehl. Der API-Schlüssel liegt im geheimen Speicher des Editors (Befehl: Labelixa: Set the API key), nie in einer Einstellungsdatei, und aus einem nicht vertrauenswürdigen Arbeitsbereich wird nichts gesendet.
code --install-extension labelixa.labelixa-zplDieselbe Erweiterung ist auch auf Open VSX veröffentlicht — für Cursor, VSCodium, Gitpod, Theia und andere Editoren, die diese Registry nutzen: in der Erweiterungsansicht nach Labelixa ZPL suchen.
Das Plugin Labelixa ZPL auf dem JetBrains Marketplace rendert den ^XA…^XZ-Block unter dem Cursor im Toolfenster Labelixa Preview und markiert mit Labelixa: Validate ZPL die Befunde mit echter Zeile und Spalte im Editor — in IntelliJ IDEA, PyCharm, WebStorm, Rider, GoLand und den anderen JetBrains-IDEs (Plattform 2024.1 und neuer). Installation: unter Settings → Plugins → Marketplace nach Labelixa ZPL suchen. Der API-Schlüssel ist optional und wird im Passwortspeicher der IDE abgelegt.
import requests
r = requests.post("https://api.labelixa.com/v1/printers/8dpmm/labels/4x6/0",
data="^XA^CF0,60^FO50,50^FDHello^FS^XZ")
open("label.png", "wb").write(r.content)
print(r.headers.get("X-Warnings"))const res = await fetch("https://api.labelixa.com/v1/printers/8dpmm/labels/4x6/0", {
method: "POST", body: "^XA^CF0,60^FO50,50^FDHello^FS^XZ"
});
const buf = Buffer.from(await res.arrayBuffer());
require("fs").writeFileSync("label.png", buf);<?php
$ch = curl_init("https://api.labelixa.com/v1/printers/8dpmm/labels/4x6/0");
curl_setopt($ch, CURLOPT_POST, true);
curl_setopt($ch, CURLOPT_POSTFIELDS, "^XA^CF0,60^FO50,50^FDHello^FS^XZ");
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
file_put_contents("label.png", curl_exec($ch));using var http = new HttpClient();
var zpl = new StringContent("^XA^CF0,60^FO50,50^FDHello^FS^XZ");
var res = await http.PostAsync(
"https://api.labelixa.com/v1/printers/8dpmm/labels/4x6/0", zpl);
res.EnsureSuccessStatusCode();
File.WriteAllBytes("label.png", await res.Content.ReadAsByteArrayAsync());
Console.WriteLine(res.Headers.TryGetValues("X-Warnings", out var w)
? string.Join(", ", w) : "");HttpClient http = HttpClient.newHttpClient();
HttpRequest req = HttpRequest.newBuilder()
.uri(URI.create("https://api.labelixa.com/v1/printers/8dpmm/labels/4x6/0"))
.POST(HttpRequest.BodyPublishers.ofString("^XA^CF0,60^FO50,50^FDHello^FS^XZ"))
.build();
HttpResponse<byte[]> res = http.send(req,
HttpResponse.BodyHandlers.ofByteArray());
Files.write(Path.of("label.png"), res.body());
System.out.println(res.headers().firstValue("X-Warnings").orElse(""));curl "https://api.labelixa.com/v1/barcodes?type=ean13&data=869012345678" > product.pngimport requests
r = requests.get("https://api.labelixa.com/v1/barcodes",
params={"type": "ean13", "data": "869012345678"})
open("product.png", "wb").write(r.content)using var http = new HttpClient();
var url = "https://api.labelixa.com/v1/barcodes?type=ean13&data=869012345678";
File.WriteAllBytes("product.png", await http.GetByteArrayAsync(url));HttpClient http = HttpClient.newHttpClient();
HttpRequest req = HttpRequest.newBuilder()
.uri(URI.create(
"https://api.labelixa.com/v1/barcodes?type=ean13&data=869012345678"))
.build();
HttpResponse<byte[]> res = http.send(req,
HttpResponse.BodyHandlers.ofByteArray());
Files.write(Path.of("product.png"), res.body());curl -X POST "https://api.labelixa.com/v1/printers/8dpmm/labels/4x2/" \
--data-binary @labels.zpl -H "Accept: application/pdf" \
-H "X-Page-Size: A4" -H "X-Page-Layout: 2x3" > labels.pdf<?php
$ch = curl_init("https://api.labelixa.com/v1/printers/8dpmm/labels/4x6/");
curl_setopt($ch, CURLOPT_POST, true);
curl_setopt($ch, CURLOPT_POSTFIELDS, file_get_contents("labels.zpl"));
curl_setopt($ch, CURLOPT_HTTPHEADER, ["Accept: application/pdf"]);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
$pdf = curl_exec($ch);
if (curl_getinfo($ch, CURLINFO_HTTP_CODE) !== 200) {
throw new RuntimeException("Labelixa: " . $pdf);
}
file_put_contents("labels.pdf", $pdf); // one page per label