1. מוצרים
  2.   PDF
  3.   C++
  4.   PDFium-Render
 
  

ספריית C++ חינמית להמרת דפי PDF לתמונה ולחילוץ טקסט.

ספריית קוד פתוח ב‑C++ לעיבוד PDF להמרת דפי PDF לתמונות, חילוץ טקסט, עבודה עם קבצי PDF מוגנים בסיסמה, וגישה למטא‑נתוני המסמך באמצעות API ב‑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. בין אם אתה בונה מציג מסמכים, מא automatizes תהליכי עיבוד PDF, או מחלץ נתונים מ‑PDFs, 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> {
    // אתחול ספריית PDFium
    let pdfium = Pdfium::new(
        Pdfium::bind_to_library(Pdfium::pdfium_platform_library_name_at_path("./"))
            .or_else(|_| Pdfium::bind_to_system_library())?
    );
    
    // טעינת מסמך PDF
    let document = pdfium.load_pdf_from_file("sample.pdf", None)?;
    
    // קבלת הדף הראשון
    let page = document.pages().get(0)?;
    
    // רינדור הדף למפת סיביות ב‑300 DPI
    let bitmap = page.render_with_config(
        &PdfRenderConfig::new()
            .set_target_width(2480) // 300 DPI עבור 8.27 אינצ'ים
            .set_target_height(3508) // 300 DPI עבור 11.69 אינצ'ים
    )?;
    
    // שמירה כ‑PNG
    bitmap.as_image().as_rgba8().unwrap()
        .save("output.png")?;
    
    Ok(())
}

חילוץ טקסט וניתוח באמצעות ספריית C++

מעבר לרינדור, ספריית PDFium-Render מספקת יכולות מקיפות לחילוץ טקסט. ממשק ה‑API לחילוץ טקסט אינטואיטיבי ועוצמתי. מפתחים יכולים לחלץ טקסט מדפים בודדים, לחפש מחרוזות ספציפיות, ואף לגשת למידע על מיקום ברמת תו עם רק כמה שורות קוד — קריטי ליישום תכונות כגון בחירת טקסט או הדגשה. הדוגמה הבאה מראה כיצד מפתחים יכולים לחלץ טקסט מאזורי דף PDF ספציפיים בתוך יישומי C++.

איך לחלץ טקסט מאזורי דפים ספציפיים של PDF באמצעות API של 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(())
}

 

עבודה עם PDF מוגן בסיסמה באמצעות C++

הביטחון הוא קריטי בעת עבודה עם מסמכים. PDFium-Render מטפל בקבצי PDF מוגנים בסיסמה בצורה חלקה, תומך גם בסיסמאות משתמש וגם בסיסמאות בעלים. הספרייה מטפלת באימות בצורה שקופה, מחזירה שגיאות מתאימות אם הסיסמה שגויה או אם ל‑PDF יש מגבלות שמונעות פעולות מסוימות. הנה דוגמה מאוד שימושית שמראה כיצד להתמודד עם מסמכי PDF מוגנים בסיסמה בתוך יישומי C++.

איך לפתוח ולטעון מסמכי PDF מוגנים בסיסמה באמצעות API של 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 באמצעות API של 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(())
}
 עִברִית