Génération de rapports PDF en Go (Golang) : bibliothèques et exemples

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) : aperçu des bibliothèques et exemples de code



Go (Golang) est un langage compilé moderne de plus en plus choisi pour créer des applications serveur à forte charge et des microservices. L'une des tâches typiques dans ces systèmes est la génération de rapports PDF (factures, actes, tableaux de bord statistiques). Dans cet article, nous examinerons trois bibliothèques populaires pour la génération de PDF en Go, leurs points forts et fournirons des exemples de code prêts à l'emploi.



1. gofpdf — la classique pour créer des PDF à partir de zéro



La bibliothèque gofpdf (actuellement développée sous jung-kurt/gofpdf ou le fork go-pdf/fpdf) est un port de la célèbre bibliothèque PHP FPDF. Elle permet de créer des documents PDF sans dépendances externes, en utilisant uniquement les outils standards de Go.



Installation

go get github.com/jung-kurt/gofpdf


Exemple : une facture simple

package main

import ( "github.com/jung-kurt/gofpdf")

func main() { pdf := gofpdf.New("P", "mm", "A4", "") pdf.SetFont("Arial", "B", 16) pdf.AddPage() pdf.CellFormat(190, 10, "Facture n°123 du 01.01.2025", "0", 1, "C", false, 0, "") pdf.SetFont("Arial", "", 12) pdf.Ln(10) pdf.CellFormat(190, 10, "Produit : Ordinateur portable", "1", 1, "L", false, 0, "") pdf.CellFormat(190, 10, "Prix : 120 000 RUB", "1", 1, "L", false, 0, "") pdf.CellFormat(190, 10, "Total : 120 000 RUB", "1", 1, "L", false, 0, "") err := pdf.OutputFileAndClose("invoice.pdf") if err != nil { panic(err) }}


Avantages : dépendances minimales, contrôle total sur chaque élément, prise en charge Unicode (via AddUTF8Font).
Inconvénients : API de bas niveau — pour des rapports complexes, il faudra coder beaucoup manuellement.



2. maroto — génération de haut niveau avec tableaux et styles



Maroto est construite au-dessus de gofpdf, mais propose une API plus pratique : tableaux, grilles, alignement automatique et prise en charge intégrée des polices. Idéal pour les rapports standards : factures, listes, tarifs.



Installation

go get github.com/johnfercher/maroto/v2


Exemple : tableau avec données

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.New() m.SetPageMargins(10, 10, 10) // Titre m.Row(10, func() { m.Col(12, func() { m.Text("Rapport de ventes", props.Text{ Style: props.Bold, Size: 16, Align: props.Center, }) }) }) // Tableau header := []string{"Produit", "Quantité", "Prix"} data := [][]string{ {"Moniteur", "2", "30 000"}, {"Clavier", "5", "7 500"}, } m.TableList(header, data, props.TableList{ HeaderProp: props.TableListContent{ Style: props.Bold, Size: 10, }, ContentProp: props.TableListContent{ Size: 9, }, }) document, _ := m.Generate() document.Save("report.pdf")}


Avantages : développement rapide, styles intégrés, saut de page automatique.
Inconvénients : moins de flexibilité pour une mise en page non standard.



3. wkhtmltopdf — conversion HTML en PDF via une enveloppe Go



Si vous avez déjà des modèles HTML (par exemple, avec Bootstrap), le plus simple est d'utiliser wkhtmltopdf. Ce n'est pas une bibliothèque Go, mais un utilitaire en ligne de commande, pour lequel il existe une enveloppe Go go-wkhtmltopdf. Elle prend une chaîne HTML et retourne un PDF.



Installation

# Installez d'abord wkhtmltopdf : https://wkhtmltopdf.org/downloads.htmlgo get github.com/SebastiaanKlippert/go-wkhtmltopdf

Recommendations