NOTE : mise à jour 2025/01/05
Bonjour,
Un des principaux challenges que je rencontre sur Grist est d’exporter les données dans des PDF bien présentés.
Certaines contributions proposent de faire des templates et de calculer le résultat avec des formules, véritables petits programmes en Python. Cette approche est problématique pour deux raisons :
- Les rendus sont recalculés, coté serveur, à chaque changement de données, ce qui peut contribuer à alourdir la charge de calcul pour le serveur et ralentir le fonctionnement de Grist, en particulier sur des gros documents.
- Les fonctionnalités du moteur de templates doivent rester basiques pour garder une formule simple, au risque sinon à nouveau d’alourdir les calculs.
L’approche proposée ici est de faire le calcul coté client, en JS, dans un widget, en utilisant un moteur de template puissant et éprouvé : LiquidJS (https://liquidjs.com/). Les calculs ne sont alors effectués que lorsqu’on affiche un rendu.
Avec ce moteur LiquidJS, vous allez pouvoir :
- Générer des présentations de vos données en intégrant toute la hiérarchie de tables liées (Référence et Référence Multiples)
- Exporter en PDF
- Faire du traitement par lot pour vos impressions en masses
- Présenter vos tableaux dans une page mise en forme, en respectant les styles configurés et styles conditionnels des cellules
- Présenter vos Choix uniques et choix multiples en respectant les styles de chaque choix.
J’ai réalisé deux widgets dont voici les liens :
Voici une démo : Liquid - Grist
Documentation à venir…
3 « J'aime »
Bonjour Raphaël,
C’est top ce travail sur les PDFs, merci 
Juste pour info les 2 liens github.io me donnent une page blanche.
G.
PS : petite question au passage : sais tu si il y a quelque part un post sur la création de PDFs du type « devis » ou « commande », c’est à dire un PDF qui afficherait les lignes lignes d’une table par rapport à une référence donnée.
Bonjour Guillaume,
Les deux liens github sont a utiliser lorsque tu ajoute une vue personnalisée.
Pour répondre à.ta question sur les devis ou commandes, ce plugin est parfaitement adapté à l’usage. Si tu n’as pas les connaissances pour faire du html ou faire des templates Liquid, une IA pourra parfaitement aider. Tu lui décris tes données en donnant un exemple, tu lui demandes de fabriquer un template Liquid et ça devrais fonctionner rapidement.
Pour décrire tes données, le mieux est d’utiliser le format JSON. Il est important d’utiliser mettre les ID des colonnes. Par exemple :
Peux-tu me générer un template de facture en Liquid avec le modèle de données suivant ?
{
Numero: 1,
Nom_Client: "Ma petite entreprise",
Adresse_Client: "Ici et ailleurs",
Date: 12/05/2025,
Lignes: [
{
Description: "description",
Prix_unitaire: 10,
Quantite : 2,
Prix_total: 20,
}
]
}
Bonjour Raphaël
Cette proposition règle un problème que je rencontrais dans la génération d’un grand nombre de PDF.
Existe-t-il une documentation accessible ? Notamment pour le Record list qui doit permettre un traitement par lot, si je comprends bien ?
En tout cas, un grand merci pour ce travail et une bonne nouvelle année 
Bonjour Arnault,
Je n’ai pas encore eu le temps de rédiger la documentation… Pour les templates je te renvoie sur le site de LiquidJs.
Il est effectivement possible de traiter toute une table, en prenant « records » comme donnée racine, par exemple dans une boucle
{% for record in records %}
{{ record.column }}
{% endfor %}
J’ai ajouté une page d’exemples en utilisant l’option « Record list », permettant de réaliser du traitement par lot.
2 « J'aime »
Un grand merci encore !
Votre exemple m’a bien éclairé et fonctionne parfaitement.