ספריית 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 מספקת את הכלים שאתה צריך.
התחלה עם 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(())
}