PDF-Berichte in C++ generieren: Bibliotheksübersicht und praktische Beispiele
In der modernen Softwareentwicklung besteht häufig die Notwendigkeit, Druckdokumente, Analyseberichte oder Rechnungen zu erstellen. Die Sprache C++ bietet leistungsstarke Werkzeuge für die Arbeit mit PDF, jedoch kann die Auswahl der geeigneten Bibliothek schwierig sein. In diesem Artikel betrachten wir drei Hauptansätze: die direkte Arbeit auf niedriger Ebene mit PDF (libharu), die Arbeit mit dem Objektmodell des Dokuments (PoDoFo) und die Konvertierung von HTML in PDF (wkhtmltopdf). Für jeden Ansatz werden Codebeispiele und Anwendungsbereiche angegeben.
1. Bibliothek libharu – minimalistischer Ansatz
libharu ist eine leichtgewichtige Bibliothek in reinem C, vollständig kompatibel mit C++. Sie erfordert keine externen Abhängigkeiten und ermöglicht die Erstellung von PDF-Dateien durch Steuerung jeder Seite, Schriftart und Linie. Ideal geeignet für einfache Berichte, die nur Text, Tabellen und grundlegende Grafiken benötigen.
Installation
# Linux (Debian/Ubuntu)sudo apt-get install libhpdf-dev
# Windows (vcpkg)vcpkg install libharuBeispiel: Erstellen eines Berichts mit Tabelle
#include <hpdf.h>#include <iostream>
int main() { HPDF_Doc pdf = HPDF_New(NULL, NULL); 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), 18); HPDF_Page_TextOut(page, 50, 750, "Verkaufsbericht für Q1"); HPDF_Page_EndText(page);
// Tabelle: Zellenkoordinaten const char* headers[] = {"Produkt", "Menge", "Preis, Rub."}; const char* data[][3] = {{"Laptop", "12", "85000"}, {"Maus", "45", "1200"}, {"Tastatur", "30", "3500"}}; float y = 700; HPDF_Page_SetFontAndSize(page, HPDF_GetFont(pdf, "Courier", NULL), 12); for (int i = 0; i < 3; ++i) { HPDF_Page_BeginText(page); HPDF_Page_TextOut(page, 50, y, headers[i]); HPDF_Page_TextOut(page, 200, y, data[0][i]); HPDF_Page_TextOut(page, 350, y, data[1][i]); HPDF_Page_TextOut(page, 500, y, data[2][i]); HPDF_Page_EndText(page); y -= 20; }
HPDF_SaveToFile(pdf, "report_libharu.pdf"); HPDF_Free(pdf); std::cout << "PDF erstellt: report_libharu.pdf" << std::endl; return 0;}Vorteile: minimale Größe, keine Abhängigkeiten, schneller Start.
Nachteile: keine Unterstützung für Kyrillisch "out of the box" (manuelle Schriftkodierung erforderlich), komplexe Layouts sind schwierig zu erstellen.
2. PoDoFo – Objektmodell des Dokuments
PoDoFo ist eine moderne C++-Bibliothek mit Unterstützung für Unicode, Schrifteinbettung, Arbeit mit Bildern und Formularen. Sie bietet eine hochrangige API, die an HTML-Layout erinnert. Hervorragend geeignet für Berichte mit Kyrillisch, Tabellen und eingebetteten Schriftarten.
Installation
# Linuxsudo apt-get install libpodofo-dev
# Windows (vcpkg)vcpkg install podofoBeispiel: Bericht mit Kyrillisch und Tabelle
#include <podofo/podofo.h>#include <iostream>
int main() { using namespace PoDoFo;
PdfMemDocument document; PdfPage* page = document.CreatePage(PdfPage::CreateStandardPageSize(PdfPageSize::A4)); PdfPainter painter; painter.SetCanvas(page);
// Schriftart mit Kyrillisch-Unterstützung laden const char* fontPath = "/usr/share/fonts/truetype/dejavu/DejaVuSans.ttf"; PdfFont* font = document.CreateFont(fontPath); font->SetFontSize(16); painter.SetFont(font);
// Überschrift painter.DrawText("Bericht zum Projekt «Alpha»", 50, 750);
// Tabelle (manuelles Zeichnen von Linien) painter.SetStrokeWidth(1); painter.DrawLine(50, 720, 550, 720); Auch in der Bibliothek
Aufgabenplaner in Node.js: node-cron, node-schedule und Bull
Datenvalidierung in Go: Bibliotheken, Beispiele und Best Practices
Jest für TypeScript: Vollständiger Leitfaden zum Testen
SMS-Versand mit Java: Überblick über API-Bibliotheken (Twilio, Nexmo, SMS-Gateways)
OneOf für C# (.NET): Vollständige Anleitung mit Beispielen