Salut à tous!
Encore un autre projet, je suis un homme de projet et il n’y as pas un mois que je m’en part un.
Ce coup si, je désire utiliser mon imprimante Brother QL pour générer des étiquettes via le Rapsberry Pi.
Ceux qui ce demande qu’est-ce que la Broher QL, voici l’imprimante que j’ai; Brother QL-700 Imprimante d'étiquettes haute vitesse professionnelle - Brother Canada
La petite histoire
L’idées est venu de mon travail, je suis en département Logistique (et support TI, mon titre exacte est Agent logistique, spécialiste support TI) . J’ai donc développé suivant des application en Python sous Windows pour imprimer des trucs Quand j’ai pris poste, les applications était très basiques, souvent en ligne de commande et peux pratique pour ceux non initiés. J’ai fait un peu de rétro-ingénirie pour comprendre ce que mon prédécesseur avait fait.
Pour résumé, il utilisait le B-pac de Brother pour imprimer des étiquettes via les scripts VBS. Le code de base est en Python, mais pour lancer l’impression sous Windows il faut absolument passer par un langage supporté, soit des scripts en VBS.
J’ai retravaillé le code pour le rendre facilement utilisable depuis un code ou en ligne de commande directement, le résultat est disponible ici:
Le problème est que d’avoir un ordinateur complet que pour imprimer des étiquettes est une perte de ressource énorme, et exige l’installation de Python, de modules Python et du B-Pac. L’avantage ici est que le B-pac permet de réutiliser des Template généré depuis l’application P-Touch pour les formaté aux besoins.
J’ai sortie plusieurs versions d’applications améliorés, avec GUI qui est plus simple que le CLI pour l’utilisation, et j’ai adoré le fait de pouvoir imprimer des étiquettes rapidement avec juste comme effort de remplir les champs et de choisir le nombre de copies.
Avec le temps, je me suis dit qu’il serait intéressant de convertir les usages pour mon « chez nous », j’ai commencé a développé une version « domestique » et je me suis rendu compte d’une chose; l’utilisation serait limité qu’à mon ordinateur.
La j’ai eu l’idée de prendre un Raspberry Pi 2 et de le convertir en terminal de création d’étiquettes. Et de la l’idée de ce projet.
Le Projet
Le B-pac est une librairie qui est compatible seulement avec Windows, alors dès le départ je sais que les templates P-Touch ne seront pas compatible, d’après mes recherche il existe aucun équivalent pour Linux. Mais il existe un pilote pour Raspbian (oui, oui, Raspbian, pas Debian, pas Ubuntu, mais bien Raspbian) et il est simple a installé.
Il existe également un module Python pour prendre en charge la Brother QL, encore la j’ai un avantage, elle est conçu pour Linux avant tout, alors à la base j’ai besoin d’aucune modification pour arriver à lancer une impression sous RPi.
Le problème est qu’il peut imprimer que des images qu’ont lui fourni. Et à la base, une image est statique, alors impossible de les personnalisé « on the fly », théoriquement.
Alors si je veux aboutir mon projet, il faudra générer des images pour les envoyer en impression. Du coup, je dois établir mes besoins et leur design. Je part avec une première chose; la génération d’étiquette avec un code à barre.
Alors faut trouver un module pour le faire, et ce module trouvé, le « treepoem » marche très bien, mais génère une image, alors faut je l’inclus dans mon image à imprimer.
Bref, avec quelques heures de travail, je produit un premier script avec des fonctions pour génér une image de travail, ajouter du texte, ajouter une image et la sauvegardé, par la suite suffit que de l’envoyer à l’imprimante via le module Python et j’ai une impression.
La base des mesures de l’image de travail a été défini à 732px, ce basant sur un calcul de conversion de 62mm en 600dpi et la hauteur est de 183px. L’imprimante redimensionne automatiquement l’image.
Autre surprise, dans l’application P-Touch, l’impression par défaut ce fait de manière a utiliser la longueur du papier comme « largeur » et la hauteur de 62mm est celui de la « hauteur », mais l’impression par défaut sous la version Linux (que je dirais de base) est autre; la largeur du document est le 62mm, et la hauteur la longueur du papier. EN d’autres mots, P-Touch par défaut imprime en mode « bannière » tandis que l’imprimante à la base imprime en « liste », comme une imprimante à reçu.
Parfait, mes besoins ce font dans ce sens, alors j’ai aucune rotation ou autre préparatif à faire quand je crée une image pour l’impression. Alors dans mes test je ne risque pas de gaspiller du papier.
Après quelques tests et j’arrive à produire un code barre, voici un exemple généré depuis le script.
WoW, je peux généré des codes à la volé! Ajoutons une variante, avec le code affiché sous le code barre.
Bon, j’ai le « plus important », soit la compréhension de comment; ajouter du texte, ajouter une image, la redimensionner, et arriver à rendre le tout potable pour l’impression.
Alors je me lance dans la suite; Texte seulement, texte avec une image à gauche ou à droite, doubler le texte gauche et droite) pour créer des étiquette pour nommer des câbles (ont enroule le milieu et recolle les extrémité gauche et droite ensemble, comme proposé dans l’application P-Touch). Super, j’arrive a tout faire ça!
Du texte simplement
Du texte avec une image (elle est converti en noir et blanc par l’imprimante)
Pour nommer un câble
ET ceci est fait en ligne de commande, voici l’aide de mon script pour vous donner une idée (oui c’est anglais, c’est plus universel)
python3 core.py -h
** HELP **
Syntax: core.py -a <action> [parameters]
-a Action to do
-c Code for the barcode
-t Text to print
-s Display text under the barcode (like same as the code used for barcode)
-q Position of barcode (in px, like y,x )
-d For use with acion 'barcode', you can easy use 'up' or 'down' (default) for positionning the barcode (text also inverted)
For use custom positionning, you must set value to 'custom'
-u Position of text (in px, like y,x)
-m Marge (top/left) of element(s) (in px)
-x Max width of image (in px)
-y Max height of image (in px)
-r Resize the image by 'wide' or 'portrait'
-i Image file
-j Position of image (left/right)
-k Number of copies to print (default is 1)
Les actions possibles
- barcode Pour générer un texte et un code à barre, possible d’ajouter une information sous le code ou non. Possible de choisir aussi la position du code (up/down)
- archive Même chose que le « barcode » mais pas possible de choisir où est le code barre et l’information du code est affiché.
- text Imprimer un texte, s’ajuste à la largeur maximal du papier
- textlarge Imprimer un texte, s’ajuste à la hauteur maximal du papier (qui est en fait la largeur, 732px) et est tourné à 90 degrés pour utiliser le papier en style banderole. J’ai pas mis de démo car l’image généré est très grande.
- textimage même chose que « text », mais possible d’y ajouter une image à gauche ou droite (left/right), possible de forcer une dimension à l’image, et de pouvoir redimensionner selon la hauteur ou largeur maximal, selon le mode choisi (wide/portrait) pour déterminer qui a priorité. Ceci est du aux images en format large, ou en format portrait.
- cable C’est un peut comme « text » mais double le texte, car il va être replié sur lui même. Une espace est libre au centre pour pas que le texte soi illisible une fois enroulé autour du câble. Le texte prend une largeur divisé en deux du papier pour s’ajuster.
- expire Je n’ai pas encore travaillé cette section, mais va me permettre de créer des étiquettes pour les produits qui ont une date d’expiration (la bouffe quoi…), alors il inclura le nom du produit, la date d’emballage et si désiré la date d’expiration. Cette commande sera pratique pour étiqueter mes plats.
Ici je parle de ma version en ligne de commande, ultimement il y aura une interface graphique pour faciliter la création de ces étiquettes.
Une fois le projet complété, il sera disponible sur GitHub.
Donner mois vos avis, suggérez moi vos idées d’étiquettes.