کتابخانه رایگان C++ برای تبدیل صفحات PDF به تصویر و استخراج متن.
کتابخانه منبع باز C++ برای پردازش PDF که برای تبدیل صفحات PDF به تصاویر، استخراج متن، کار با PDFهای محافظتشده با رمز عبور و دسترسی به فرادادههای سند از طریق API C++ استفاده میشود.
PDFium-Render چیست؟
مدیریت و رندر کردن PDFها در یک برنامه C++ historically یک چالش پیچیده بوده است و اغلب شامل مجوزهای تجاری گرانقیمت یا ابزارهای منبع باز دردسرساز میشود. اکنون PDFium-Render وارد صحنه میشود؛ یک کتابخانه مدرن، فقط‑سرآیند (header‑only) C++ که موتور PDFium گوگل را به پروژههای شما با یک رابط کاربری شهودی و تمیز میآورد. PDFium‑render یک بایندینگ ایمن و ایدئوماتیک Rust برای PDFium است، همان موتور رندر PDF که Chrome گوگل و Mozilla Firefox را قدرت میدهد. این کتابخانه که توسط ajrcarey ایجاد و نگهداری میشود، ابزارهای قدرتمندی را برای رندر صفحات PDF به تصویر، استخراج متن، دستکاری ساختارهای PDF و دسترسی به متادیتای سند فراهم میکند — همه اینها در حالی که از تضمینهای ایمنی حافظه Rust بهره میبرد.
بر خلاف بسیاری از کتابخانههای PDF که فقط بر ایجاد یا تجزیهوتحلیل پایه تمرکز دارند، PDFium-Render در رندر کردن محتوای PDF با دقت پیکسلبهپیکسل برتری دارد و برای برنامههایی که نیاز به نمایش، تبدیل یا پردازش اسناد PDF موجود دارند، ایدهآل است. این کتابخانه از ویژگیهای پایه و پیشرفته متنوعی برای کار با اسناد PDF پشتیبانی میکند، از جمله رندر کردن فایلها و صفحات PDF، استخراج و تحلیل متن، کار با متادیتای سند، دسترسی و دستکاری اشیای صفحه، کار با PDFهای محافظتشده با رمز عبور، و موارد دیگر. یکی از بزرگترین قوتهای pdfium-render پشتیبانی چندسکویی آن است. این کتابخانه بهصورت یکپارچه بر روی ویندوز، macOS و لینوکس کار میکند و تفاوتهای پلتفرم‑خاص در باینریهای PDFium را انتزاع میکند. چه در حال ساخت یک نمایشگر سند باشید، چه در حال خودکارسازی جریانهای کاری پردازش PDF یا استخراج دادهها از PDFها، 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 کروم انتظار دارید، مدیریت میکند. در ادامه یک مثال ساده نشان میدهد که توسعهدهندگان نرمافزار چگونه میتوانند یک صفحه خاص را به فرمت تصویر 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
)?;
// Save as 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 محافظتشده با رمز عبور در Word با استفاده از 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(())
}