Gotenberg
Suite à la découverte de Gotenberg lors de la Symfony Live 2025, j'ai pris le temps d’écrire une petite sandbox pour tester cette alternative sérieuse à la génération de PDF.
Pourquoi les outils PHP classiques ne suffisent plus ?
Le constat est simple : la plupart des bibliothèques PHP natives (DomPDF, FPDF, TCPDF, ….) accusent leur âge. Lors de mes tests, j'ai remarqué que le CSS n'est pas toujours bien référencé et que les images ne sont pas systématiquement récupérées ou cassées. Pour obtenir des fonctionnalités avancées comme le split ou merge de pdfs, il faut souvent cumuler plusieurs bibliothèques, dont certaines ne sont plus maintenues.
Gotenberg n'est pas une bibliothèque PHP, c'est une API stateless écrite en Go, distribuée via Docker. Il agit comme une interface qui délègue le travail :
- Chromium : Pour transformer vos fichiers Twig/HTML ou des URL en PDF avec un rendu identique à votre navigateur.
- LibreOffice : Pour une conversion parfaite des documents Word et PowerPoint.
- PDF Engines : Pour toutes les opérations de manipulation de PDF.
Mise en œuvre dans Symfony
L'intégration se fait idéalement via le bundle sensiolabs/GotenbergBundle. Il propose un adaptateur Symfony, une gestion simplifiée des assets Twig et une configuration directe en YAML.
Twig vers PDF
Le rendu à partir de Twig est bien meilleur qu'avec les solutions classiques :
- Flexbox est parfaitement géré.
- L'intégration des images (distantes et locales via gotenberg_asset()) est très simple.
- Les polices (fonts) sont intégrées nativement.
La puissance du moteur Office
C'est sans doute la fonctionnalité la plus impressionnante. La conversion de fichiers Word (.docx) ou PowerPoint (.pptx) offre une mise en page et une pagination quasi parfaites, même sur des documents complexes.
Split, Merge et Sécurité
Gotenberg permet de manipuler les fichiers PDF (découpage par pages ou fusion) avec une performance très correcte. La gestion des mots de passe est également disponible (actuellement en version 1.x-dev).
Scalabilité et Webhooks
Pour les projets à forte charge, Gotenberg supporte nativement le mode asynchrone. L'utilisation des Webhooks permet de récupérer des informations (comme les headers de retour) pour variabiliser vos actions post-génération.
J'ai également testé la génération de 100 PDF en une minute : c'est logiquement un peu long en synchrone tout en restant raisonnable, l’option asynchrone étant toujours possible bien sûr.
Bilan
Critère | Solutions PHP classiques | Gotenberg (via Symfony) |
Moteur de rendu | Limité / Interne | Chromium |
CSS Moderne | Souvent cassé (Flexbox...) | Support complet |
Formats sources | Principalement HTML | HTML, URL, Office (Docx, Pptx) |
Architecture | Couplage fort au code PHP | Conteneurisé & Scalable |
Asynchrone | Complexe à mettre en œuvre | Natif via Webhooks |
Gotenberg apporte la stabilité et la modularité qui manquaient à l'écosystème PHP. Si votre stack tourne déjà sous Docker, c'est un ajout indispensable.
Retrouvez tous les exemples de code sur mon repo sandbox-gotenberg.