Génération de PDF en C++ : bibliothèques, outils 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 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

Recommendations