Créer ou modifier un modèle d’étiquettes

Créer ou modifier un modèle d’étiquettes

Les étiquettes sont créées en recourant au logiciel FOP, écrit en Java.

Voici les opérations réalisées par l’application pour générer les étiquettes :

  • pour chaque objet concerné (des containers ou des échantillons associés à un type de container, et si le type de container est rattaché à un modèle d’étiquettes), une image du QRcode est générée dans le dossier temp ;
  •  dans le dossier temp, un fichier au format XML est généré, contenant les informations à imprimer sur l’étiquette ;
  • un fichier au format XSL, qui contient les ordres de création de l’étiquette, est également créé dans le même dossier. Le contenu de ce fichier est issu d’un enregistrement provenant de la table label ;
  • le programme PHP fait appel à FOP pour générer, à partir du fichier XML et en utilisant le fichier XSL, un fichier PDF. Une page du fichier correspond à une étiquette (mécanisme utilisé par les imprimantes à étiquettes pour les séparer).

La configuration du modèle d’étiquettes revient à définir à la fois le contenu des informations qui seront insérées dans le QRCODE et la forme que prendra l’étiquette, c’est à dire les informations qui seront imprimées, le format, etc. Cette forme reprend la syntaxe XSL comprise par FOP.

Définir le contenu du QRcode

Le QRcode est un format de code barre normalisé en deux dimensions, qui permet de stocker jusqu’à 2000 caractères en 8 bits.
Le principe retenu dans l’application est de stocker l’information au format JSON. Pour limiter la taille du code barre, les noms des balises doivent être les plus petites possibles. Voici les balises obligatoires à insérer systématiquement dans une étiquette :

NomDescription
uidIdentifiant unique de l’objet dans la base de données
dbIdentifiant de la base de données. C’est la valeur du paramètre APPLI_code

D’autres informations peuvent être également insérées :

NomDescription
idIdentifiant métier principal (champ identifiant ou nom, en saisie)
prjCode de la collection (pour les échantillons)
pnNom du protocole de collecte des échantillons
clpCode du risque associé au conteneur, en raison du produit de conservation utilisé
autres codestous les codes d’identification secondaires définis dans la table de para-
mètres Types d’identifiants
les champs utilisés dans les métadonnnéesles codes des champs utilisés dans la description des métadonnées. Un modèle d’étiquette ne peut être associé qu’à un type de métadonnées

 

Configuration du fichier XSL

La syntaxe particulière du fichier XSL ne doit être modifiée qu’en conservant la version initiale (recopie dans un bloc-notes, par exemple), pour éviter de perdre une configuration opérationnelle suite à un mauvais paramétrage.
Voici la description du contenu du fichier et les zones modifiables.

Entête du fichier

Elle permet de modifier la taille de l’étiquette (largeur et hauteur maximale). Vous ne devriez changer que les attributs page-height et page-width. Pour les marges (attributs margin-), soyez prudents et vérifiez notamment que les QRcodes ne soient pas rognés à cause de marges insuffisantes.

<?xml version="1.0" encoding="utf-8"?>
<xsl:stylesheet version="1.0"
xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
xmlns:fo="http://www.w3.org/1999/XSL/Format">
<xsl:output method="xml" indent="yes"/>
<xsl:template match="objects">
<fo:root>
<fo:layout-master-set>
<fo:simple-page-master master-name="label"
page-height="5cm" page-width="10cm"
margin-left="0.5cm"
margin-top="0.5cm"
margin-bottom="0cm"
margin-right="0.5cm">
<fo:region-body/>
</fo:simple-page-master>
</fo:layout-master-set>
<fo:page-sequence master-reference="label">
<fo:flow flow-name="xsl-region-body">
<fo:block>
<xsl:apply-templates select="object" />
</fo:block>
</fo:flow>
</fo:page-sequence>
</fo:root>
</xsl:template>
<xsl:template match="object">

Format de l’étiquette

Le contenu de l’étiquette est décrit sous la forme d’un tableau (balises fo :table). La première colonne contient le QRCode, la seconde le texte associé.
Ici, deux colonnes de taille identique (4 cm chacune) sont définies.

<fo:table table-layout="fixed" border-collapse="collapse"
border-style="none" width="8cm"
keep-together.within-page="always">
<fo:table-column column-width="4cm"/>
<fo:table-column column-width="4cm" />
<fo:table-body border-style="none" >

Les cellules (table-cell) sont insérées dans une ligne (table-row) :

<fo:table-row>

Insertion du QRcode

Le QRcode est inséré dans un bloc. Les seules informations modifiables sont celles concernant la
hauteur (attribut height et la largeur (attribut content-width)). Veillez à ce que la hauteur et la largeur
soient identiques, et ne modifiez pas les autres informations.

<fo:table-cell>
<fo:block>
<fo:external-graphic>
<xsl:attribute name="src">
<xsl:value-of select="concat(uid,’.png’)" />
</xsl:attribute>
<xsl:attribute name="content-height">
scale-to-fit
</xsl:attribute>
<xsl:attribute name="height">4cm</xsl:attribute>
<xsl:attribute name="content-width">4cm</xsl:attribute>
<xsl:attribute name="scaling">uniform</xsl:attribute>
</fo:external-graphic>
</fo:block>
</fo:table-cell

Contenu textuel

Les autres informations sont affichées dans des blocs, avec une ligne par catégorie d’information.
L’étiquette commence ici par indiquer l’établissement (ici, IRSTEA), écrit en gras.

<fo:table-cell>
<fo:block>
<fo:inline font-weight="bold">
IRSTEA
</fo:inline>
</fo:block>

Chaque information est affichée dans un bloc, comprenant un titre (par exemple, uid), associé à une ou plusieurs valeurs. Ainsi, la première ligne affiche sur la même ligne, et en gras (attribut font-weight= »bold »), le code de la base de données (<xsl :value-of select= »db »/>) et l’UID de l’objet (<xsl :value-of select= »uid »/>).

<fo:block>uid:
<fo:inline font-weight="bold">
<xsl:value-of select="db"/>:
<xsl:value-of select="uid"/></fo:inline>
</fo:block>
<fo:block>id:
<fo:inline font-weight="bold">
<xsl:value-of select="id"/></fo:inline>
</fo:block>
<fo:block>prj:
<fo:inline font-weight="bold">
<xsl:value-of select="prj"/></fo:inline>
</fo:block>
<fo:block>clp:
<fo:inline font-weight="bold">
<xsl:value-of select="clp"/></fo:inline>
</fo:block>

Fin de l’étiquette

Une fois toutes les informations affichées, le tableau est fermé, et un saut de page est généré systématiquement :

</fo:table-cell>
</fo:table-row>
</fo:table-body>
</fo:table>
<fo:block page-break-after="always"/>

Enfin, le fichier XSL est correctement fermé :

</xsl:template>
</xsl:stylesheet>

Il est possible de créer des étiquettes avec des formats différents, par exemple en créant plusieurs
lignes. Pensez à fermer vos balises, et qu’elles soient correctement imbriquées, pour éviter tout souci.
Pour aller plus loin dans la mise en page, consultez la documentation du projet FOP.

Date de modification : 15 mai 2023 | Date de création : 22 mars 2023 | Rédaction : Éric Quinton