Génération de PDF en Go (Golang) : Aperçu complet des bibliothèques et outils
La création de documents PDF est l'une des tâches courantes dans le développement web, l'automatisation des rapports et la création de flux de documents électroniques. Le langage Go (Golang) propose plusieurs solutions matures pour cette tâche. Dans cet article, nous allons détailler les principales bibliothèques, leurs fonctionnalités, des exemples d'utilisation et vous aider à choisir l'outil adapté à votre projet.
Pourquoi Go pour la génération de PDF ?
Go combine les hautes performances d'un langage compilé avec la simplicité de développement. Grâce à la prise en charge intégrée de la concurrence (goroutines) et à une gestion efficace de la mémoire, la génération de PDF, même sur de grands volumes de données, est rapide. De plus, le typage statique et la riche bibliothèque standard rendent le code fiable et prévisible.
Principales bibliothèques pour la génération de PDF en Go
1. gofpdf — une bibliothèque simple et légère
gofpdf est un port de la célèbre bibliothèque PHP FPDF. Elle fournit une API de base pour créer des PDF à partir de zéro : ajout de pages, polices, images, tableaux et primitives graphiques simples.
Installation :
go get github.com/jung-kurt/gofpdfExemple : création d'un PDF simple avec du texte et une image
package main
import ( "github.com/jung-kurt/gofpdf")
func main() { pdf := gofpdf.New("P", "mm", "A4", "") pdf.AddPage() pdf.SetFont("Arial", "B", 16) pdf.Cell(40, 10, "Bonjour, monde PDF !") pdf.ImageOptions("logo.png", 10, 20, 30, 0, false, gofpdf.ImageOptions{ImageType: "PNG"}, 0, "") err := pdf.OutputFileAndClose("output.pdf") if err != nil { panic(err) }}Avantages : API minimaliste, taille réduite, aucune dépendance externe, prise en charge d'Unicode (UTF-8).
Inconvénients : prise en charge limitée des mises en page complexes, pas de rendu HTML intégré.
2. maroto — une bibliothèque de haut niveau pour les rapports
Maroto est construite au-dessus de gofpdf et ajoute le concept de "grille" (grid) pour créer des mises en page complexes : tableaux, colonnes, légendes et logos. Idéal pour les factures, les bons de livraison et les rapports.
Installation :
go get github.com/johnfercher/maroto/v2Exemple : création d'une facture avec un tableau
package main
import ( "github.com/johnfercher/maroto/v2" "github.com/johnfercher/maroto/v2/pkg/components/col" "github.com/johnfercher/maroto/v2/pkg/components/row" "github.com/johnfercher/maroto/v2/pkg/components/text" "github.com/johnfercher/maroto/v2/pkg/core")
func main() { m := maroto.New() m.AddRow(20, text.NewCol(12, "Facture n°123")) m.AddRow(10, text.NewCol(12, "Date : 2024-01-15")) // Tableau headers := []string{"Produit", "Qté", "Prix", "Total"} rows := [][]string{ {"Ordinateur portable", "2", "50000", "100000"}, {"Souris", "5", "1500", "7500"}, } m.AddRow(10, col.New(12).Add(text.New("Tableau des produits"))) // Pour le tableau, utilisez le composant table // m.AddTable(headers, rows) doc, _ := m.Build() doc.Save("invoice.pdf")}Avantages : style déclaratif, composants prêts à l'emploi (tableaux, codes QR, graphiques), alignement automatique.
Inconvénients : plus de dépendances que gofpdf, certaines baisses de performances sur les mises en page complexes.
3. unipdf — une bibliothèque commerciale aux fonctionnalités avancées
UniPDF (de la société UniDoc) est une solution professionnelle pour travailler avec les PDF : création, édition, extraction de données, signature, chiffrement. Prend en charge la conversion HTML vers PDF (via WebKit).
Installation :
go get github.com/unidoc/unipdf/v3Pro
Aussi dans la bibliothèque
Client Redis pour C# (.NET) : StackExchange.Redis — connexion et exemples
ORM pour JavaScript (Node.js) : comparaison de Sequelize, TypeORM, Prisma
Spectre.Console C# (.NET) : guide complet avec exemples
Générateur de codes QR en Kotlin : création et personnalisation de codes QR
Configuration d'applications en Go : bonnes pratiques et outils