Génération de rapports PDF en C++ : bibliothèque libharu et autres

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 C++ avec libharu et PoDoFo



Dans le développement moderne en C++, il est souvent nécessaire de créer des documents PDF par programmation : des simples rapports textuels aux documents complexes de plusieurs pages avec tableaux, graphiques et images. Dans cet article, nous examinerons en détail deux bibliothèques populaires pour la génération de PDF en C++ — libharu et PoDoFo, et nous fournirons des exemples pratiques de leur utilisation.



1. Bibliothèque libharu



libharu est une bibliothèque légère et multiplateforme pour créer des fichiers PDF en C. Elle ne dépend d'aucune bibliothèque externe (à l'exception de zlib pour la compression), prend en charge Unicode, l'intégration de polices, d'images (JPEG/PNG) et les primitives vectorielles de base. Idéale pour générer des rapports simples, des factures, des attestations.



Installation (Linux / Windows)

  • Linux (Ubuntu/Debian) : sudo apt-get install libhpdf-dev
  • Windows (vcpkg) : vcpkg install libharu
  • Windows (compilation à partir des sources) : téléchargez l'archive depuis GitHub, compilez via CMake.


Exemple : création d'un PDF simple avec du texte et une ligne

#include <hpdf.h>#include <stdio.h>

int main() { HPDF_Doc pdf = HPDF_New(NULL, NULL); if (!pdf) { fprintf(stderr, "Erreur de création du document"); return 1; }

HPDF_Page page = HPDF_AddPage(pdf); HPDF_Page_SetSize(page, HPDF_PAGE_SIZE_A4, HPDF_PAGE_PORTRAIT);

// Titre HPDF_Page_BeginText(page); HPDF_Page_SetFontAndSize(page, HPDF_GetFont(pdf, "Helvetica", NULL), 24); HPDF_Page_TextOut(page, 50, 750, "Rapport de ventes pour le T1"); HPDF_Page_EndText(page);

// Ligne sous le titre HPDF_Page_SetLineWidth(page, 1.5); HPDF_Page_MoveTo(page, 50, 735); HPDF_Page_LineTo(page, 545, 735); HPDF_Page_Stroke(page);

// Sauvegarde HPDF_SaveToFile(pdf, "report.pdf"); HPDF_Free(pdf); printf("PDF créé : report.pdf"); return 0;}


Exemple : ajout d'un tableau (simulation)

libharu n'a pas de module de tableau intégré, mais on peut les dessiner manuellement :

void draw_table(HPDF_Page page, float x, float y, float col_width, float row_height, int rows, int cols) {    for (int r = 0; r <= rows; ++r) {        HPDF_Page_MoveTo(page, x, y - r * row_height);        HPDF_Page_LineTo(page, x + cols * col_width, y - r * row_height);        HPDF_Page_Stroke(page);    }    for (int c = 0; c <= cols; ++c) {        HPDF_Page_MoveTo(page, x + c * col_width, y);        HPDF_Page_LineTo(page, x + c * col_width, y - rows * row_height);        HPDF_Page_Stroke(page);    }}


2. Bibliothèque PoDoFo



PoDoFo est une bibliothèque plus moderne et puissante en C++ avec le support de C++17. Elle fournit une API orientée objet, la gestion des formulaires, des annotations, des signets, l'intégration de polices TrueType/OpenType, ainsi que la lecture et l'édition de PDF existants. PoDoFo est mieux adapté aux rapports complexes avec du contenu dynamique.



Installation

  • Linux : sudo apt-get install libpodofo-dev (la version peut être ancienne, mieux vaut compiler à partir des sources)
  • Windows : via vcpkg : vcpkg install podofo
  • Compilation à partir des sources : nécessite CMake, zlib, libpng, freetype, fontconfig.


Exemple : création d'un PDF avec un tableau et une image

#include <podofo/podofo.h>#include <iostream>

int main() { using namespace PoDoFo;

PdfMemDocument doc; PdfPage* page = doc.CreatePage(PdfPage::CreateStandardPageSize(PdfPageSize::A4)); PdfPainter painter; painter.SetCanvas(*page);

// Police auto

Recommendations