Configuration YAML
Guide complet pour l'édition manuelle du fichier template.yaml : mise en page, mappage et logique.
Ce guide est destiné aux utilisateurs avancés et développeurs souhaitant éditer directement le fichier template.yaml.
Ce fichier constitue la « source unique de vérité » de votre profil, définissant la mise en page PDF, le mappage de données et la logique de calcul.
Emplacement du fichier
Le fichier de configuration se trouve dans le répertoire de votre profil au sein de l'espace de travail :
Documents/PDFMailEngine_Workspace/Profiles/<NomDuProfil>/template.yaml
L'emplacement par défaut de l'espace de travail est le dossier PDFMailEngine_Workspace dans votre répertoire Documents. Vous pouvez modifier l'emplacement depuis les paramètres de l'application.
1. Configuration PAGE (Canevas)
Définit les propriétés physiques du canevas PDF.
- size : Tailles standard (
A3,A4,A5,B4,B5,LETTER,LEGAL). - orientation :
PORTRAITouLANDSCAPE. - margins : Marges globales en millimètres.
Gestion manuelle des ressources
Lorsque vous ajoutez des PDF d'arrière-plan manuellement dans le fichier YAML, l'application n'importe PAS automatiquement le fichier dans votre dossier de profil.
Vous devez copier manuellement le fichier .pdf dans le répertoire du profil.
- Chemin par défaut du concepteur :
assets/background/ - Recommandé : Utilisez des chemins relatifs (ex :
./background.pdfouassets/background/bg.pdf).
PAGE:
size: "A4"
orientation: "PORTRAIT"
margins:
top: 20
bottom: 20
left: 20
right: 20
background: "assets/background/stationery.pdf" # PDF d'arrière-plan optionnel
2. FONTS (Polices)
Enregistre des polices personnalisées TrueType (.ttf) ou OpenType (.otf).
Gestion manuelle des ressources
Vous devez copier manuellement le fichier de police dans le répertoire du profil.
- Chemin par défaut du concepteur :
assets/fonts/
FONTS:
# NomPolice : Chemin relatif
"MyCustomFont": "assets/fonts/MyFont-Bold.ttf"
"CorporateFont": "Corporate-Regular.otf"
3. MAPPING (Liaison de données)
Mappe les en-têtes de colonnes de votre CSV/Excel aux noms de variables internes utilisés dans le modèle.
Syntaxe : CléInterne: "En-tête de colonne CSV"
MAPPING:
# Interne : Externe
customer_name: "Customer Name"
invoice_no: "Invoice Number"
date: "Issue Date"
amount: "Total Amount"
4. CALCULATIONS (Calculs)
Définit les calculs automatiques exécutés lors de l'ingestion des données.
Cohérence de la syntaxe
Utilisez les accolades {{ }} pour les variables.
Par souci de cohérence avec les champs texte, il est recommandé d'encadrer les noms de variables avec {{ }}, même dans les formules de calcul.
- Standard :
{{ quantity }} * {{ price }}
- scope :
item: calculé pour chaque ligne (ex :{{ quantity }} * {{ price }}).group: calculé pour un groupe de lignes (ex :sumdes totaux).
- expression : Une expression mathématique. Supporte les fonctions
mathcommefloor(),ceil(),round().
CALCULATIONS:
# Calcul au niveau de la ligne (ex : Taxe)
- scope: "item"
target: "tax_amount"
expression: "floor({{ amount }} * 0.10)" # Utilisation des fonctions math
# Ajout pour montrer l'origine de total_with_tax
- scope: "item"
target: "total_with_tax"
expression: "{{ amount }} + {{ tax_amount }}"
# Calcul au niveau du groupe (Somme de toutes les lignes de la facture)
- scope: "group"
target: "grand_total"
type: "sum" # 'sum' additionne les valeurs
field: "total_with_tax"
5. LAYOUT (Éléments)
La liste LAYOUT définit chaque élément visuel du PDF. Les éléments sont dessinés dans l'ordre (les éléments suivants sont dessinés au-dessus).
Système de coordonnées
Origine des coordonnées
Les modèles créés par le concepteur utilisent un système de coordonnées en haut à gauche (Y=0 est le haut de la page). Lors de l'édition manuelle du YAML avec la clé PAGE, le système de coordonnées par défaut est en bas à gauche (Y=0 est le bas de la page).
Le système de coordonnées est déterminé automatiquement : les modèles utilisant la clé canvas (format du concepteur) utilisent le haut-gauche, tandis que les modèles utilisant la clé PAGE utilisent le bas-gauche.
Propriétés communes
La plupart des éléments supportent ces propriétés :
- x, y : Position en millimètres.
- visible : Une expression conditionnelle contrôlant l'affichage de l'élément (voir ci-dessous).
- position :
absolute(par défaut) ourelative.
La propriété visible
La propriété visible accepte une expression Python évaluée par rapport à la ligne de données courante. Si l'expression est évaluée à False (ou une valeur fausse), l'élément est masqué.
Fonctions intégrées disponibles : int(), float(), str(), len()
# Afficher uniquement si le montant est positif
- type: "text"
value: "Total : {{ amount }}"
visible: "{{ amount }} > 0"
x: 20
y: 250
# Afficher uniquement si un champ n'est pas vide
- type: "text"
value: "Note : {{ note }}"
visible: "len(str({{ note }})) > 0"
x: 20
y: 240
# Combiner plusieurs conditions
- type: "text"
value: "Remise appliquée"
visible: "{{ discount_rate }} > 0 and {{ amount }} >= 10000"
x: 20
y: 230
Text (Texte)
Affiche du texte statique ou des variables dynamiques avec la syntaxe Jinja2 {{ key }}.
- type: "text"
value: "Facture #{{ invoice_no }}" # Dynamique
x: 20
y: 250
font_family: "Helvetica"
font_size: 12
font_weight: "bold"
align: "LEFT" # LEFT, CENTER, RIGHT
color: "#000000"
opacity: 1.0
Image
Intègre un fichier image.
Gestion manuelle des ressources
Vous devez copier manuellement le fichier image dans le répertoire du profil.
- Chemin par défaut du concepteur :
assets/images/
- type: "image"
path: "assets/images/logo.png"
x: 150
y: 260
width: 40
height: 20
Tableau de groupe (Dynamique)
Rend un tableau dynamique qui itère sur vos lignes de données (détails/articles).
- type: "group_table"
x: 20
y: 180
# Styles globaux
header_height: 8
row_height: 6
border_color: "#000000"
grid_color: "#cccccc"
alt_row_color: "#f0f0f0" # Bandes alternées
columns:
- header: "Article"
key: "item_name"
width: 60
align: "LEFT"
- header: "Prix"
key: "unit_price"
width: 30
align: "RIGHT"
format: "currency" # Formatage avec séparateurs
Tableau statique (Fixe)
Rend une grille fixe où vous définissez les lignes manuellement. Utile pour les pieds de page, coordonnées bancaires ou blocs de signature.
- type: "static_table"
x: 20
y: 50
width: 170 # Optionnel. Déduit de la somme des largeurs de colonnes si non spécifié
columns:
- width: 30
header: "Libellé"
- width: 140
header: "Valeur"
# Lignes définies manuellement
rows:
- ["Banque", "Banque Exemple"]
- ["N° de compte", "{{ account_number }}"] # Peut utiliser des variables
- ["Note", "Merci de régler sous 30 jours"]
Code-barres
Génère un code-barres 1D.
Types supportés : CODE128, JAN (EAN13 mixte), EAN13, EAN8, CODE39, UPCA, NW-7 (Codabar), ITF.
- type: "barcode"
value: "{{ invoice_no }}"
x: 20
y: 20
width: 50 # Largeur max (réduit si nécessaire)
height: 10 # Hauteur totale
barcode_type: "CODE128"
bar_width: 1.0 # Épaisseur des barres
bar_height: 10 # Hauteur des barres
# Texte lisible
human_readable: true
hr_font: "Helvetica"
hr_size: 10
hr_color: "#000000"
QR Code
Génère un QR code 2D.
Niveaux de correction d'erreur : L (7 %), M (15 %), Q (25 %), H (30 %).
- type: "qrcode"
value: "https://example.com/inv/{{ invoice_no }}"
x: 150
y: 20
width: 20 # Taille (rapport d'aspect fixe)
qr_error_level: "M"
qr_quiet_zone: true # Inclure la marge blanche
color: "#000000" # Premier plan
back_color: "#ffffff" # Arrière-plan
opacity: 1.0
Formes (Rect / Line)
Édition manuelle YAML uniquement
Les éléments de forme (rect et line) ne peuvent pas être ajoutés via l'interface du concepteur. Ils sont disponibles uniquement lors de l'édition directe du fichier YAML.
Propriétés Rect (Rectangle) :
- x, y : Position en millimètres.
- width, height : Dimensions en millimètres.
- stroke_color : Couleur de la bordure (hex, ex :
"#000000"). - fill_color : Couleur de remplissage (hex, ex :
"#f0f0f0"). Omettre pour aucun remplissage. - stroke_width : Épaisseur de la bordure en points (par défaut :
1). - opacity : Opacité de
0.0(transparent) à1.0(opaque).
Propriétés Line (Ligne) :
Une ligne est dessinée comme un rectangle avec height: 0 (horizontale) ou width: 0 (verticale).
- x, y : Position de départ en millimètres.
- width : Longueur d'une ligne horizontale.
- height : Longueur d'une ligne verticale. Mettre à
0pour les lignes horizontales. - stroke_color : Couleur de la ligne (hex).
- stroke_width : Épaisseur de la ligne en points.
# Rectangle avec bordure et remplissage
- type: "rect"
x: 10
y: 100
width: 190
height: 50
stroke_color: "#000000"
fill_color: "#f0f0f0"
stroke_width: 1
# Ligne horizontale
- type: "line"
x: 10
y: 200
width: 190
height: 0
stroke_width: 2
stroke_color: "#000000"