Imprimer les tickets de caisse avec TakePOS
Les trois façons d'imprimer un ticket avec TakePOS dans Dolibarr 24, testées avec une imprimante ESC/POS simulée : réglages, modèle de ticket et balises, impression automatique, tiroir-caisse, et les pannes qui laissent le ticket vide ou coupé.
TakePOS, la caisse de Dolibarr, sait imprimer un ticket de trois façons. Laquelle est utilisée ne dépend pas seulement de ce que vous réglez à l’écran : dans Dolibarr 24, choisir une imprimante de tickets pour la caisse ne suffit pas à ce qu’elle serve. C’est l’explication de beaucoup de « mon imprimante ne sort rien ».
Ce guide a été écrit le 14 octobre 2026 sur Dolibarr 24.0.2, en faisant de vraies ventes dans TakePOS. L’imprimante était simulée : un petit programme qui reçoit ce que Dolibarr envoie sur le port 9100, comme une imprimante réseau, et l’enregistre octet par octet. On voit donc exactement ce que Dolibarr transmet, mais pas le rendu sur le papier d’une marque d’imprimante précise.
Les trois façons d’imprimer
| Qui envoie le ticket à l’imprimante | Ce qu’il faut | |
|---|---|---|
| Navigateur (par défaut) | le navigateur du poste de caisse, par sa fenêtre d’impression | une imprimante installée sur le poste |
| Imprimante de tickets (module Imprimantes Tickets) | le serveur Dolibarr, en commandes ESC/POS | une imprimante joignable depuis le serveur |
| TakePOS Connector | le navigateur, vers un logiciel installé sur le poste | un logiciel externe, plus deux réglages cachés |
La différence qui compte : avec le module Imprimantes Tickets, c’est le serveur qui se connecte à l’imprimante. La description de cette méthode dans les traductions de Dolibarr le dit : le serveur ne peut pas être dans le Cloud, il doit pouvoir joindre les imprimantes de votre réseau. Si votre Dolibarr est hébergé en ligne et l’imprimante dans le magasin, cette méthode ne la verra pas (nous ne l’avons pas testé avec un vrai hébergement : c’est ce que dit Dolibarr, et ce que fait le code).
Méthode 1 : le navigateur
C’est le réglage d’une installation neuve. Après le Règlement, le bouton Imprimer ticket ouvre le ticket dans une fenêtre, et Dolibarr appelle la fonction d’impression du navigateur. Vous choisissez l’imprimante dans la fenêtre d’impression, comme pour n’importe quelle page web.
Les options sont dans Accueil › Configuration › Modules/Applications, carte PdV TakePOS, roue crantée, onglet Imprimantes / Reçu :
- Grouper la TVA par taux sur les tickets / reçus : sans cette option, le ticket ne montre qu’une ligne « Total TVA ». Avec, une ligne par taux (dans notre test : TVA 5,5 % et TVA 20 %) ;
- Mention complémentaire sur les factures - Entête et - Bas de page : texte libre en haut et en bas du ticket (voir les variables plus bas) ;
- Nom du reçu : remplace « Réf. facture » devant le numéro ;
- Imprimer le client sur les tickets|reçus : ajoute « Client: » suivi du nom (d’après le code, rien n’est ajouté pour le client générique de la caisse) ;
- Imprimer le mode de paiement sur les tickets | reçus : ajoute le paiement, et pour les espèces la somme reçue et le Rendu ;
- Afficher la colonne avec le prix hors taxes (sur le ticket de caisse) ;
- Imprimer automatiquement les tickets / reçus : voir plus bas.
Le ticket affiche le nom de la société, la référence, le terminal, la date, la Date d’impression, puis les lignes. Une remise ligne n’apparaît pas en tant que telle : le prix imprimé est déjà remisé (un mug à 12,00 € avec 10 % de remise apparaît à 10,80 €).
Les variables d’en-tête et de bas de page
Une petite aide à côté de ces deux champs liste les Variables de substitution disponibles. Sur le ticket, toutes ne sont pas remplacées. Ce que nous avons vérifié :
| Variable | Sur le ticket |
|---|---|
__MYCOMPANY_ADDRESS__, __MYCOMPANY_ZIP__, __MYCOMPANY_TOWN__ |
remplacées (adresse de la société) |
__MYCOMPANY_PROFID2__ (SIRET en France), __MYCOMPANY_VATNUMBER__ |
remplacées |
__USER_FIRSTNAME__, __USER_LOGIN__ |
remplacées par l’utilisateur connecté à la caisse |
__THIRDPARTY_NAME__, __THIRDPARTY_FAX__, __REF__ |
imprimées telles quelles |
__TOTAL_TTC__ |
remplacée par… rien |
Les variables du client et de la vente ne marchent donc pas sur le ticket, bien qu’elles figurent
dans la liste d’aide. Pour le nom du client, il y a l’option Imprimer le client sur les
tickets|reçus. Pour une autre information du client (une catégorie tarifaire, un type de client),
il n’y a pas de réglage : il faut un module qui fournit son propre ticket (Dolibarr prévoit pour cela
un point d’accroche, TakeposReceipt, dans le fichier du ticket).
Réimpression : DUPLICATA
Dolibarr compte les impressions de chaque ticket payé. La deuxième fois que vous cliquez sur
Imprimer ticket pour la même vente, le ticket porte *** DUPLICATA *** sous la date
d’impression.
Méthode 2 : une imprimante de tickets ESC/POS
ESC/POS est le langage de la plupart des imprimantes thermiques de caisse. Ici, Dolibarr fabrique lui-même le ticket en commandes ESC/POS et l’envoie à l’imprimante, sans fenêtre d’impression.
1. Activer le module
Accueil › Configuration › Modules/Applications, carte Imprimantes Tickets, activer. Le module ajoute le choix de l’imprimante et du modèle de ticket dans la configuration de chaque terminal de TakePOS.
2. Déclarer l’imprimante
Roue crantée de la carte : page Configuration du module Imprimantes RAW/Texte, onglet Liste des imprimantes. Remplissez Nom, Type et Paramètres, puis Ajouter.
| Type | Paramètres (exemples de Dolibarr) |
|---|---|
| Imprimante réseau | adresse IP et port : 192.168.1.50:9100 |
| Imprimante locale | /dev/usb/lp0 : un port USB du serveur |
| Imprimante Windows local | LPT1, COM1 ou un partage smb://… |
| Imprimante Cups | le nom de l’imprimante dans CUPS |
| Imprimante Test | n’imprime rien |
Nous n’avons testé que le type Imprimante réseau, avec le port 9100 (celui de l’exemple de
Dolibarr, 10.x.x.x:9100).
Chaque imprimante a deux liens de test : TXT envoie quelques lignes (« Hello World! », « Most simple example ») puis une coupe du papier ; IMG ajoute une image et un code-barres. Le message Test envoyé à l’imprimante Caisse s’affiche… même quand l’envoi a échoué : lisez les messages en dessous (voir « Pannes fréquentes »).
3. Choisir l’imprimante et le modèle pour la caisse
Configuration de TakePOS, onglet Terminal PdV 1 (un onglet par terminal) :
- Imprimante principale à utiliser (laisser vide pour utiliser le système d’impression du navigateur) : votre imprimante ;
- Modèle de reçu principal à utiliser : le modèle de ticket (section suivante). Choisissez-en un, ne laissez pas cette ligne vide.
4. Le piège : en boutique, ce réglage ne suffit pas
Après ces trois étapes, nous avons fait une vente : Imprimer ticket a ouvert le ticket du navigateur, et l’imprimante n’a rien reçu.
La raison est dans le code de TakePOS : l’imprimante de tickets n’est utilisée pour le ticket que si
le mode Bar Restaurant est activé, ou si une constante cachée vaut receiptprinter. Ce
comportement est dans le code de la 23.0.4 et de la 24.0.2, pas dans celui de la 22.0.5. Il n’y a
pas de case à cocher pour cette constante. Pour une boutique :
- Accueil › Configuration › Divers ;
- nom
TAKEPOS_PRINT_METHOD, valeurreceiptprinter, Ajouter (la constante existe déjà avec la valeurbrowser: elle est remplacée).
Rouvrez la caisse : Imprimer ticket envoie maintenant le ticket à l’imprimante, et la caisse
affiche brièvement « Envoyé à l’imprimante Caisse ». (En 24.0.2 ce message s’affiche avec des codes
HTML à la place des accents : Envoyé à l'imprimante Caisse.)
L’autre solution est d’activer le mode Bar Restaurant (onglet du même nom) : nous l’avons vérifié, le ticket part alors aussi sur l’imprimante. Mais ce mode est fait pour les bars et les restaurants (tables, commandes envoyées en cuisine) : pour une boutique, la constante est plus simple.
Avec la méthode receiptprinter, l’onglet Imprimantes / Reçu n’affiche plus l’en-tête, le bas
de page, le nom du reçu ni l’impression du client ou du paiement : le contenu du ticket vient
uniquement du modèle.
Le modèle de ticket
Les modèles se règlent dans la configuration du module Imprimantes Tickets, onglet Réglage des modèles. La page liste toutes les balises disponibles avec leur description. Un modèle est un texte où chaque ligne commence par une balise entre accolades.
N’utilisez pas les modèles fournis
À l’activation, le module crée un modèle nommé Exemple. En 24.0.2, il est mal enregistré : les
retours à la ligne y sont écrits \r\n en toutes lettres, et ces caractères s’impriment sur le
ticket (« Épicerie Test Dolix\r\n1 rue de Saint-Hippolyte\r\n67100Strasbourg\r\n »). Le code postal
et la ville y sont aussi collés.
Si aucun modèle n’est choisi, c’est pire :
- choisir la ligne vide dans Modèle de reçu principal à utiliser enregistre la valeur
-1, et le ticket sort vide : Dolibarr n’envoie que la commande d’initialisation de l’imprimante ; - si le réglage n’a jamais été enregistré, Dolibarr utilise un modèle écrit dans son code. En 24.0.2,
ce modèle s’arrête après l’adresse : il contient une balise qui n’existe pas
(
{dol_value_mysoc_vatnumber}), et l’impression plante sur une erreur PHP. Le reste du ticket (lignes, totaux, coupe) n’est jamais envoyé. Ce n’est pas corrigé dans la branche 24.0 de Dolibarr au 14/10/2026.
Créez donc votre propre modèle et choisissez-le sur chaque terminal.
Un modèle qui fonctionne
Voici le modèle de notre test. Collez-le dans le champ Template, donnez un Nom, puis Ajouter ; l’icône d’imprimante de la ligne envoie un ticket d’essai.
{dol_align_center}
{dol_bold}{dol_double_height}{dol_print_text}{dol_value_mysoc_name}
{dol_default_height_width}{dol_bold_disabled}
{dol_print_text}{dol_value_mysoc_address}
{dol_print_text}{dol_value_mysoc_zip} {dol_value_mysoc_town}
{dol_print_text}SIRET {dol_value_mysoc_idprof2} - TVA {dol_value_mysoc_tva_intra}
{dol_line_feed}
{dol_print_text}Ticket {dol_value_object_ref}
{dol_print_text}Imprimé le {dol_value_currentdate}
{dol_print_text}Vendeur : {dol_value_vendor_firstname}
{dol_line_feed}
{dol_align_left}
{dol_print_object_lines}
{dol_print_object_tax}
{dol_line_feed}
{dol_bold}
{dol_print_object_total}
{dol_bold_disabled}
{dol_print_payment}
{dol_line_feed}
{dol_align_center}
{dol_print_text}Merci de votre visite !
{dol_line_feed}
{dol_cut_paper_partial}
{dol_open_drawer}
Après une vente d’un café, d’un thé (TVA 5,5 %) et d’un mug remisé (TVA 20 %), l’imprimante a reçu le nom de la société en gras et double hauteur, l’adresse, le SIRET, la référence du ticket, les lignes, une ligne de TVA par taux, les totaux HT, TVA et TTC, le paiement en espèces et la monnaie rendue, puis la coupe du papier et l’ouverture du tiroir.
Les balises les plus utiles
| Balise | Effet |
|---|---|
{dol_align_center}, {dol_align_left}, {dol_align_right} |
alignement des lignes suivantes |
{dol_bold} / {dol_bold_disabled} |
gras / fin du gras |
{dol_double_height}, {dol_double_width}, {dol_default_height_width} |
taille du texte |
{dol_print_text} |
imprime le texte qui suit sur la ligne |
{dol_value_mysoc_name}, …_address, …_zip, …_town, …_idprof2, …_tva_intra |
votre société |
{dol_value_object_ref} |
référence de la facture |
{dol_value_currentdate} |
date et heure d’impression |
{dol_value_vendor_firstname} |
prénom de l’utilisateur de la caisse |
{dol_print_object_lines} |
les lignes vendues |
{dol_print_object_tax} |
une ligne par taux de TVA |
{dol_print_object_total} |
Total HT, Total TVA, Total TTC |
{dol_print_payment} |
paiements et monnaie rendue |
{dol_line_feed} |
ligne vide |
{dol_cut_paper_full} / {dol_cut_paper_partial} |
coupe du papier |
{dol_open_drawer} |
impulsion d’ouverture du tiroir-caisse |
{dol_value_date_time} (date et heure de facturation) imprime 00:00 comme heure : une facture
TakePOS n’a pas d’heure. Pour l’heure, utilisez {dol_value_currentdate}.
Trois règles pour ne pas casser le ticket
- N’utilisez que les balises de la liste de la page Réglage des modèles. Une balise inconnue
seule sur sa ligne imprime son nom en majuscules (
DOL_VALUE_CUSTOMER_MOBILE) et affiche une erreurUnknowTag. - Ne mettez jamais une balise inconnue juste après
{dol_print_text}. Dans notre test,{dol_print_text}{dol_value_customer_mobile}a arrêté le ticket à cet endroit (erreur PHPPrinter::text(): Argument #1 ($str) must be of type string, null given). C’est ce qui casse le modèle intégré. - Une valeur vide ne pose pas de problème :
{dol_print_text}{dol_value_mysoc_url}sans site web renseigné imprime une ligne vide.
Ce que le modèle ne règle pas
Nous l’avons constaté sur les tickets reçus, sans pouvoir le changer par le modèle :
- les lignes d’articles font 51 à 54 caractères alors que Dolibarr compte 48 caractères par ligne : sur une imprimante de 48 colonnes, elles passeront probablement à la ligne (non vérifié sur une vraie imprimante) ;
- le prix unitaire imprimé est le prix hors taxes, avec jusqu’à cinq décimales (
7,96209), alors que le total de la ligne est TTC ; la remise n’apparaît pas ; - les taux de TVA s’impriment
5.5000%; - dans
{dol_print_payment}, la monnaie rendue est intituléeChange, en anglais.
La largeur se règle par la constante RECEIPT_PRINTER_NB_CHARACT_BY_LINE (48 par défaut) dans
Accueil › Configuration › Divers. À 32 (imprimantes de 58 mm), les totaux tiennent sur 32
caractères, les lignes d’articles font encore 35 caractères.
Le texte accentué passe : Dolibarr a converti « Épicerie » dans la table de caractères par défaut des imprimantes ESC/POS (code page 437).
Imprimer automatiquement après le paiement
Onglet Imprimantes / Reçu, option Imprimer automatiquement les tickets / reçus. Dès que la vente est entièrement payée, TakePOS fait comme si on avait cliqué sur Imprimer ticket :
- méthode navigateur : la fenêtre du ticket s’ouvre et le navigateur lance sa fenêtre d’impression, qu’il faut encore valider (sauf réglage du navigateur lui-même, non testé ici) ;
- imprimante de tickets : le ticket part directement à l’imprimante, sans aucun clic (vérifié).
Le tiroir-caisse
Dolibarr n’ouvre pas le tiroir lui-même : il envoie à l’imprimante la commande d’impulsion
ESC/POS (ESC p), et c’est l’imprimante, reliée au tiroir, qui l’ouvre. Il faut donc la méthode
imprimante de tickets (ou TakePOS Connector) : avec l’impression par le navigateur, aucune
commande n’est envoyée à l’imprimante.
Deux façons, testées toutes les deux :
- À chaque ticket : la balise
{dol_open_drawer}dans le modèle. Le tiroir s’ouvre à chaque impression du ticket ; le modèle ne dépend pas du mode de paiement, donc aussi pour une vente payée par carte ou une réimpression (d’après le code). - Par un bouton dans la caisse : dans Accueil › Configuration › Divers, ajoutez la constante
TAKEPOS_ADD_BUTTON_OPEN_DRAWER1avec la valeur1(le chiffre final est le numéro du terminal :…DRAWER2pour le terminal 2). Le bouton Ouvrir le tiroir-caisse apparaît dans la caisse ; il envoie à l’imprimante du terminal la seule commande d’ouverture, sans papier.
La commande envoyée est toujours la même : ESC p sur la sortie 0 (octets 1B 70 30 3C 78). Il
n’y a pas de réglage pour choisir l’autre sortie tiroir.
Plusieurs postes, plusieurs imprimantes
Le choix de l’imprimante et du modèle se fait par terminal : un onglet Terminal PdV par caisse (leur nombre se règle dans l’onglet Paramètres, champ Nombre de terminaux). Chaque poste peut donc avoir son imprimante. Nous n’avons testé qu’un terminal. Les imprimantes de cuisine (envoi des commandes sans paiement) n’existent qu’en mode Bar Restaurant ; nous ne les avons pas testées.
TakePOS Connector
TakePOS Connector est un logiciel externe, installé sur le poste de caisse : c’est le navigateur de la caisse qui lui envoie le ticket, ce qui permet d’imprimer depuis un Dolibarr hébergé en ligne. Nous ne l’avons pas installé ; voici seulement ce que Dolibarr 24.0.2 attend, d’après son code et les requêtes que nous avons interceptées dans le navigateur. Le code de TakePOS qualifie cette méthode de « deprecated » (dépréciée).
Aucune case ne l’active. Deux constantes dans Accueil › Configuration › Divers :
TAKEPOS_PRINT_METHOD = takeposconnector, et TAKEPOS_PRINT_SERVER = l’adresse du connecteur.
Attention : enregistrer l’onglet Imprimantes / Reçu efface TAKEPOS_PRINT_SERVER (la page
enregistre cette valeur alors qu’elle n’a pas de champ pour la saisir). Vérifiez-la après chaque
passage sur cet onglet.
Selon la forme de TAKEPOS_PRINT_SERVER :
| Valeur | Imprimer ticket | Ouvrir le tiroir-caisse |
|---|---|---|
une URL (http://127.0.0.1:8111) |
POST vers …/printer/index.php, données invoice= + le ticket ESC/POS encodé en base64 (variante URL), fait avec le modèle du terminal |
POST vers …/printer/drawer.php, données opendrawer |
une adresse IP (192.168.1.20) |
POST vers http://192.168.1.20:8111/print, données : le ticket HTML du navigateur |
POST vers la même adresse, données opendrawer |
En mode URL, l’onglet Imprimantes / Reçu affiche en plus échelle de poids et Affichage client,
qui appellent …/scale/index.php et …/display/index.php (lu dans le code, non testé).
Pannes fréquentes
| Ce que vous voyez | Cause vérifiée | Que faire |
|---|---|---|
| Une imprimante est choisie sur le terminal, mais c’est la fenêtre d’impression du navigateur qui s’ouvre | mode boutique : l’imprimante de tickets n’est pas utilisée | constante TAKEPOS_PRINT_METHOD = receiptprinter |
| La caisse affiche « Envoyé à l’imprimante… » mais rien ne sort | ce message s’affiche quoi qu’il arrive | ouvrez une page de la configuration : l’erreur réelle s’y affiche (Cannot initialise NetworkPrintConnector: Connection refused) |
| Même message, et aucune erreur nulle part | aucune imprimante choisie sur ce terminal | onglet Terminal PdV, Imprimante principale à utiliser |
Test : « Test envoyé… » suivi de initPrinter error: … Connection refused |
rien n’écoute à cette adresse (mauvais port, imprimante éteinte) | vérifiez l’IP et le port 9100 depuis le serveur |
Même erreur avec Connection timed out, après une minute d’attente |
l’adresse IP ne répond pas du tout | adresse fausse, autre réseau, ou serveur hébergé hors du magasin |
| Le ticket sort vide | Modèle de reçu principal à utiliser laissé sur la ligne vide | choisissez un modèle |
| Le ticket s’arrête après l’adresse | modèle intégré de Dolibarr, ou balise inconnue après {dol_print_text} |
votre propre modèle, balises de la liste seulement |
\r\n imprimés sur le ticket |
modèle Exemple du module | votre propre modèle |
Un nom en majuscules (DOL_…) sur le ticket |
balise inconnue | corrigez la balise |
__THIRDPARTY_NAME__ imprimé tel quel (navigateur) |
variable non remplacée sur le ticket | option Imprimer le client sur les tickets|reçus |
*** DUPLICATA *** |
deuxième impression du même ticket (navigateur) | normal |
Deux points lus dans le code, non reproduits : l’impression ESC/POS demande l’extension PHP intl
(Dolibarr 24.0.2 affiche alors « The receipt printer requires the PHP intl extension »), et le test
IMG charge une image, ce qui demande l’extension PHP gd ou imagick.
En résumé
- Par défaut, TakePOS imprime par le navigateur ; les options du ticket sont dans l’onglet Imprimantes / Reçu.
- Pour une imprimante ESC/POS : module Imprimantes Tickets, imprimante réseau
IP:9100, imprimante et modèle choisis sur le terminal, puisTAKEPOS_PRINT_METHOD=receiptprinterdans Divers si vous n’êtes pas en mode Bar Restaurant. - Écrivez votre propre modèle : en 24.0.2, l’Exemple imprime des
\r\n, le modèle intégré s’interrompt, et un modèle vide donne un ticket blanc. - Tiroir :
{dol_open_drawer}dans le modèle, ouTAKEPOS_ADD_BUTTON_OPEN_DRAWER1=1pour un bouton. - « Envoyé à l’imprimante » ne prouve rien : l’erreur s’affiche à la page suivante.
Ensuite
Si vous vendez à des adhérents ou à des habitués qui paient d’avance, le module Porte-monnaie TakePOS ajoute un paiement par solde prépayé à l’écran de règlement de la caisse.
Avant de changer la configuration d’une caisse en service, faites une sauvegarde : Sauvegarder et restaurer Dolibarr.
Si votre ticket ne sort toujours pas, le diagnostic à 90 € consiste à regarder votre instance et votre caisse avec vous pendant une heure, puis à vous remettre par écrit ce qui bloque et ce que coûterait la correction.