Génération de rapports PDF en Go : aperçu des bibliothèques et exemples de code

Formateur Python en ligne pour débutants

Apprenez Python facilement sans surcharge théorique. Résolvez des tâches pratiques avec vérification automatique et écrivez du code directement dans le navigateur.

Start Course

Génération de rapports PDF en Go (Golang) : guide complet



La création de documents PDF est l'une des tâches courantes en développement web, notamment pour la construction de systèmes d'entreprise, d'applications financières ou de plateformes éducatives. Le langage Go (Golang) propose plusieurs bibliothèques puissantes pour la génération de PDF, permettant de créer à la fois des rapports textuels simples et des documents complexes de plusieurs pages avec tableaux, graphiques et images. Dans cet article, nous examinerons trois approches populaires : gofpdf, maroto et l'intégration avec wkhtmltopdf.



1. Bibliothèque gofpdf — gestion de bas niveau du PDF



gofpdf est l'une des bibliothèques les plus anciennes et les plus flexibles pour la génération de PDF en Go. Elle offre un contrôle total sur chaque élément de la page, mais nécessite plus de code pour les mises en page complexes.



Installation

go get github.com/jung-kurt/gofpdf


Exemple : rapport simple avec titre et tableau

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, "Rapport de ventes") pdf.Ln(12)

// En-têtes du tableau pdf.SetFont("Arial", "B", 12) headers := []string{"Produit", "Quantité", "Prix"} for _, h := range headers { pdf.CellFormat(40, 10, h, "1", 0, "C", false, 0, "") } pdf.Ln(-1)

// Données pdf.SetFont("Arial", "", 12) data := [][]string{{"Ordinateur portable", "5", "45000"}, {"Souris", "12", "1500"}} for _, row := range data { for _, cell := range row { pdf.CellFormat(40, 10, cell, "1", 0, "C", false, 0, "") } pdf.Ln(-1) }

err := pdf.OutputFileAndClose("report.pdf") if err != nil { panic(err) }}


Avantages : dépendances minimales, contrôle total, prise en charge Unicode (polices TrueType).
Inconvénients : absence de composants prêts à l'emploi (tableaux, graphiques), nécessité de calculer manuellement les positions.



2. Bibliothèque maroto — génération de haut niveau avec grille



maroto est construite au-dessus de gofpdf et propose une approche par composants avec une grille, ce qui simplifie la création de mises en page complexes. Idéale pour les rapports types : factures, bons de livraison, listes de prix.



Installation

go get github.com/johnfercher/maroto/v2


Exemple : rapport avec logo et tableau

package main

import ( "github.com/johnfercher/maroto/v2/pkg/core" "github.com/johnfercher/maroto/v2/pkg/props" "github.com/johnfercher/maroto/v2")

func main() { m := maroto.NewMaroto(maroto.WithMaxGridSize(12)) m.RegisterHeader(func() { m.Row(20, func() { m.Col(3, func() { m.FileImage("logo.png", props.Rect{ Percent: 80, Center: true, }) }) m.Col(9, func() { m.Text("SARL «TechnoService»", props.Text{ Style: props.Bold, Size: 16, }) }) }) })

m.Row(10, func() { m.Col(12, func() { m.Table([]string{"Désignation", "Qté", "Montant"}, [][]string{ {"Moniteur 24\\"", "2", "40000"}, {"Clavier", "5", "7500"}, }, props.Table{ Content: props.TableContent{ GridSizes: []uint{6, 3, 3}, }, }) }) })

document, _ := m.Generate() _ = document.Save("invoice.pdf")}


Avantages : développement rapide, alignement automatique, prise en charge intégrée des tableaux, codes QR et codes-barres.
Inconvénients : plus

Recommendations