PDF ফাইল পড়া ও লেখার জন্য ফ্রি C++ PDF লাইব্রেরি
একটি সহজ ওপেন-সোর্স C-ভিত্তিক PDF লাইব্রেরি যা PDF ডকুমেন্ট পড়া, লেখা এবং ম্যানিপুলেট করা সম্ভব করে। এটি ইমেজকে PDF-এ রূপান্তর, কন্টেন্ট এক্সট্র্যাকশন, স্ট্রিম-ভিত্তিক PDF রিডিং এবং আরও অনেক কিছু C অ্যাপের মধ্যে সমর্থন করে।
PDFio লাইব্রেরি কী?
PDFio হল একটি হালকা, ওপেন-সোর্স C লাইব্রেরি, যা বিশেষভাবে PDF ফাইল পড়া ও লেখা জন্য ডিজাইন করা হয়েছে, রেন্ডারিং বা ভিউয়িংয়ের জটিলতা ছাড়া। Michael R Sweet দ্বারা তৈরি এবং Apache License Version 2.0 এর অধীনে লাইসেন্সকৃত, এই লাইব্রেরি ডেভেলপারদেরকে PDF ম্যানিপুলেশনের জন্য একটি সরল পদ্ধতি প্রদান করে, যা ভিজ্যুয়াল প্রেজেন্টেশনের চেয়ে কন্টেন্ট তৈরি, এক্সট্র্যাকশন এবং ট্রান্সফরমেশনের উপর জোর দেয়। লাইব্রেরিটি ব্যবহার করা খুবই সহজ এবং PDF পেজ এক্সট্র্যাকশন ও মার্জিং, ডেটাবেস থেকে স্বয়ংক্রিয় রিপোর্ট, ওয়াটারমার্কিং ও স্ট্যাম্পিং, সার্টিফিকেট ও ডিপ্লোমা তৈরি, আর্কাইভের জন্য ফন্ট এমবেডিং, মেটাডেটা পরিবর্তন এবং আরও অনেক কাজের জন্য বিভিন্ন উপায় প্রদান করে।
PDFio মূল I/O অপারেশনগুলোর উপর মনোযোগ দেয়, যা PDF থেকে ডেটা বের করতে বা নতুন PDF তৈরি করতে প্রয়োজনীয় অ্যাপ্লিকেশনগুলোর জন্য উপযুক্ত, জটিল লাইব্রেরির অতিরিক্ত বোঝা ছাড়া। লাইব্রেরিটি শক্তিশালী রূপান্তর ফিচার সমর্থন করে এবং সফটওয়্যার ডেভেলপারদেরকে markdown থেকে PDF, ইমেজ থেকে PDF, HTML থেকে PDF এবং C অ্যাপ্লিকেশনের মধ্যে PDF-এ বারকোড জেনারেশন করতে সক্ষম করে। রেন্ডারিংয়ের অতিরিক্ত বোঝা ছাড়া মূল কার্যকারিতার উপর এর জোর সার্ভার-সাইড অ্যাপ্লিকেশন, কমান্ড-লাইন টুল এবং এমবেডেড সিস্টেমের জন্য আদর্শ, যেখানে ভিজ্যুয়াল ডিসপ্লে ছাড়া 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 লাইব্রেরি এই প্রক্রিয়াটিকে স্বজ্ঞাত করে তোলে ডেভেলপারদের পৃষ্ঠাগুলি এবং তাদের কন্টেন্ট স্ট্রিমগুলোর মাধ্যমে ইটারেট করার সুযোগ দিয়ে। লাইব্রেরিটি বিদ্যমান PDF থেকে দরকারী তথ্য বের করার পূর্ণ সমর্থন প্রদান করে, যেমন সাধারণ টেক্সট, মেটাডেটা, এমবেডেড ফন্ট, সংখ্যা, ছবি, আঙ্গুর, নাম এবং আরও অনেক কিছু। নিম্নলিখিত উদাহরণটি দেখায় কীভাবে একটি বিদ্যমান 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 দক্ষতার জন্য ডিজাইন করা হয়েছে। পড়ার সময় এটি একবারে পুরো ফাইলটি মেমরিতে লোড করে না। বরং এটি একটি পুল-পার্সিং পদ্ধতি ব্যবহার করে, যা আপনাকে ফাইলটি অংশে অংশে প্রক্রিয়া করতে দেয়। এটি খুব বড় PDF গুলি সিস্টেমের মেমরি শেষ না করে হ্যান্ডেল করার জন্য অত্যন্ত গুরুত্বপূর্ণ। প্রথম উদাহরণ থেকে pdfioPageParseContents ফাংশনটি এই স্ট্রিম-ভিত্তিক মডেলের একটি প্রধান উদাহরণ। এটি পৃষ্ঠার কন্টেন্ট স্ট্রিমকে ধারাবাহিকভাবে পড়ে, চলার সময় ইভেন্ট (যেমন আমাদের টেক্সট কলব্যাক) ইমিট করে।