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

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++ 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 libharu


Beispiel: 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 podofo


Beispiel: 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);

Empfehlungen