مكتبة PDF مجانية بلغة C++ للقراءة والكتابة لملفات PDF

مكتبة PDF بسيطة ومفتوحة المصدر مبنية على لغة C تسمح بقراءة وكتابة وتعديل مستندات PDF. تدعم تحويل الصور إلى PDF، استخراج المحتويات، القراءة المتدفقة لملفات PDF والمزيد داخل تطبيقات C.

ما هي مكتبة PDFio؟

PDFio هي مكتبة C خفيفة الوزن ومفتوحة المصدر صممت خصيصًا لقراءة وكتابة ملفات PDF دون تعقيد العرض أو المشاهدة. تم إنشاؤها بواسطة Michael R Sweet وترخيصها تحت رخصة Apache الإصدار 2.0، توفر هذه المكتبة للمطورين نهجًا بسيطًا لمعالجة PDF يركز على إنشاء المحتوى واستخراجه وتحويله بدلاً من العرض البصري. المكتبة سهلة التعامل للغاية وتوفر عدة طرق لمعالجة ملفات PDF مثل استخراج ودمج صفحات PDF، تقارير آلية من قواعد البيانات، إضافة علامات مائية وختم، إنشاء الشهادات والديبلومات، تضمين الخطوط للأرشفة، تعديل البيانات الوصفية والعديد غير ذلك.

تركّز PDFio على عمليات الإدخال والإخراج الأساسية، مما يجعلها مثالية للتطبيقات التي تحتاج إلى استخراج البيانات من ملفات PDF أو إنشاء ملفات جديدة دون العبء الإضافي للمكتبات الأكثر تعقيدًا. تدعم المكتبة ميزات تحويل قوية وتمكّن مطوري البرمجيات من تحويل markdown إلى PDF، والصورة إلى PDF، وHTML إلى PDF بالإضافة إلى توليد الباركود داخل ملفات PDF في تطبيقات C. تركيزها على الوظائف الأساسية دون عبء العرض يجعلها مثالية لتطبيقات الخادم، وأدوات سطر الأوامر، والأنظمة المدمجة حيث يلزم إنشاء أو معالجة PDF دون عرض بصري. سواء كنت تبني أنظمة إدارة مستندات، أو تنشئ مولدات تقارير آلية، أو تطوّر أدوات لتحليل PDF، فإن PDFio توفر الوظائف الأساسية اللازمة للتعامل الاحترافي مع PDF في تطبيقات C.

Previous Next

البدء مع PDFio

الطريقة الموصى بها لتثبيت PDFio هي باستخدام NuGet. يرجى استخدام الأمر التالي لتثبيت سلس.

تثبيت PDFio عبر NuGet

Install-Package pdfio_native 

تثبيت PDFio عبر GitHub

 git clone  https://github.com/michaelrsweet/pdfio.git

يمكنك أيضًا تثبيتها يدويًا؛ قم بتنزيل أحدث ملفات الإصدار مباشرةً من مستودع GitHub.

إنشاء ملف PDF من الصفر باستخدام C

لقد تضمّن مكتبة PDFio المفتوحة المصدر دعمًا كاملاً لإنشاء مستند PDF جديد من الصفر داخل تطبيقات C. إنشاء مستند PDF جديد سهل بنفس القدر، ومع بضع أسطر فقط من كود C يمكن لمطوري البرمجيات إضافة صفحات جديدة، ورسم نصوص وأشكال بسيطة، وإضافة صور (بتنسيقات JPEG و PNG)، وتطبيق الألوان والتحويلات، وبناء جداول وتخطيطات

كيفية تحويل صورة واحدة إلى PDF عبر مكتبة C؟

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

قراءة PDF واستخراج النص عبر مكتبة C

إحدى المهام الأكثر شيوعًا هي قراءة واستخراج النص من ملف PDF. تجعل مكتبة PDFio المفتوحة المصدر هذه العملية بديهية من خلال السماح للمطورين بالتنقل عبر الصفحات وتدفقات محتواها. توفر المكتبة دعمًا كاملاً لاستخراج المعلومات المفيدة من ملفات PDF الموجودة، مثل النص البسيط، والبيانات الوصفية، والخطوط المدمجة، والأرقام، والصور، والعنب، والأسماء والمزيد. يوضح المثال التالي كيفية فتح ملف PDF موجود واستخراج المعلومات الأساسية منه باستخدام مكتبة C.

كيفية استخراج نص بسيط من ملف PDF عبر مكتبة C؟

#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 من المثال الأول مثالًا رئيسيًا على هذا النموذج القائم على التدفق. فهي تقرأ تدفق محتوى الصفحة بشكل متسلسل، وتُصدر الأحداث (مثل رد النداء النصي الخاص بنا) أثناء العملية.

 عربي