zplCloud Blog
Imprimer du ZPL sur n'importe quelle imprimante d'étiquettes : TSC, Honeywell, SATO, Brother, Toshiba et plus
Vos étiquettes sont en ZPL, mais toutes les imprimantes ne sont pas des Zebra. Comment imprimer exactement la même étiquette sur des imprimantes qui parlent TSPL, DPL, SBPL, EPL2, CPCL, ESC/POS, Brother raster, PCL, Easy Plug, TPCL ou JScript - en PNG, en PDF ou en job brut pour le port 9100.
Une étiquette, onze langages d'imprimante
Le ZPL est le langage d'étiquettes le plus répandu qui soit, et il a été conçu pour les imprimantes Zebra. Tout va bien tant que l'entrepôt est entièrement équipé en Zebra. Mais une imprimante TSC est arrivée avec une offre moins chère, l'usine du pays voisin tourne sur SATO, au poste d'emballage chaque table a sa Brother QL, la ligne d'impression-pose utilise des têtes Avery Dennison ou Novexx, et les retours sortent de la laser du bureau. Les étiquettes, elles, n'existent qu'une seule fois : en ZPL, générées par l'ERP, la boutique en ligne ou le designer zplCloud.
Ce guide montre comment faire imprimer cette unique étiquette ZPL sur toutes ces imprimantes - à l'identique, point par point - et à quoi faire attention.
Trois façons d'envoyer du ZPL à une imprimante qui ne parle pas ZPL
1. L'émulation. De nombreux fabricants livrent une émulation ZPL : Honeywell ZSim, SATO SZPL, Godex GZPL, Citizen Cross-Emulation, les modes ZPL de TSC et cab. Pour des étiquettes simples, cela fonctionne. Pour tout le reste, une émulation est une réimplémentation du ZPL par quelqu'un d'autre : métriques des polices, largeurs des codes-barres, retour à la ligne dans les champs ^FB, graphiques ^GFA et polices stockées se comportent légèrement différemment, et vous finissez par tester chaque modèle d'étiquette sur chaque modèle d'imprimante.
2. La traduction des commandes. Un convertisseur réécrit ^FO…^A0…^FD en commandes de texte et de code-barres de l'autre langage. Cela ne marche que pour les commandes qui ont un équivalent, et l'imprimante utilise alors ses polices et son générateur de codes-barres. Le résultat est ressemblant, pas identique.
3. L'envoi d'une image. L'étiquette est rendue une seule fois, à la résolution de l'imprimante cible, puis envoyée sous forme de bitmap monochrome dans la commande graphique propre à cette imprimante. Chaque langage d'imprimante en possède une. L'imprimante n'interprète plus rien - elle imprime seulement des points. Polices, Unicode, logos et codes-barres ont exactement l'aspect de l'aperçu.
zplCloud emprunte la troisième voie, en deux variantes : sous forme de fichier image pour tout ce qui dispose d'un pilote, et sous forme de job brut dans le langage de l'imprimante pour tout ce qui est sur le réseau.
Variante 1 : PNG, JPG ou PDF
Pour les imprimantes de bureau, les pièces jointes d'e-mail et l'archivage, l'étiquette devient tout simplement un fichier :
- ZPL vers PDF rend une page par étiquette, ou place les étiquettes en taille réelle sur des feuilles A4 ou Letter avec traits de coupe - le moyen le plus rapide d'imprimer une étiquette de retour sur la laser du bureau.
- ZPL vers PNG et ZPL vers JPG rendent des étiquettes individuelles en 203, 300 ou 600 dpi, par exemple pour un système de boutique qui imprime via un pilote.
Quel que soit l'appareil qui imprime le fichier, il imprime la même image. La limite de cette variante, c'est le pilote intermédiaire : il met à l'échelle, ajoute des marges et nécessite un ordinateur.
Variante 2 : le langage propre de l'imprimante, en bitmap
Les imprimantes d'étiquettes en réseau n'ont pas besoin de pilote. Les outils d'impression et les endpoints d'API correspondants produisent un job prêt à l'emploi qui part directement vers le port TCP 9100 :
1. Rendu. Le moteur zplCloud dessine chaque étiquette ^XA…^XZ à la résolution de la tête d'impression cible - sans anticrénelage, comme imprime une tête thermique. Une ligne d'un point reste exactement large d'un point.
2. Réduction à 1 bit. Chaque point est noir ou blanc.
3. Encapsulation. Le bitmap est placé dans la commande graphique du langage cible, avec les quelques commandes dont le job a besoin pour s'imprimer.
4. Envoi. Le fichier est envoyé tel quel au port 9100 de l'imprimante.
| Imprimantes | Langage | Outil | Commande d'image | Compression |
|---|---|---|---|---|
| TSC, Printronix série T | TSPL | ZPL vers TSPL | BITMAP | PCX (DOWNLOAD + PUTPCX) |
| Honeywell, Datamax-O'Neil | DPL | ZPL vers DPL | <STX>I + champ image | toujours PCX |
| SATO | SBPL | ZPL vers SBPL | ESC GB / ESC GH | PCX (ESC GP) |
| Imprimantes Zebra EPL | EPL2 | ZPL vers EPL2 | GW | - |
| Mobiles Zebra et Honeywell | CPCL | ZPL vers CPCL | bandes CG / EG | PCX (PCX) |
| Epson TM, Star, Bixolon | ESC/POS | ZPL vers ESC/POS | GS v 0 | - |
| Brother QL, TD-4, P-touch | Brother raster | ZPL vers Brother Raster | lignes raster | TIFF PackBits |
| HP LaserJet et lasers PCL | PCL 5 | ZPL vers PCL | ESC*b#W | TIFF PackBits |
| Avery Dennison, Novexx | Easy Plug | ZPL vers Easy Plug | #YIB | RLE (#YIR) |
| Toshiba Tec | TPCL | ZPL vers TPCL | {SG;…} | TOPIX |
| cab | JScript | ZPL vers JScript | téléversement d'image + champ I | PCX |
Chaque job suit le manuel de programmation du fabricant, et chaque langage est testé en décodant le job final en bitmap, qui doit correspondre point par point à l'étiquette rendue - y compris les exemples détaillés de la documentation TOPIX de Toshiba et RLE de Novexx.
Quel volume de données pour une image ?
Une image pèse plus lourd que du ZPL. Voici les chiffres réels pour une étiquette d'expédition typique de 100 × 150 mm en 203 dpi (812 × 1 218 points) avec du texte, un DataMatrix, un QR code, un code-barres GS1-128 et une ligne de texte en japonais, russe et arabe :
| Job | Non compressé | Compressé |
|---|---|---|
| Source ZPL (pour comparaison) | 859 octets | - |
| TSPL | 121 Ko | 52 Ko (PCX) |
| EPL2 | 121 Ko | - |
| SBPL | 122 Ko | 52 Ko (PCX) |
| DPL | - | 52 Ko (PCX) |
| CPCL | 81 Ko (lignes vides ignorées) | 52 Ko (PCX) |
| JScript | 124 Ko (BMP) | 52 Ko (PCX) |
| Brother raster, TD-4420DN | 128 Ko | 45 Ko (TIFF) |
| PCL en 300 dpi | 64 Ko (lignes vides ignorées) | 44 Ko (TIFF) |
| Easy Plug | 121 Ko | 16 Ko (RLE) |
| TPCL | 121 Ko | 9,5 Ko (TOPIX) |
Trois constats s'imposent :
- Sans compression, on compte environ 1 bit par point. 812 × 1 218 points font 121 Ko, quel que soit le langage.
- La compression qui regarde les lignes voisines l'emporte. PCX et PackBits ne compressent qu'à l'intérieur d'une ligne. TOPIX de Toshiba n'envoie que les octets qui ont changé par rapport à la ligne précédente, et le RLE d'Easy Plug répète les lignes identiques - or les étiquettes contiennent beaucoup des deux.
- Sur un réseau, cela ne compte guère. 121 Ko mettent environ 10 ms sur de l'Ethernet à 100 Mbit/s. La compression devient rentable en Wi-Fi et en Bluetooth, pour des lots de milliers d'étiquettes et pour les imprimantes dotées d'un petit tampon de réception.
Les outils du site affichent la taille de chaque job et, si la compression est activée, le gain obtenu.
Pas à pas
Sur le site web, sans compte :
1. Ouvrez l'outil correspondant à votre imprimante, par exemple ZPL vers TSPL.
2. Collez le ZPL ou ouvrez le fichier .zpl.
3. Choisissez la résolution de l'imprimante (203, 300 ou 600 dpi ; pour Brother : le modèle).
4. Activez éventuellement la compression, puis lancez la conversion.
5. Vérifiez l'aperçu - il montre exactement les points qui seront envoyés - et téléchargez le job.
6. Envoyez-le à l'imprimante :
# Linux / macOS
nc -q 1 192.168.1.50 9100 < label.tspl
# Windows PowerShell
$c = [Net.Sockets.TcpClient]::new('192.168.1.50', 9100)
$b = [IO.File]::ReadAllBytes("$PWD\label.tspl")
$c.GetStream().Write($b, 0, $b.Length); $c.Close()
Via l'API, pour votre propre logiciel : chaque outil est un endpoint POST /v1/tools/zpl-to-<language> sur api.zplcloud.com. La réponse est le job brut :
jq -Rs '{zpl: ., dpi: 203, compress: true}' label.zpl \
| curl -X POST https://api.zplcloud.com/v1/tools/zpl-to-tpcl \
-H "X-API-Key: $ZPLCLOUD_API_KEY" -H "Content-Type: application/json" \
--data-binary @- -o label.tpcl
nc -q 1 192.168.1.60 9100 < label.tpcl
Un fichier contenant plusieurs étiquettes devient un seul job avec plusieurs étiquettes ; l'en-tête X-ZplCloud-Label-Count en indique le nombre. Tous les champs et les commandes exactes par langage figurent dans la référence de l'API.
Imprimer au quotidien : zplCloud CLI, dossiers surveillés et imprimantes distantes
nc suffit pour un test. Pour l'impression au quotidien, la zplCloud CLI gratuite prend en charge le seul point qui compte avec ces jobs : ils contiennent des données d'image binaires et doivent parvenir à l'imprimante octet par octet - sans encodage de texte, sans saut de ligne ajouté à la fin. La CLI s'en charge via le réseau, en USB, depuis un dossier surveillé et, grâce à son agent, vers des imprimantes situées dans d'autres réseaux.
Envoyer un job prêt à l'emploi - sans compte :
zplcloud send --target 192.168.1.50 --file label.tspl
zplcloud send --usb --file label.bin # Brother QL en USB
La CLI reconnaît les extensions de fichier utilisées par les outils (.tspl, .epl, .dpl, .sbpl, .cpcl, .escpos, .bin, .pcl, .ezp, .tpcl, .jscript) et les envoie sans modification ; --raw fait de même pour n'importe quel autre fichier.
Convertir et envoyer en une seule étape - la CLI appelle l'API pour vous :
zplcloud send --target 192.168.1.50 --file label.zpl --language tspl --dpi 300 --compress
Dossier surveillé : l'ERP continue d'écrire du ZPL. L'agent (zplcloud proxy) surveille un dossier et convertit chaque fichier ZPL dans le langage de l'imprimante avant l'impression. Le logiciel qui produit les étiquettes ne change absolument pas - il écrit toujours des fichiers ZPL, et l'imprimante TSC reçoit du TSPL :
{
"name": "tsc-shipping",
"enabled": true,
"folder": "/labels/tsc",
"pattern": "*.zpl",
"targetHost": "192.168.1.50",
"convert": { "language": "tspl", "dpi": 300, "compress": true }
}
Imprimantes distantes : du cloud vers une imprimante dans un autre réseau. L'agent maintient une unique connexion sortante vers zplCloud ; une imprimante située dans un autre entrepôt, dans un magasin ou chez un client est ainsi joignable sans ouvrir de port. Votre logiciel appelle un seul endpoint - avec un job prêt à l'emploi, ou avec le ZPL et le langage :
curl -X POST https://api.zplcloud.com/v1/remote-printers/4/raw \
-H "X-API-Key: $ZPLCLOUD_API_KEY" -H "Content-Type: application/json" \
-d '{"zpl": "^XA^FO50,50^A0N,40,40^FDHello TSC^FS^XZ", "language": "tspl", "dpi": 203}'
L'agent transmet le job via TCP 9100 ou USB et indique en retour s'il est bien arrivé.
| Destination du job | Commande ou endpoint |
|---|---|
| Imprimante sur le réseau local | zplcloud send --target <ip> --file label.tspl |
| Imprimante USB | zplcloud send --usb --file label.bin |
| Fichiers ZPL d'un ERP, d'une boutique en ligne ou d'un logiciel de transporteur | dossier surveillé avec "convert": { "language": "tspl" } |
| Imprimante dans un autre réseau | POST /v1/remote-printers/{id}/raw ou zplcloud send --remote-printer <id> |
| Dossier surveillé via l'API | POST /v1/print/folder avec language ou base64 |
Il vous faut la CLI et l'agent en version 1.2.26 ou ultérieure ; les versions plus anciennes lisent chaque fichier comme du texte et endommageraient les données d'image. Les imprimantes en TCP fonctionnent déjà via les agents à partir de la version 1.2.22.
Points de vigilance
- La résolution doit correspondre. Une étiquette rendue pour 203 dpi s'imprime environ un tiers plus petite sur une imprimante 300 dpi. Les outils ne proposent que des résolutions qui existent sur de vraies têtes d'impression, afin que la taille reste en 1:1 - choisissez celle de votre imprimante.
- Les réglages du support restent dans l'imprimante. Les jobs n'écrasent volontairement pas les réglages enregistrés d'espace, de capteur ou de marque noire. Réglez l'imprimante une fois sur le format d'étiquette, comme pour n'importe quel autre job.
- Les codes-barres se scannent comme l'original. Un code-barres en bitmap a exactement la largeur que lui a donnée le ZPL, car les barres étaient déjà des points entiers. Cela ne vaut qu'à la bonne résolution - une raison de plus de choisir les dpi de l'imprimante.
- Imprimez une étiquette de test par modèle. Les versions de firmware diffèrent dans les détails : la lecture des images PCX, l'origine de l'image sur les imprimantes Easy Plug, le réglage du ruban chez Toshiba. Les outils affichent ces remarques à côté de chaque job.
- Brother a besoin du modèle. Largeur de tête, marges et support proviennent de la référence des commandes Brother ; l'étiquette est centrée sur le support le plus étroit qui convient. Les étiqueteuses à ruban P-touch impriment en travers du ruban.
- Si une imprimante parle ZPL nativement, envoyez du ZPL. C'est plus léger, et l'imprimante peut utiliser ses propres polices. La voie du bitmap est destinée aux imprimantes qui en sont incapables - ou aux étiquettes pour lesquelles « presque identique » ne suffit pas.
Quand une émulation suffit-elle ?
Si l'étiquette se compose de quelques lignes de texte latin et d'un Code 128, et que l'imprimante dispose d'une émulation ZPL, essayez-la d'abord. Dès qu'entrent en jeu du texte Unicode, des polices TrueType, des logos, des blocs de texte ^FB ou un parc d'imprimantes mixte, le bitmap est le choix le plus sûr : un seul rendu, un seul résultat, sur chaque imprimante.
Questions fréquentes
L'imprimante a-t-elle besoin d'un firmware spécial ?
Non. Les jobs n'utilisent que les commandes graphiques standard de chaque langage, que comprend toute imprimante de cette famille.
Les codes-barres restent-ils lisibles au scanner ?
Oui. Les codes-barres sont dessinés par le moteur zplCloud avec des largeurs de point exactes et imprimés point par point. Pour en avoir le cœur net, vérifiez-les avec Vérifier un code-barres.
Le texte reste-t-il du texte sur l'imprimante ?
Non. L'imprimante reçoit une image. C'est tout l'intérêt - aucune police de l'imprimante ne peut modifier la mise en page -, mais cela signifie aussi que l'imprimante ne peut pas remplir elle-même des compteurs ou des champs. Rendez plutôt une étiquette par enregistrement de données ; l'API le fait en un seul appel pour les fichiers contenant de nombreuses étiquettes.
Notre logiciel ne sait écrire que des fichiers ZPL. Peut-il quand même imprimer sur une imprimante TSC ou Brother ?
Oui. Faites-le écrire dans un dossier surveillé de l'agent zplCloud configuré avec "convert": { "language": "tspl" } (ou brother, dpl …). L'agent convertit chaque fichier avant l'impression, et le logiciel ne remarque jamais que l'imprimante n'est pas une Zebra.
Et les imprimantes 180 dpi ?
Elles sont prises en charge là où elles existent : ESC/POS en 180 dpi pour la série Epson TM-T88, et les modèles Brother P-touch en 180 et 360 dpi.
Est-ce gratuit ?
Les outils du site sont gratuits et ne nécessitent pas de compte, avec des limites d'usage raisonnable pour l'utilisation anonyme. Via l'API, chaque étiquette compte comme un rendu ; voir les tarifs.
Essayez avec votre propre étiquette : choisissez votre imprimante dans les outils, collez le ZPL et envoyez le résultat au port 9100. Si vous gérez un parc d'imprimantes mixte, la plateforme zplCloud centralise les designs - et les outils d'impression garantissent que chaque imprimante reçoit la même étiquette.