Constructeur de données de tableau
Ouvrir le constructeur
Sélectionnez un tableau dans le canevas. Dans l’onglet Données de l’Inspecteur, choisissez Ouvrir le Constructeur de données. Les onglets champs, source et aperçu séparent la structure du tableau de ses données.
Colonnes et lignes de synthèse
Dans Champs, ajoutez des colonnes et définissez chaque en-tête et champ de données. Ajustez largeur, formatage et apparence avancée. Vous pouvez ajouter des lignes de total, sous-total ou note sous le tableau ; la section Totaux explique les calculs.
Totaux
Sur une ligne de total ou sous-total, choisissez un Calcul : Somme, Moyenne, Minimum, Maximum ou Compter les lignes. Le résultat est écrit dans la Colonne de valeur à partir de toutes ses lignes ; sauf format propre à la ligne, le format de la colonne s’applique.
"summaryRows": [
{ "type": "total", "label": "Total général",
"aggregate": "sum", "targetColumnKey": "total" }
]
Seules les cellules reçues comme nombres comptent : les cellules vides sont ignorées et un montant envoyé comme texte (« 1,250.00 ») laisse le résultat vide. Un sous-total couvre aussi toutes les lignes, pas chaque page. Avec Champ de données, la case Valeur lit la racine des données, pas le tableau : {{ grandTotal }}, par exemple.
Source et JSON d’exemple
Dans Source, choisissez le tableau de données et modifiez le JSON d’exemple. Le champ de colonne doit correspondre à une propriété des objets du tableau. Pour afficher quantity depuis items, définissez le champ sur quantity. Corrigez tout avertissement de JSON invalide avant de continuer.
Apparence par défaut du tableau
| Article | Quantité | Total |
|---|---|---|
| Diagnostic des pannes | 2 | 1.700,00 |
| Module de connectivité | 1 | 2.850,00 |
| Étalonnage sur site | 1 | 850,00 |
Ces mesures sont les valeurs par défaut : en-tête 40px, ligne 40px, marge intérieure 10px, bordure 1px. Un modèle peut les modifier.
Un élément de tableau, de bout en bout
Un tableau se lie à un tableau de vos données et dessine une ligne par élément. L’élément ci-dessous est celui fourni avec le modèle de facture ; l’appel situé en dessous alimente ce même tableau avec trois lignes.
{
"id": "invoice-items",
"type": "table",
"placementMode": "flow",
"binding": "lineItems",
"layout": { "x": 0, "y": 330, "width": 100, "widthUnit": "percent", "height": 220 },
"style": {
"tableHeaderHeight": 36,
"tableRowHeight": 34,
"tableRepeatHeader": true,
"tablePreventRowSplit": true
},
"columns": [
{ "key": "name", "label": "Description", "valueTemplate": "{{ name }}",
"align": "left", "widthPercent": 46 },
{ "key": "quantity", "label": "Quantité", "valueTemplate": "{{ quantity }}",
"align": "right", "widthPercent": 14 },
{ "key": "unitPrice", "label": "Prix unitaire", "valueTemplate": "{{ unitPrice }}",
"align": "right", "widthPercent": 20,
"format": { "kind": "currency", "currency": "USD", "decimals": 2 } },
{ "key": "total", "label": "Montant", "valueTemplate": "{{ total }}",
"align": "right", "widthPercent": 20,
"format": { "kind": "currency", "currency": "USD", "decimals": 2 } }
]
}
curl -X POST https://api.pdfgine.com/api/v1/render \
-H "X-PDFgine-Key: $PDFGINE_KEY" \
-H "Content-Type: application/json" \
-d '{
"templateCode": "invoice",
"format": "pdf",
"locale": "fr",
"data": {
"document": { "title": "Résumé de la facture" },
"referenceNo": "DOC-2026-0042",
"issueDate": "2026-09-06",
"currency": "USD",
"customer": "Northwind Trading Ltd.",
"lineItems": [
{ "name": "Diagnostic des pannes", "quantity": 2, "unitPrice": 850.00 },
{ "name": "Module de connectivité", "quantity": 1, "unitPrice": 2850.00 },
{ "name": "Étalonnage sur site", "quantity": 1, "unitPrice": 850.00 }
]
}
}'
binding désigne le tableau dans vos données, key le champ de chaque élément et valueTemplate le contenu imprimé. tableRepeatHeader répète l’en-tête sur chaque page et tablePreventRowSplit empêche de couper une ligne lors d’un saut de page.
Appliquer et tester les tableaux longs
Vérifiez l’ordre des colonnes, les champs vides et les synthèses dans l’Aperçu, puis appliquez. Testez ensuite zéro, une et de nombreuses lignes dans l’aperçu du document. Les textes longs et hauteurs d’en-têtes et de lignes affectent la pagination ; ne vous fiez pas seulement à un exemple court.
Graphiques et rapports →Éléments dataset
Un élément dataset rend sa collection liée sous forme de tableau et déduit ses colonnes des données, sans déclaration. Utilisez-le lorsque la structure de la collection dépend des données envoyées plutôt que du modèle.
| Valeur liée | Ce qu’affiche le document |
|---|---|
[{ "name": "…", "quantity": 2 }] |
Une colonne par champ, dans l’ordre de première apparition. Une ligne omettant un champ conserve tout de même cette colonne. |
[{ "party": { "name": "…" } }] |
Les objets imbriqués sont aplatis en colonnes à points, comme party.name, jusqu’à trois niveaux. Un tableau dans une ligne reste dans une seule cellule. |
["urgent", "warranty"] |
Une colonne dont les cellules contiennent les valeurs elles-mêmes ; l’en-tête est le dernier segment de la liaison. |
{ "status": "released" } |
Une seule ligne, une colonne par champ de l’objet. |
[] |
Rien n’est dessiné. Un élément dataset sans liaison ne dessine rien non plus. |
Les en-têtes sont les noms des champs. Un élément dataset ne porte pas ses propres libellés ; utilisez un tableau si vous souhaitez nommer les colonnes vous-même.
Les problèmes les plus courants
- Une liaison désignant un tableau absent de vos données dessine un tableau vide, pas une erreur. Si le tableau est vide, comparez la liaison avec la clé de votre requête.
- La clé d’une colonne est une propriété des objets de ce tableau. Une clé mal orthographiée vide une colonne alors que le reste du tableau semble correct.
- Les montants et quantités doivent arriver sous forme de nombres. Une chaîne contourne le formatage ; la colonne perd alors son alignement et son séparateur de milliers.
- Un tableau long s’étend sur plusieurs pages. Sans tableRepeatHeader, la deuxième page commence sans en-tête ; sans tablePreventRowSplit, une ligne peut être coupée en deux.
- Testez zéro, une et de nombreuses lignes. Un tableau testé uniquement avec trois lignes masque le cas vide et les sauts de page.