PDF फ़ाइलों को पढ़ने और लिखने के लिए मुफ्त C++ PDF लाइब्रेरी
एक सरल ओपन सोर्स C-आधारित PDF लाइब्रेरी जो PDF दस्तावेज़ों को पढ़ने, लिखने और संशोधित करने की अनुमति देती है। यह इमेज को PDF में रूपांतरण, सामग्री निकालना, स्ट्रीम-आधारित PDF पढ़ना और अधिक का समर्थन करती है, C एप्लिकेशनों के भीतर।
PDFio लाइब्रेरी क्या है?
PDFio एक हल्का, ओपन-सोर्स C लाइब्रेरी है जो विशेष रूप से PDF फ़ाइलों को पढ़ने और लिखने के लिए डिज़ाइन की गई है, बिना रेंडरिंग या व्यूइंग की जटिलता के। माइकल आर स्वीट द्वारा निर्मित और Apache License Version 2.0 के तहत लाइसेंस प्राप्त, यह लाइब्रेरी डेवलपर्स को PDF हेरफेर के लिए एक सीधा दृष्टिकोण प्रदान करती है जो दृश्य प्रस्तुति के बजाय कंटेंट निर्माण, निष्कर्षण और रूपांतरण पर केंद्रित है। यह लाइब्रेरी बहुत आसान है और PDF पेज निष्कर्षण और मर्जिंग, डेटाबेस से स्वचालित रिपोर्ट, वॉटरमार्किंग और स्टैम्पिंग, प्रमाणपत्र और डिप्लोमा निर्माण, अभिलेखीय फ़ॉन्ट एम्बेडिंग, मेटाडेटा संशोधन और कई अन्य कार्यों के लिए कई तरीके प्रदान करती है।
PDFio आवश्यक I/O संचालन पर केंद्रित है, जिससे यह उन अनुप्रयोगों के लिए उपयुक्त बनता है जिन्हें PDFs से डेटा निकालने या नए PDFs बनाने की आवश्यकता होती है, बिना अधिक जटिल लाइब्रेरीज़ के ओवरहेड के। यह लाइब्रेरी शक्तिशाली रूपांतरण सुविधाएँ समर्थन करती है और सॉफ़्टवेयर डेवलपर्स को मार्कडाउन को PDF, इमेज को PDF, HTML को PDF में बदलने, साथ ही C अनुप्रयोगों के भीतर PDFs में बारकोड जनरेशन करने की अनुमति देती है। रेंडरिंग के ओवरहेड के बिना कोर कार्यक्षमता पर इसका फोकस इसे सर्वर‑साइड अनुप्रयोगों, कमांड‑लाइन टूल्स, और एम्बेडेड सिस्टम्स के लिए आदर्श बनाता है जहाँ दृश्य प्रदर्शन के बिना PDF निर्माण या प्रोसेसिंग आवश्यक है। चाहे आप दस्तावेज़ प्रबंधन प्रणाली बना रहे हों, स्वचालित रिपोर्ट जनरेटर बना रहे हों, या PDF विश्लेषण के लिए टूल विकसित कर रहे हों, PDFio पेशेवर C अनुप्रयोगों में PDF हैंडलिंग के लिए आवश्यक कार्यक्षमता प्रदान करता है।
PDFio के साथ शुरुआत
PDFio को स्थापित करने का अनुशंसित तरीका NuGet का उपयोग करना है। कृपया सुगम स्थापना के लिए निम्नलिखित कमांड का उपयोग करें।
NuGet के माध्यम से PDFio स्थापित करें
Install-Package pdfio_native GitHub के माध्यम से PDFio स्थापित करें
git clone https://github.com/michaelrsweet/pdfio.git
आप इसे मैन्युअल रूप से भी स्थापित कर सकते हैं; नवीनतम रिलीज़ फ़ाइलें सीधे GitHub रिपॉज़िटरी से डाउनलोड करें।
C के माध्यम से शून्य से PDF बनाना
ओपन सोर्स PDFio लाइब्रेरी ने C अनुप्रयोगों के भीतर शून्य से नया PDF दस्तावेज़ बनाने के लिए पूर्ण समर्थन शामिल किया है। नया PDF दस्तावेज़ बनाना भी उतना ही सरल है और केवल कुछ ही पंक्तियों के C कोड के साथ सॉफ़्टवेयर डेवलपर नई पृष्ठें जोड़ सकते हैं, टेक्स्ट और सरल आकार बना सकते हैं, छवियां (JPEG, PNG फ़ॉर्मेट) जोड़ सकते हैं, रंग और रूपांतरण लागू कर सकते हैं, तालिकाएँ और संरचित लेआउट बना सकते हैं और बहुत कुछ। यहाँ एक सरल उदाहरण है जो दिखाता है कि कैसे C कोड का उपयोग करके कस्टम पेज साइज और सामग्री के साथ नया PDF दस्तावेज़ बनाया जा सकता है।
C लाइब्रेरी के माध्यम से कस्टम पेज साइज और सामग्री के साथ सरल PDF दस्तावेज़ कैसे बनाएं?
#include
#include
int main(void) {
pdfio_file_t *pdf;
pdfio_dict_t *dict;
pdfio_stream_t *page;
pdfio_obj_t *font;
pdfio_rect_t media_box = {0.0, 0.0, 612.0, 792.0}; // US Letter
pdfio_rect_t crop_box = {36.0, 36.0, 576.0, 756.0}; // 0.5\" margins
// Create PDF file
pdf = pdfioFileCreate("output.pdf", "2.0",
&media_box, &crop_box,
NULL, NULL);
if (!pdf) {
fprintf(stderr, "Unable to create PDF\n");
return 1;
}
// Create a font object (Helvetica)
font = pdfioFileCreateFontObjFromBase(pdf, "Helvetica");
// Create page dictionary
dict = pdfioDictCreate(pdf);
pdfioPageDictAddFont(dict, "F1", font);
// Create the page
page = pdfioFileCreatePage(pdf, dict);
// Draw text
pdfioContentSetFillColorDeviceGray(page, 0.0); // Black color
pdfioContentTextBegin(page);
pdfioContentSetTextFont(page, "F1", 24.0);
pdfioContentTextMoveTo(page, 100.0, 700.0);
pdfioContentTextShow(page, false, "Hello, PDFio!");
pdfioContentTextEnd(page);
// Close page and file
pdfioStreamClose(page);
pdfioFileClose(pdf);
printf("PDF created successfully!\n");
return 0;
}
C लाइब्रेरी के माध्यम से इमेज को PDF में रूपांतरण
छवियों को PDF फ़ॉर्मेट में बदलना सबसे सामान्य दस्तावेज़ प्रोसेसिंग कार्यों में से एक है। PDFio लाइब्रेरी इसे सरल बनाती है जबकि पेज साइजिंग, इमेज प्लेसमेंट, स्केलिंग और मेटाडेटा पर सूक्ष्म नियंत्रण प्रदान करती है। सॉफ़्टवेयर डेवलपर एक पूर्ण इमेज-टू-PDF कनवर्टर बना सकते हैं जो एकल छवियों और बैच रूपांतरण दोनों को संभालता है। निम्नलिखित उदाहरण दर्शाता है कि डेवलपर कैसे एक छवि को C एप्लिकेशन में PDF में बदल सकते हैं।
C लाइब्रेरी के माध्यम से एकल छवि को PDF में कैसे बदलें?
#include
#include
#include
bool create_pdf_from_image(const char *image_path,
const char *pdf_path,
const char *title) {
pdfio_file_t *pdf;
pdfio_obj_t *image;
pdfio_dict_t *page_dict;
pdfio_stream_t *page_stream;
pdfio_rect_t media_box;
double img_width, img_height;
double page_width, page_height;
double scale_x, scale_y, scale;
double x, y;
// Create the image object first to get dimensions
// We'll use a temporary PDF for this
pdfio_rect_t temp_box = {0, 0, 612, 792};
pdf = pdfioFileCreate(pdf_path, "2.0", &temp_box, NULL, NULL, NULL);
if (!pdf) {
fprintf(stderr, "Error: Cannot create PDF file\n");
return false;
}
// Set PDF metadata
if (title) {
pdfioFileSetTitle(pdf, title);
}
pdfioFileSetAuthor(pdf, "PDFio Image Converter");
pdfioFileSetCreator(pdf, "image2pdf v1.0");
// Load and embed the image
image = pdfioFileCreateImageObjFromFile(pdf, image_path, true);
if (!image) {
fprintf(stderr, "Error: Cannot load image file: %s\n", image_path);
pdfioFileClose(pdf);
return false;
}
// Get image dimensions in pixels
img_width = pdfioImageGetWidth(image);
img_height = pdfioImageGetHeight(image);
printf("Image dimensions: %.0f x %.0f pixels\n", img_width, img_height);
// Create page sized to image (assuming 72 DPI)
// This creates a PDF page that exactly fits the image
page_width = img_width;
page_height = img_height;
media_box.x1 = 0.0;
media_box.y1 = 0.0;
media_box.x2 = page_width;
media_box.y2 = page_height;
// Create page dictionary and add image resource
page_dict = pdfioDictCreate(pdf);
pdfioDictSetRect(page_dict, "MediaBox", &media_box);
pdfioPageDictAddImage(page_dict, "IM1", image);
// Create the page
page_stream = pdfioFileCreatePage(pdf, page_dict);
// Draw image at full size (no scaling)
pdfioContentDrawImage(page_stream, "IM1", 0, 0,
page_width, page_height);
// Close and save
pdfioStreamClose(page_stream);
pdfioFileClose(pdf);
printf("Successfully created PDF: %s\n", pdf_path);
return true;
}
int main(int argc, char *argv[]) {
if (argc < 3) {
fprintf(stderr, "Usage: %s [title]\n",
argv[0]);
return 1;
}
const char *title = (argc > 3) ? argv[3] : NULL;
if (!create_pdf_from_image(argv[1], argv[2], title)) {
return 1;
}
return 0;
}
C लाइब्रेरी के माध्यम से PDF पढ़ें और टेक्स्ट निकालें
सबसे सामान्य कार्यों में से एक PDF फ़ाइल से पाठ पढ़ना और निकालना है। ओपन सोर्स PDFio लाइब्रेरी इस प्रक्रिया को सहज बनाती है, जिससे डेवलपर्स पृष्ठों और उनके कंटेंट स्ट्रीम्स के माध्यम से इटररेट कर सकते हैं। यह लाइब्रेरी मौजूदा PDFs से उपयोगी जानकारी निकालने के लिए पूर्ण समर्थन प्रदान करती है, जैसे साधारण पाठ, मेटाडेटा, एम्बेडेड फ़ॉन्ट्स, संख्याएँ, छवियाँ, अंगूर, नाम और अधिक। निम्नलिखित उदाहरण दर्शाता है कि कैसे एक मौजूदा PDF को खोलें और C लाइब्रेरी का उपयोग करके उससे बुनियादी जानकारी निकालें।
C लाइब्रेरी के माध्यम से PDF फ़ाइल से सरल पाठ कैसे निकालें?
#include
#include
#include
// Callback function to handle text objects
static bool text_cb(const pdfio_text_t *text, void *data) {
// Simply print the text to stdout
printf("%s", text->utf8);
return true;
}
int main(void) {
pdfio_file_t *pdf;
pdfio_page_t *page;
// Open the PDF file for reading
pdf = pdfioFileOpen("example.pdf", NULL, NULL, NULL);
if (!pdf) {
fprintf(stderr, "Failed to open example.pdf\n");
return 1;
}
printf("PDF has %d pages.\n", pdfioFileGetNumPages(pdf));
// Read the first page (pages are 1-indexed)
page = pdfioFileGetPage(pdf, 1);
if (!page) {
fprintf(stderr, "Failed to read page 1\n");
pdfioFileClose(pdf);
return 1;
}
// Parse the page content and call our text_cb for each text object
if (!pdfioPageParseContents(page, text_cb, NULL, NULL, NULL)) {
fprintf(stderr, "Failed to parse page contents\n");
}
// Clean up
pdfioFileClose(pdf);
return 0;
}
कुशल, स्ट्रीम-आधारित पढ़ना
PDFio को दक्षता के लिए डिज़ाइन किया गया है। पढ़ते समय, यह पूरी फ़ाइल को एक साथ मेमोरी में लोड नहीं करता। इसके बजाय, यह पुल-पार्सिंग दृष्टिकोण का उपयोग करता है, जिससे आप फ़ाइल को भागों में प्रोसेस कर सकते हैं। यह बहुत बड़े PDFs को सिस्टम मेमोरी समाप्त किए बिना संभालने के लिए महत्वपूर्ण है। पहले उदाहरण की pdfioPageParseContents फ़ंक्शन इस स्ट्रीम-आधारित मॉडल का प्रमुख उदाहरण है। यह पृष्ठ की कंटेंट स्ट्रीम को क्रमिक रूप से पढ़ता है, और जैसे ही आगे बढ़ता है, इवेंट्स (जैसे हमारा टेक्स्ट कॉलबैक) उत्पन्न करता है।