Génération de PDF en Go (Golang) : aperçu des bibliothèques et outils
La création de documents PDF est l'une des tâches courantes en développement web. Dans l'écosystème Go (Golang), il existe plusieurs bibliothèques matures qui permettent de générer des PDF, aussi bien pour des rapports simples que pour des documents complexes de plusieurs pages avec tableaux, graphiques et polices. Dans cet article, nous examinerons les principaux outils, leurs fonctionnalités et fournirons des exemples pratiques de code.
Pourquoi Go pour la génération de PDF ?
Go est un langage compilé avec d'excellentes performances et un modèle de concurrence simple. Pour les tâches de génération de PDF, cela signifie :
- Traitement rapide de grands volumes de données
- Intégration facile avec les serveurs web (net/http)
- Possibilité de paralléliser la génération de plusieurs documents
- Absence de dépendances externes (le binaire inclut tout le nécessaire)
Principales bibliothèques pour travailler avec les PDF en Go
1. gofpdf — bibliothèque simple et populaire
gofpdf est un portage en Go de la célèbre bibliothèque PHP FPDF. Elle fournit une API simple pour créer des PDF avec des éléments de base : texte, lignes, rectangles, images et tableaux. La bibliothèque ne nécessite pas de dépendances externes et prend en charge Unicode via l'intégration de polices.
Exemple de création d'un PDF simple avec gofpdf :
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 le monde !") pdf.OutputFileAndClose("hello.pdf")}Fonctionnalités principales de gofpdf :
- Prise en charge UTF-8 (nécessite l'intégration de polices TrueType)
- Sauts de page automatiques
- Graphiques vectoriels (lignes, courbes, remplissages)
- Intégration d'images (JPEG, PNG, GIF)
- Tableaux avec données dynamiques
2. UniPDF — bibliothèque commerciale puissante
UniPDF (anciennement FoxyUtils) est une solution professionnelle pour travailler avec les PDF en Go. La bibliothèque est open source, mais nécessite une licence pour une utilisation commerciale. UniPDF prend en charge non seulement la création, mais aussi l'édition, la conversion et l'extraction de données à partir de PDF.
Exemple de création d'un PDF avec UniPDF :
package main
import ( "os" "github.com/unidoc/unipdf/v3/creator")
func main() { c := creator.New() c.NewPage() // Ajout de texte text := c.NewStyledParagraph() text.Append("Exemple de document UniPDF") text.SetFontSize(18) c.Draw(text) // Sauvegarde c.WriteToFile("unipdf_example.pdf")}Fonctionnalités uniques d'UniPDF :
- Analyse et édition complètes des PDF existants
- Prise en charge des formulaires, annotations et signets
- Conversion HTML en PDF
- Travail avec les signatures numériques
- Extraction de texte et d'images
3. Maroto — générateur de PDF basé sur des composants visuels
Maroto est construit au-dessus de gofpdf et propose une approche de plus haut niveau utilisant le concept de "grille" (grid). C'est pratique pour créer des rapports, des factures et d'autres documents structurés.
Exemple avec Maroto :
package main
import ( "fmt" "github.com/johnfercher/maroto/v2/pkg/consts/align" "github.com/johnfercher/maroto/v2/pkg/consts/fontstyle" "github.com/johnfercher/maroto/v2/pkg/core" "github.com/johnfercher/maroto/v2/pkg/props" "github.com/johnfercher/maroto/v2")
func main() { m := maroto.New() m.Row(20, func() { m.Col(12, func() { m.Text("Facture n°123", props.Text{ Style: fontstyle.Bold, Align: align.Center, }) }) }) document, err := m.Generate() if err != nil { Aussi dans la bibliothèque
Traitement et analyse Markdown en PHP : bibliothèques et exemples
Travailler avec les archives ZIP en TypeScript : guide complet sur JSZip et adm-zip
Tests en C# (.NET) : aperçu complet des frameworks et outils
GraphQL en C# (.NET) : Guide complet de la bibliothèque GraphQL.NET
Lodash pour JavaScript (Node.js) : guide complet avec exemples