C++ में PDF रिपोर्ट जनरेशन: libharu लाइब्रेरी और अन्य

शुरुआती लोगों के लिए ऑनलाइन Python प्रशिक्षक

Python आसानी से सीखें बिना सिद्धांत के बोझ के। स्वचालित जांच के साथ व्यावहारिक कार्य हल करें और ब्राउज़र में सीधे कोड लिखें।

पाठ्यक्रम शुरू करें

libharu और PoDoFo के साथ C++ में PDF रिपोर्ट जनरेशन



C++ में आधुनिक डेवलपमेंट में अक्सर प्रोग्रामेटिक रूप से PDF फॉर्मेट में दस्तावेज़ बनाने की आवश्यकता होती है: सरल टेक्स्ट रिपोर्ट से लेकर टेबल, ग्राफ़ और इमेज वाले जटिल मल्टी-पेज दस्तावेज़ों तक। इस लेख में हम C++ में PDF जनरेशन के लिए दो लोकप्रिय लाइब्रेरीज़ — libharu और PoDoFo — पर विस्तार से चर्चा करेंगे, और उनके उपयोग के व्यावहारिक उदाहरण भी देंगे।



1. libharu लाइब्रेरी



libharu C में PDF फ़ाइलें बनाने के लिए एक हल्की, क्रॉस-प्लेटफ़ॉर्म लाइब्रेरी है। यह बाहरी लाइब्रेरीज़ (कंप्रेशन के लिए zlib को छोड़कर) पर निर्भर नहीं करती, Unicode, फ़ॉन्ट एम्बेडिंग, इमेज (JPEG/PNG) और बुनियादी वेक्टर प्रिमिटिव को सपोर्ट करती है। सरल रिपोर्ट, इनवॉइस, प्रमाणपत्र जनरेट करने के लिए आदर्श है।



इंस्टॉलेशन (Linux / Windows)

  • Linux (Ubuntu/Debian): sudo apt-get install libhpdf-dev
  • Windows (vcpkg): vcpkg install libharu
  • Windows (स्रोत से बिल्ड): GitHub से आर्काइव डाउनलोड करें, CMake के माध्यम से बिल्ड करें।


उदाहरण: टेक्स्ट और लाइन के साथ सरल PDF बनाना

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

int main() { HPDF_Doc pdf = HPDF_New(NULL, NULL); if (!pdf) { fprintf(stderr, "दस्तावेज़ निर्माण में त्रुटि"); return 1; }

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

// शीर्षक HPDF_Page_BeginText(page); HPDF_Page_SetFontAndSize(page, HPDF_GetFont(pdf, "Helvetica", NULL), 24); HPDF_Page_TextOut(page, 50, 750, "Q1 के लिए बिक्री रिपोर्ट"); HPDF_Page_EndText(page);

// शीर्षक के नीचे रेखा HPDF_Page_SetLineWidth(page, 1.5); HPDF_Page_MoveTo(page, 50, 735); HPDF_Page_LineTo(page, 545, 735); HPDF_Page_Stroke(page);

// सेव करें HPDF_SaveToFile(pdf, "report.pdf"); HPDF_Free(pdf); printf("PDF बनाया गया: report.pdf"); return 0;}


उदाहरण: तालिका जोड़ना (अनुकरण)

libharu में बिल्ट-इन टेबल मॉड्यूल नहीं है, लेकिन उन्हें मैन्युअल रूप से बनाया जा सकता है:

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. PoDoFo लाइब्रेरी



PoDoFo C++17 सपोर्ट के साथ एक अधिक आधुनिक और शक्तिशाली C++ लाइब्रेरी है। यह ऑब्जेक्ट-ओरिएंटेड API, फॉर्म, एनोटेशन, बुकमार्क, TrueType/OpenType फ़ॉन्ट एम्बेडिंग, साथ ही मौजूदा PDF को पढ़ने और संपादित करने की सुविधा प्रदान करती है। PoDoFo डायनामिक कंटेंट वाली जटिल रिपोर्ट के लिए बेहतर उपयुक्त है।



इंस्टॉलेशन

  • Linux: sudo apt-get install libpodofo-dev (संस्करण पुराना हो सकता है, स्रोत से बिल्ड करना बेहतर है)
  • Windows: vcpkg के माध्यम से: vcpkg install podofo
  • स्रोत से बिल्ड: CMake, zlib, libpng, freetype, fontconfig आवश्यक हैं।


उदाहरण: तालिका और इमेज के साथ PDF बनाना

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

// फ़ॉन्ट auto

अनुशंसाएँ