1. منتجات
  2.   بي دي إف
  3.   C++
  4.   PDFium-Render
 
  

مكتبة C++ مجانية لتحويل صفحات PDF إلى صورة واستخراج النص.

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

ما هو PDFium-Render؟

كان التعامل مع ملفات PDF وعرضها داخل تطبيق C++ تاريخيًا تحديًا معقدًا، غالبًا ما يتطلب تراخيص تجارية مكلفة أو أدوات مفتوحة المصدر مرهقة. هنا يأتي PDFium-Render، مكتبة غلاف حديثة للـ C++ تعتمد على ملفات الرأس فقط وتُجلب قوة محرك PDFium من جوجل إلى مشاريعك بواجهة بديهية ونظيفة. PDFium-render هو ربط آمن وإيديومي للغة Rust لمحرك PDFium، نفس محرك عرض PDF الذي يشغّل Google Chrome وMozilla Firefox. تم إنشاء هذه المكتبة وصيانتها بواسطة ajrcarey، وتوفر للمطورين مجموعة أدوات قوية لعرض صفحات PDF كصور، استخراج النص، تعديل هياكل PDF، والوصول إلى بيانات تعريف المستند—كل ذلك مع الاستفادة من ضمانات أمان الذاكرة في Rust.

على عكس العديد من مكتبات PDF التي تركز فقط على الإنشاء أو التحليل الأساسي، يتميز PDFium-Render بقدرته على عرض محتوى PDF بدقة بكسل مثالية، مما يجعله مثالياً للتطبيقات التي تحتاج إلى عرض أو تحويل أو معالجة مستندات PDF الحالية. يدعم مجموعة متنوعة من الميزات الأساسية والمتقدمة للعمل مع مستندات PDF، مثل عرض ملفات PDF والصفحات، استخراج النص وتحليله، العمل مع بيانات تعريف المستند، الوصول إلى كائنات الصفحة وتعديلها، التعامل مع ملفات PDF المحمية بكلمة مرور، وربما المزيد. إحدى أقوى نقاط القوة في pdfium-render هي دعمه المتعدد المنصات. تعمل المكتبة بسلاسة على Windows و macOS و Linux، مع تجريد الاختلافات الخاصة بالمنصة في ثنائيات PDFium. سواء كنت تبني عارض مستندات، أو تقوم بأتمتة سير عمل معالجة PDF، أو تستخرج البيانات من ملفات PDF، فإن pdfium-render يوفر الأدوات التي تحتاجها.

Previous Next

البدء مع PDFium-Render

الطريقة الموصى بها لتثبيت PDFium-Render هي استخدام CMake. يرجى استخدام الأمر التالي لتثبيت سلس.

تثبيت PDFium-Render عبر GitHub

 vcpkg install pdfium-render

تثبيت PDFium-Render عبر GitHub

 Git clone https://github.com/ajrcarey/pdfium-render.git 

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

عرض PDF عالي الدقة باستخدام C++

تكمن القوة الأساسية لمكتبة PDFium-Render المفتوحة المصدر في قدراتها على العرض. يمكنها تحويل صفحات PDF إلى صور نقطية بجودة استثنائية، وتدعم صيغ إخراج متعددة بما في ذلك PNG و JPEG و BMP. يتعامل محرك العرض مع ميزات PDF المعقدة مثل الشفافية، والتدرجات اللونية، والخطوط المدمجة، والرسومات المتجهة بنفس الدقة التي تتوقعها من عارض PDF في Chrome. إليك مثال بسيط يوضح كيف يمكن للمطورين تحويل صفحة محددة إلى صيغة صورة PNG داخل تطبيقات C++.

كيف تقوم بعرض صفحة PDF محددة بصيغة PNG باستخدام C++؟

use pdfium_render::prelude::*;

fn render_pdf_page() -> Result<(), PdfiumError> {
    // Initialize PDFium library
    let pdfium = Pdfium::new(
        Pdfium::bind_to_library(Pdfium::pdfium_platform_library_name_at_path("./"))
            .or_else(|_| Pdfium::bind_to_system_library())?
    );
    
    // Load a PDF document
    let document = pdfium.load_pdf_from_file("sample.pdf", None)?;
    
    // Get the first page
    let page = document.pages().get(0)?;
    
    // Render the page to a bitmap at 300 DPI
    let bitmap = page.render_with_config(
        &PdfRenderConfig::new()
            .set_target_width(2480) // 300 DPI for 8.27 inches
            .set_target_height(3508) // 300 DPI for 11.69 inches
    )?;
    
    //  

كيف تستخرج النص من مناطق محددة في صفحة PDF باستخدام واجهة برمجة التطبيقات C++؟

use pdfium_render::prelude::*;

fn extract_text_from_page() -> Result<(), PdfiumError> {
    let pdfium = Pdfium::new(
        Pdfium::bind_to_library(Pdfium::pdfium_platform_library_name_at_path("./"))
            .or_else(|_| Pdfium::bind_to_system_library())?
    );
    
    let document = pdfium.load_pdf_from_file("document.pdf", None)?;
    let page = document.pages().get(0)?;
    
    // Extract all text from the page
    let text = page.text()?;
    let all_text = text.all();
    println!("Page text: {}", all_text);
    
    // Search for specific text
    let search_results = text.search("important", true, false)?;
    for result in search_results {
        println!("Found at index: {}", result.start_index());
    }
    
    // Get text in a specific rectangular area
    let rect = PdfRect::new(100.0, 100.0, 300.0, 200.0);
    let bounded_text = text.bounded(rect)?;
    println!("Text in region: {}", bounded_text);
    
    Ok(())
}

 

Word مع PDF محمي بكلمة مرور باستخدام C++

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

كيف تفتح وتحمّل مستندات PDF المحمية بكلمة مرور باستخدام واجهة برمجة التطبيقات C++؟

fn open_encrypted_pdf() -> Result<(), PdfiumError> {
    let pdfium = Pdfium::new(
        Pdfium::bind_to_library(Pdfium::pdfium_platform_library_name_at_path("./"))
            .or_else(|_| Pdfium::bind_to_system_library())?
    );
    
    // Attempt to load with password
    let document = pdfium.load_pdf_from_file(
        "confidential.pdf", 
        Some("secret_password")
    )?;
    
    println!("Successfully opened encrypted PDF");
    println!("Pages: {}", document.pages().len());
    
    Ok(())
}

العمل على بيانات PDF الوصفية والخصائص باستخدام C++

فهم بنية ملف PDF أمر أساسي للعديد من التطبيقات. توفر مكتبة PDFium-Render المفتوحة المصدر وصولًا كاملاً إلى بيانات تعريف المستند، عدد الصفحات، الأبعاد، وغيرها من الخصائص. هذه الوظيفة لا تقدر بثمن في بناء أنظمة إدارة المستندات، مدققي صحة PDF، أو أي تطبيق يحتاج إلى تصنيف أو معالجة ملفات PDF بناءً على خصائصها. يوضح مثال الشيفرة التالي كيف يمكن للمبرمجين العمل مع بيانات تعريف مستندات PDF والوصول إلى مختلف الخصائص بسهولة.

كيف تتعامل مع بيانات تعريف مستندات PDF باستخدام واجهة برمجة التطبيقات C++؟

fn inspect_document_metadata() -> Result<(), PdfiumError> {
    let pdfium = Pdfium::new(
        Pdfium::bind_to_library(Pdfium::pdfium_platform_library_name_at_path("./"))
            .or_else(|_| Pdfium::bind_to_system_library())?
    );
    
    let document = pdfium.load_pdf_from_file("report.pdf", None)?;
    
    // Access document metadata
    let metadata = document.metadata();
    println!("Title: {}", metadata.title().unwrap_or("Untitled"));
    println!("Author: {}", metadata.author().unwrap_or("Unknown"));
    println!("Creator: {}", metadata.creator().unwrap_or("Unknown"));
    println!("Producer: {}", metadata.producer().unwrap_or("Unknown"));
    
    // Get page count
    let page_count = document.pages().len();
    println!("Total pages: {}", page_count);
    
    // Inspect individual page properties
    for (index, page) in document.pages().iter().enumerate() {
        let width = page.width();
        let height = page.height();
        println!("Page {}: {}x{} points", index + 1, width.value, height.value);
    }
    
    Ok(())
}
 عربي