C++ में PDF रिपोर्ट जनरेशन: लाइब्रेरी का अवलोकन और व्यावहारिक उदाहरण
आधुनिक सॉफ्टवेयर विकास में, अक्सर प्रिंट करने योग्य दस्तावेज़, विश्लेषणात्मक रिपोर्ट या चालान बनाने की आवश्यकता होती है। C++ भाषा PDF के साथ काम करने के लिए शक्तिशाली साधन प्रदान करती है, हालांकि उपयुक्त लाइब्रेरी चुनना मुश्किल हो सकता है। इस लेख में, हम तीन मुख्य दृष्टिकोणों पर विचार करेंगे: सीधे PDF के साथ निम्न-स्तरीय कार्य (libharu), दस्तावेज़ की ऑब्जेक्ट मॉडल के साथ कार्य (PoDoFo), और HTML का PDF में रूपांतरण (wkhtmltopdf)। प्रत्येक दृष्टिकोण के लिए कोड उदाहरण दिए गए हैं और अनुप्रयोग के क्षेत्रों का उल्लेख किया गया है।
1. libharu लाइब्रेरी — न्यूनतम दृष्टिकोण
libharu एक हल्की लाइब्रेरी है जो शुद्ध C में है और C++ के साथ पूरी तरह से संगत है। इसे बाहरी निर्भरता की आवश्यकता नहीं है और यह प्रत्येक पृष्ठ, फ़ॉन्ट और रेखा को नियंत्रित करके PDF फ़ाइलें बनाने की अनुमति देता है। यह सरल रिपोर्टों के लिए आदर्श है जहाँ केवल टेक्स्ट, टेबल और बुनियादी ग्राफिक्स की आवश्यकता होती है।
स्थापना
# Linux (Debian/Ubuntu)sudo apt-get install libhpdf-dev
# Windows (vcpkg)vcpkg install libharuउदाहरण: टेबल के साथ रिपोर्ट बनाना
#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);
// शीर्षक HPDF_Page_BeginText(page); HPDF_Page_SetFontAndSize(page, HPDF_GetFont(pdf, "Helvetica", NULL), 18); HPDF_Page_TextOut(page, 50, 750, "Q1 के लिए बिक्री रिपोर्ट"); HPDF_Page_EndText(page);
// तालिका: सेल निर्देशांक const char* headers[] = {"उत्पाद", "मात्रा", "मूल्य, रु."}; const char* data[][3] = {{"लैपटॉप", "12", "85000"}, {"माउस", "45", "1200"}, {"कीबोर्ड", "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 बनाया गया: report_libharu.pdf" << std::endl; return 0;}लाभ: न्यूनतम आकार, कोई निर्भरता नहीं, त्वरित शुरुआत।
नुकसान: "बॉक्स से बाहर" सिरिलिक समर्थन नहीं है (फ़ॉन्ट मैन्युअल एन्कोडिंग की आवश्यकता है), जटिल लेआउट बनाना मुश्किल है।
2. PoDoFo — दस्तावेज़ की ऑब्जेक्ट मॉडल
PoDoFo एक आधुनिक C++ लाइब्रेरी है जिसमें Unicode समर्थन, फ़ॉन्ट एम्बेडिंग, इमेज और फॉर्म के साथ काम करने की सुविधा है। यह HTML लेआउट के समान एक उच्च-स्तरीय API प्रदान करता है। यह सिरिलिक, टेबल और एम्बेडेड फ़ॉन्ट वाली रिपोर्टों के लिए उत्कृष्ट है।
स्थापना
# Linuxsudo apt-get install libpodofo-dev
# Windows (vcpkg)vcpkg install podofoउदाहरण: सिरिलिक और टेबल के साथ रिपोर्ट
#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);
// सिरिलिक समर्थन वाला फ़ॉन्ट लोड करना const char* fontPath = "/usr/share/fonts/truetype/dejavu/DejaVuSans.ttf"; PdfFont* font = document.CreateFont(fontPath); font->SetFontSize(16); painter.SetFont(font);
// शीर्षक painter.DrawText("प्रोजेक्ट «अल्फा» रिपोर्ट", 50, 750);
// तालिका (मैन्युअल रेखा चित्रण) painter.SetStrokeWidth(1); painter.DrawLine(50, 720, 550, 720);