Génération de PDF en C++ : aperçu des bibliothèques et outils
La génération de documents PDF est l'une des tâches courantes dans le développement de logiciels en C++. De la création de rapports simples à la réalisation de documents complexes de plusieurs pages avec tableaux, images et graphiques. Dans cet article, nous examinerons les bibliothèques et outils les plus populaires pour travailler avec le PDF en C++, leurs fonctionnalités, avantages et inconvénients, et nous fournirons des exemples pratiques de code.
Pourquoi générer des PDF en C++ ?
Le PDF (Portable Document Format) est un format multiplateforme qui préserve la mise en page du document quel que soit l'appareil ou le système d'exploitation. En C++, la génération de PDF est nécessaire pour :
- Créer des rapports et des factures dans les applications métier
- Générer de la documentation à partir de modèles
- Exporter des données depuis des bases de données
- Générer des reçus et des bons de livraison dans les systèmes de comptabilité
Principales bibliothèques pour travailler avec le PDF en C++
1. libharu (HARU PDF)
L'une des bibliothèques les plus populaires et les plus simples à utiliser pour la génération de PDF. Écrite en C, mais dispose d'une excellente interface C++. Permet de créer des documents PDF à partir de zéro, d'ajouter du texte, des images, des lignes, des rectangles, des annotations.
Caractéristiques :
- Taille réduite et haute performance
- Prise en charge des polices TrueType
- Compression des pages
- Travail avec les images (JPEG, PNG)
- Licence : ZLIB/Libpng (libre)
Exemple de génération d'un PDF simple :
#include <hpdf.h>#include <stdio.h>
int main() { HPDF_Doc pdf = HPDF_New(NULL, NULL); HPDF_Page page = HPDF_AddPage(pdf); // Définit la taille de la page A4 HPDF_Page_SetSize(page, HPDF_PAGE_SIZE_A4, HPDF_PAGE_LANDSCAPE); // Ajoute du texte HPDF_Page_BeginText(page); HPDF_Page_SetFontAndSize(page, HPDF_GetFont(pdf, "Helvetica", NULL), 24); HPDF_Page_TextOut(page, 100, 500, "Bonjour, monde PDF en C++ !"); HPDF_Page_EndText(page); // Sauvegarde le document HPDF_SaveToFile(pdf, "output.pdf"); HPDF_Free(pdf); return 0;}2. PoDoFo
Une bibliothèque C++ moderne open source pour travailler avec le PDF. Prend en charge non seulement la création, mais aussi la modification de fichiers PDF existants. Bien documentée et activement maintenue.
Caractéristiques :
- Code C++ pur (normes modernes)
- Prise en charge d'Unicode et du cyrillique
- Travail avec les formulaires, les signets, les métadonnées
- Lecture et écriture de PDF
- Licence : LGPL
Exemple de création d'un PDF avec un tableau :
#include <podofo/podofo.h>
using namespace PoDoFo;
int main() { PdfMemDocument document; PdfPage* page = document.CreatePage(PdfPage::CreateStandardPageSize(PdfPageSize::A4)); PdfPainter painter; painter.SetCanvas(*page); // Dessine un tableau painter.DrawRect(50, 700, 500, 30); painter.DrawText(60, 710, "En-tête du tableau"); // Sauvegarde painter.FinishPage(); document.Save("table.pdf"); return 0;}3. wkhtmltopdf
Ce n'est pas une bibliothèque au sens classique, mais un utilitaire en ligne de commande utilisant le moteur WebKit pour convertir du HTML en PDF. En C++, on peut l'appeler via system() ou utiliser une bibliothèque d'encapsulation.
Caractéristiques :
- Idéal pour générer des PDF à partir de modèles HTML
- Prise en charge de CSS, JavaScript, SVG
- Mise en page de qualité (comme dans un navigateur)
- En-têtes et pieds de page, table des matières, numérotation des pages
- Licence : LGPLv3
Exemple d'appel depuis C++ :
#include <cstdlib>
int main() { // Convertit un fichier HTML en PDF int result = std::system("w