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