Generierung von PDF-Berichten in C++: Die Bibliothek libHaru

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

Generierung von PDF-Berichten in C++ mit libHaru



In der modernen Programmierung entsteht häufig die Notwendigkeit, Dokumente im PDF-Format programmatisch zu erstellen. Dies können Berichte, Rechnungen, Lieferscheine, Analyseübersichten oder einfach das Speichern von Daten in einem universellen Format sein. In der Sprache C++ gibt es für diese Zwecke mehrere Bibliotheken, und eine der beliebtesten ist libHaru (auch bekannt als Haru PDF).



libHaru ist eine plattformübergreifende Open-Source-Bibliothek, die in C geschrieben ist und eine praktische C++-Schnittstelle bietet. Sie ermöglicht die Erstellung von PDF-Dokumenten ohne externe Abhängigkeiten (keine Installation von Ghostscript, LaTeX oder anderen Systemen erforderlich). Die Bibliothek unterstützt die Arbeit mit Text (einschließlich Unicode über Kodierungen), das Einbetten von Bildern (PNG, JPEG), das Zeichnen von Linien, Rechtecken, Kreisen sowie das Erstellen von Anmerkungen und Hyperlinks.



Installation und Einbindung



Die Quelltexte von libHaru können Sie aus dem offiziellen Repository auf GitHub herunterladen. Für die Kompilierung wird CMake verwendet. Beispiel für die Installation unter Linux:



git clone https://github.com/libharu/libharu.gitcd libharumkdir build && cd buildcmake ..makesudo make install


Nach der Installation binden Sie die Header-Datei und die Bibliothek in Ihr Projekt ein:



#include <hpdf.h>

// Linken: -lhpdf


Erstellen eines einfachen PDF-Dokuments



Betrachten wir ein einfaches Beispiel – die Erstellung eines Dokuments mit einer Seite und Text. Der Code in C++:



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

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

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

HPDF_Font font = HPDF_GetFont(pdf, "Helvetica", NULL); HPDF_Page_SetFontAndSize(page, font, 20);

HPDF_Page_BeginText(page); HPDF_Page_TextOut(page, 100, 400, "Hallo Welt! Dies ist ein PDF-Bericht in C++."); HPDF_Page_EndText(page);

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


Dieser Code erstellt ein A4-Blatt im Querformat, gibt Text in blauer Farbe aus (standardmäßig schwarz) und speichert das Ergebnis. Beachten Sie: libHaru unterstützt Kyrillisch in Schriftarten wie Helvetica nicht direkt – für russischen Text wird eine TrueType-Schriftart benötigt, wie unten gezeigt.



Arbeit mit russischem Text und Schriftarten



Um Kyrillisch korrekt darzustellen, muss eine Schriftart geladen werden, die Unicode unterstützt (z. B. Arial oder Times New Roman). Beispiel:



// Laden einer TrueType-Schriftart (Datei muss verfügbar sein)const char* font_path = "/usr/share/fonts/truetype/arial.ttf";HPDF_Font font = HPDF_GetFont(pdf, font_path, NULL);

// Oder Verwendung einer integrierten Schriftart mit UTF-8-KodierungHPDF_UseUTFEncodings(pdf);HPDF_Font font = HPDF_GetFont(pdf, "Helvetica", "UTF-8");


Die erste Methode ist zuverlässiger, erfordert jedoch das Vorhandensein der Schriftartdatei auf dem Zielsystem. Die zweite Methode funktioniert nur mit einigen integrierten Schriftarten und garantiert keine vollständige Unterstützung für Kyrillisch.



Zeichnen von Tabellen und grafischen Elementen



Für die Erstellung von Berichten müssen oft Tabellen gezeichnet werden. libHaru ermöglicht das Zeichnen von Linien und Rechtecken:



HPDF_Page_SetLineWidth(page, 1);HPDF_Page_SetRGBStroke(page, 0, 0, 0);

// Zeichnen eines Rechtecks (x, y, Breite, Höhe)HPDF_Page_Rectangle(page, 50, 500, 200, 30);HPDF_Page_Stroke(page);

// Zeichnen einer LinieHPDF_Page_MoveTo(page, 50, 500);HPDF_Page_LineTo(page, 250, 500);HPDF_Page_Stroke(page);


Sie können Linien und Text kombinieren, um eine vollständige Tabelle zu erstellen. Für komplexe Berichte mit dynamischen Daten ist es praktisch, eine Hilfsfunktion zu schreiben, die ein Array von Zeichenketten akzeptiert.

Empfehlungen