1. Produk
  2.   PDF
  3.   C++
  4.   PDFium-Render
 
  

Perpustakaan C++ Gratis untuk Merender Halaman PDF ke Gambar & Mengekstrak Teks.

Perpustakaan Pemrosesan PDF C++ Sumber Terbuka untuk Merender Halaman PDF ke Gambar, Mengekstrak Teks, Bekerja dengan PDF yang Dilindungi Kata Sandi, dan Mengakses Metadata Dokumen melalui API C++.

Apa itu PDFium-Render?

Penanganan dan rendering PDF dalam aplikasi C++ secara historis merupakan tantangan yang kompleks, sering melibatkan lisensi komersial yang mahal atau alat open-source yang rumit. Perkenalkan PDFium-Render, sebuah perpustakaan pembungkus C++ modern yang hanya berupa header, yang membawa kekuatan mesin PDFium milik Google ke proyek Anda dengan antarmuka yang intuitif dan bersih. PDFium-render adalah binding Rust yang aman dan idiomatik untuk PDFium, mesin rendering PDF yang sama yang menggerakkan Google Chrome dan Mozilla Firefox. Dibuat dan dipelihara oleh ajrcarey, perpustakaan ini menyediakan pengembang dengan toolkit yang kuat untuk merender halaman PDF menjadi gambar, mengekstrak teks, memanipulasi struktur PDF, dan mengakses metadata dokumen—semua sambil memanfaatkan jaminan keamanan memori Rust.

Berbeda dengan banyak perpustakaan PDF yang hanya fokus pada pembuatan atau parsing dasar, PDFium-Render unggul dalam merender konten PDF dengan akurasi pixel-perfect, menjadikannya ideal untuk aplikasi yang perlu menampilkan, mengonversi, atau memproses dokumen PDF yang sudah ada. Ia mendukung berbagai fitur dasar dan lanjutan untuk bekerja dengan dokumen PDF, seperti merender file dan halaman PDF, ekstraksi dan analisis teks, bekerja dengan metadata dokumen, mengakses dan memanipulasi objek halaman, bekerja dengan PDF yang dilindungi kata sandi, dan masih banyak lagi. Salah satu kekuatan terbesar pdfium-render adalah dukungan lintas platformnya. Perpustakaan ini bekerja mulus di Windows, macOS, dan Linux, menyembunyikan perbedaan spesifik platform pada binary PDFium. Baik Anda membangun penampil dokumen, mengotomatisasi alur kerja pemrosesan PDF, atau mengekstrak data dari PDF, pdfium-render menyediakan alat yang Anda butuhkan.

Previous Next

Memulai dengan PDFium-Render

Cara yang disarankan untuk menginstal PDFium-Render adalah menggunakan CMake. Silakan gunakan perintah berikut untuk instalasi yang lancar.

Instal PDFium-Render via GitHub

 vcpkg install pdfium-render

Instal PDFium-Render via GitHub

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

Anda juga dapat menginstalnya secara manual; unduh file rilis terbaru langsung dari repositori GitHub.

Rendering PDF Berkualitas Tinggi via C++

Kekuatan utama perpustakaan sumber terbuka PDFium-Render terletak pada kemampuan rendering-nya. Ia dapat mengonversi halaman PDF menjadi gambar raster dengan kualitas luar biasa, mendukung berbagai format output termasuk PNG, JPEG, dan BMP. Mesin rendering menangani fitur PDF yang kompleks seperti transparansi, gradien, font tersemat, dan grafik vektor dengan akurasi yang sama seperti yang Anda harapkan dari penampil PDF Chrome. Berikut contoh sederhana yang menunjukkan bagaimana pengembang perangkat lunak dapat merender halaman tertentu ke format gambar PNG dalam aplikasi C++.

Bagaimana Merender Halaman PDF Tertentu ke Format PNG melalui 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(())
}

Ekstraksi Teks dan Analisis melalui Perpustakaan C++

Selain rendering, perpustakaan PDFium-Render menyediakan kemampuan ekstraksi teks yang komprehensif. API ekstraksi teks bersifat intuitif dan kuat. Pengembang perangkat lunak dapat mengekstrak teks dari halaman individual, mencari string tertentu, dan bahkan mengakses informasi posisi tingkat karakter hanya dengan beberapa baris kode — penting untuk mengimplementasikan fitur seperti pemilihan teks atau penyorotan. Contoh berikut menunjukkan bagaimana pengembang perangkat lunak dapat mengekstrak teks dari wilayah halaman PDF tertentu dalam aplikasi C++.

Cara Mengekstrak Teks dari Region Halaman PDF Tertentu melalui 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(())
}

 

Word dengan PDF yang Dilindungi Kata Sandi via C++

Keamanan sangat penting saat bekerja dengan dokumen. PDFium-Render menangani PDF yang dilindungi kata sandi dengan mulus, mendukung baik kata sandi pengguna maupun pemilik. Perpustakaan ini menangani otentikasi secara transparan, mengembalikan kesalahan yang sesuai jika kata sandi salah atau jika PDF memiliki pembatasan yang mencegah operasi tertentu. Berikut adalah contoh yang sangat berguna yang menunjukkan cara menangani dokumen PDF yang dilindungi kata sandi dalam aplikasi C++.

Cara Membuka dan Memuat Dokumen PDF yang Dilindungi Kata Sandi melalui 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(())
}

Bekerja dengan Metadata dan Properti PDF via C++

Memahami struktur PDF sangat penting untuk banyak aplikasi. Perpustakaan sumber terbuka PDFium-Render menyediakan akses lengkap ke metadata dokumen, jumlah halaman, dimensi, dan properti lainnya. Fungsionalitas ini sangat berharga untuk membangun sistem manajemen dokumen, validator PDF, atau aplikasi apa pun yang perlu mengkategorikan atau memproses PDF berdasarkan properti mereka. Contoh kode berikut menunjukkan bagaimana programmer dapat bekerja dengan metadata dokumen PDF dan mengakses berbagai properti dengan mudah.

Cara Bekerja dengan Metadata Dokumen PDF melalui 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(())
}
 Indonesia