1. Các sản phẩm
  2.   PDF
  3.   C++
  4.   PDFium-Render
 
  

Thư viện C++ miễn phí để kết xuất các trang PDF thành hình ảnh và trích xuất văn bản.

Thư viện xử lý PDF mã nguồn mở bằng C++ cho việc kết xuất các trang PDF thành hình ảnh, trích xuất văn bản, làm việc với PDF được bảo mật bằng mật khẩu và truy cập siêu dữ liệu tài liệu qua API C++.

PDFium-Render là gì?

Việc xử lý và hiển thị PDF trong một ứng dụng C++ từ trước tới nay luôn là một thách thức phức tạp, thường đòi hỏi các giấy phép thương mại đắt tiền hoặc các công cụ mã nguồn mở cồng kềnh. Hãy gặp PDFium-Render, một thư viện bao bọc C++ hiện đại, chỉ gồm header, mang sức mạnh của engine PDFium của Google đến dự án của bạn với giao diện trực quan và sạch sẽ. PDFium-render là một binding Rust an toàn và idiomatic cho PDFium, cùng engine render PDF được sử dụng trong Google Chrome và Mozilla Firefox. Được tạo ra và duy trì bởi ajrcarey, thư viện này cung cấp cho các nhà phát triển một bộ công cụ mạnh mẽ để render các trang PDF thành hình ảnh, trích xuất văn bản, thao tác cấu trúc PDF và truy cập siêu dữ liệu tài liệu — tất cả đều tận dụng các cam kết an toàn bộ nhớ của Rust.

Không giống như nhiều thư viện PDF chỉ tập trung vào việc tạo hoặc phân tích cơ bản, PDFium-Render xuất sắc trong việc render nội dung PDF với độ chính xác pixel-perfect, làm cho nó lý tưởng cho các ứng dụng cần hiển thị, chuyển đổi hoặc xử lý tài liệu PDF hiện có. Nó hỗ trợ nhiều tính năng cơ bản và nâng cao để làm việc với tài liệu PDF, chẳng hạn như render tệp và trang PDF, trích xuất và phân tích văn bản, làm việc với siêu dữ liệu tài liệu, truy cập và thao tác các đối tượng trang, làm việc với PDF được bảo vệ bằng mật khẩu, và có thể còn nhiều hơn. Một trong những điểm mạnh lớn nhất của pdfium-render là hỗ trợ đa nền tảng. Thư viện hoạt động liền mạch trên Windows, macOS và Linux, trừu tượng hoá các khác biệt riêng của nền tảng trong các binary PDFium. Dù bạn đang xây dựng một trình xem tài liệu, tự động hoá quy trình xử lý PDF, hay trích xuất dữ liệu từ PDF, pdfium-render cung cấp các công cụ bạn cần.

Previous Next

Bắt đầu với PDFium-Render

Cách khuyến nghị để cài đặt PDFium-Render là sử dụng CMake. Vui lòng sử dụng lệnh sau để cài đặt suôn sẻ.

Cài đặt PDFium-Render qua GitHub

 vcpkg install pdfium-render

Cài đặt PDFium-Render qua GitHub

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

Bạn cũng có thể cài đặt thủ công; tải xuống các tệp phát hành mới nhất trực tiếp từ kho GitHub.

Kết xuất PDF chất lượng cao bằng C++

Thư viện mã nguồn mở PDFium-Render có điểm mạnh chính là khả năng render. Nó có thể chuyển đổi các trang PDF thành hình ảnh raster với chất lượng xuất sắc, hỗ trợ nhiều định dạng đầu ra bao gồm PNG, JPEG và BMP. Engine render xử lý các tính năng PDF phức tạp như độ trong suốt, gradient, phông chữ nhúng và đồ họa vector với độ chính xác như bạn mong đợi từ trình xem PDF của Chrome. Dưới đây là ví dụ đơn giản cho thấy các nhà phát triển phần mềm có thể render một trang cụ thể thành định dạng ảnh PNG trong các ứng dụng C++.

Cách render một trang PDF cụ thể thành định dạng PNG bằng 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(())
}

Trích xuất và phân tích văn bản qua Thư viện C++

Ngoài việc render, thư viện PDFium-Render cung cấp khả năng trích xuất văn bản toàn diện. API trích

Cách Trích Xuất Văn Bản Từ Các Vùng Trang PDF Cụ Thể Bằng 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 với PDF được bảo vệ bằng mật khẩu qua C++

Bảo mật là yếu tố tối quan trọng khi làm việc với tài liệu. PDFium-Render xử lý các tệp PDF được bảo vệ bằng mật khẩu một cách liền mạch, hỗ trợ cả mật khẩu người dùng và mật khẩu chủ sở hữu. Thư viện thực hiện xác thực một cách trong suốt, trả về các lỗi thích hợp nếu mật khẩu không đúng hoặc nếu PDF có các hạn chế ngăn cản một số thao tác. Dưới đây là một ví dụ rất hữu ích cho thấy cách xử lý các tài liệu PDF được bảo vệ bằng mật khẩu trong các ứng dụng C++.

Cách Mở và Tải Tài Liệu PDF Được Bảo Vệ Bằng Mật Khẩu Bằng 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(())
}

Làm việc với siêu dữ liệu và thuộc tính PDF qua C++

Hiểu cấu trúc của một tệp PDF là điều cần thiết cho nhiều ứng dụng. Thư viện mã nguồn mở PDFium-Render cung cấp quyền truy cập đầy đủ vào siêu dữ liệu tài liệu, số trang, kích thước và các thuộc tính khác. Chức năng này vô giá trong việc xây dựng hệ thống quản lý tài liệu, công cụ kiểm tra PDF, hoặc bất kỳ ứng dụng nào cần phân loại hoặc xử lý PDF dựa trên các thuộc tính của chúng. Ví dụ mã dưới đây minh họa cách các lập trình viên có thể làm việc với siêu dữ liệu của tài liệu PDF và truy cập các thuộc tính khác nhau một cách dễ dàng.

Cách Làm Việc Với Siêu Dữ Liệu Tài Liệu PDF Bằng 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(())
}
 Tiếng Việt