PDF-Generierung in C++: Überblick über Bibliotheken und Werkzeuge
Die Generierung von PDF-Dokumenten ist eine häufige Aufgabe in der Softwareentwicklung. Berichte, Rechnungen, Zertifikate, Dokumentationen – all dies erfordert ein zuverlässiges und flexibles Werkzeug zur PDF-Erstellung. Im C++-Ökosystem gibt es mehrere bewährte Lösungen, die jeweils ihre eigenen Stärken haben. In diesem Artikel betrachten wir die wichtigsten Bibliotheken und Werkzeuge, die Ihnen bei der Implementierung der PDF-Generierung in C++ helfen, und geben Codebeispiele für jede davon.
1. PoDoFo – Leistungsstarke Bibliothek für die Arbeit mit PDF
PoDoFo ist eine plattformübergreifende C++-Bibliothek zum Erstellen, Bearbeiten und Analysieren von PDF-Dokumenten. Sie bietet vollständige Kontrolle über die Dateistruktur und unterstützt Schriftarten, Bilder, Anmerkungen und Formulare.
Hauptfunktionen:
- Erstellung von PDFs von Grund auf und Bearbeitung vorhandener Dokumente
- Unterstützung für TrueType, Type1 und Standard-PDF-Schriftarten
- Einbettung von Bildern (PNG, JPEG, TIFF)
- Arbeit mit Tabellen und mehrseitigen Dokumenten
- Unterstützung für Komprimierung und Verschlüsselung
Codebeispiel: Erstellung eines einfachen PDFs mit Text
#include <podofo/podofo.h>using namespace PoDoFo;
int main() { PdfMemDocument document; PdfPage* page = document.CreatePage(PdfPage::CreateStandardPageSize(PdfPageSize::A4)); PdfPainter painter; painter.SetPage(page);
// Schriftart festlegen PdfFont* font = document.CreateFont("Arial"); painter.SetFont(font, 12.0);
// Text zeichnen painter.DrawText("Hallo, PDF-Welt!", 50, 700);
painter.FinishPage(); document.Save("output_podofo.pdf"); return 0;}2. libharu – Leichte und schnelle Bibliothek
libharu (oder HPDF) ist eine minimalistische C-Bibliothek zur PDF-Generierung. Obwohl sie in C geschrieben ist, funktioniert sie hervorragend mit C++ und erfordert keine komplexen Abhängigkeiten. libharu ist ideal für einfache Aufgaben, bei denen keine vollständige Unterstützung des PDF-Standards erforderlich ist.
Hauptfunktionen:
- Unterstützung für Text, Bilder, Linien und Rechtecke
- Arbeit mit kyrillischen Zeichen über Kodierungen
- Seitenkomprimierung
- Zlib-Lizenz (frei)
Codebeispiel: Erstellung eines PDFs mit einem Bild
#include <hpdf.h>#include <stdio.h>
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);
// Bild laden HPDF_Image image = HPDF_LoadJpegImageFromFile(pdf, "example.jpg"); HPDF_Page_DrawImage(page, image, 50, 500, 200, 150);
// Text HPDF_Page_BeginText(page); HPDF_Page_SetFontAndSize(page, HPDF_GetFont(pdf, "Helvetica", NULL), 14); HPDF_Page_TextOut(page, 50, 700, "Beispiel mit Bild"); HPDF_Page_EndText(page);
HPDF_SaveToFile(pdf, "output_libharu.pdf"); HPDF_Free(pdf); return 0;}3. wkhtmltopdf – Konvertierung von HTML in PDF
wkhtmltopdf ist keine Bibliothek im klassischen Sinne, sondern ein Kommandozeilenwerkzeug, das auf WebKit basiert. Es kann jedoch einfach aus C++-Code über system() oder popen() aufgerufen werden. Dies ist die ideale Wahl, wenn Sie eine HTML-Vorlage unter Beibehaltung von Stilen und Layout in ein PDF-Dokument umwandeln müssen.
Hauptfunktionen:
- Unterstützung für CSS, JavaScript, Tabellen und Bilder
- Einstellung von Rändern, Ausrichtung, Kopf- und Fußzeilen
- Hohe Rendering-Qualität
- Einfache Integration
Codebeispiel: Aufruf von wkhtmltopdf aus C++
#include <cstdlib>#include <string>
int main() { std::string input = "report.html"; std::string output = "report.pdf"; std::string Auch in der Bibliothek
ORM für JavaScript (Node.js): Vergleich von Sequelize, TypeORM, Prisma
CoreBluetooth für Swift: Vollständiges BLE-Guide mit Beispielen
ORM für Rust: Vergleich von Diesel, SeaORM, SQLx und Codebeispiele
WebSocket-Bibliothek Kotlin: Ktor WebSocket Client und Server