PDF-Berichte in C++ generieren: Die Bibliothek libharu und mehr

Online Python-Trainer für Anfänger

Lernen Sie Python einfach ohne theoretische Überlastung. Lösen Sie praktische Aufgaben mit automatischer Überprüfung und schreiben Sie Code direkt im Browser.

Kurs starten

PDF-Berichte in C++ mit libharu und PoDoFo generieren



In der modernen C++-Entwicklung besteht häufig die Notwendigkeit, programmatisch PDF-Dokumente zu erstellen: von einfachen Textberichten bis hin zu komplexen mehrseitigen Dokumenten mit Tabellen, Diagrammen und Bildern. In diesem Artikel betrachten wir zwei beliebte Bibliotheken zur PDF-Generierung in C++ – libharu und PoDoFo – und geben praktische Beispiele für deren Verwendung.



1. Die Bibliothek libharu



libharu ist eine leichtgewichtige, plattformunabhängige Bibliothek zum Erstellen von PDF-Dateien in C. Sie ist unabhängig von externen Bibliotheken (außer zlib für die Komprimierung), unterstützt Unicode, die Einbettung von Schriftarten, Bildern (JPEG/PNG) und grundlegende Vektorprimitiven. Ideal für die Generierung einfacher Berichte, Rechnungen und Bescheinigungen.



Installation (Linux / Windows)

  • Linux (Ubuntu/Debian): sudo apt-get install libhpdf-dev
  • Windows (vcpkg): vcpkg install libharu
  • Windows (Build aus dem Quellcode): Laden Sie das Archiv von GitHub herunter und bauen Sie es mit CMake.


Beispiel: Erstellen eines einfachen PDFs mit Text und einer Linie

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

int main() { HPDF_Doc pdf = HPDF_New(NULL, NULL); if (!pdf) { fprintf(stderr, "Fehler beim Erstellen des Dokuments"); return 1; }

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

// Überschrift HPDF_Page_BeginText(page); HPDF_Page_SetFontAndSize(page, HPDF_GetFont(pdf, "Helvetica", NULL), 24); HPDF_Page_TextOut(page, 50, 750, "Verkaufsbericht Q1"); HPDF_Page_EndText(page);

// Linie unter der Überschrift HPDF_Page_SetLineWidth(page, 1.5); HPDF_Page_MoveTo(page, 50, 735); HPDF_Page_LineTo(page, 545, 735); HPDF_Page_Stroke(page);

// Speichern HPDF_SaveToFile(pdf, "report.pdf"); HPDF_Free(pdf); printf("PDF erstellt: report.pdf"); return 0;}


Beispiel: Hinzufügen einer Tabelle (Simulation)

libharu hat kein integriertes Tabellenmodul, aber Tabellen können manuell gezeichnet werden:

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. Die Bibliothek PoDoFo



PoDoFo ist eine modernere und leistungsfähigere C++-Bibliothek mit Unterstützung für C++17. Sie bietet eine objektorientierte API, Arbeit mit Formularen, Anmerkungen, Lesezeichen, Einbettung von TrueType/OpenType-Schriftarten sowie das Lesen und Bearbeiten vorhandener PDFs. PoDoFo eignet sich besser für komplexe Berichte mit dynamischem Inhalt.



Installation

  • Linux: sudo apt-get install libpodofo-dev (die Version kann alt sein, besser aus dem Quellcode bauen)
  • Windows: über vcpkg: vcpkg install podofo
  • Build aus dem Quellcode: Erfordert CMake, zlib, libpng, freetype, fontconfig.


Beispiel: Erstellen eines PDFs mit Tabelle und Bild

#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);

// Schriftart auto

Empfehlungen