PDF 페이지를 이미지로 변환하고 텍스트를 추출하는 무료 C++ 라이브러리.
PDF 페이지를 이미지로 렌더링하고, 텍스트를 추출하며, 암호 보호된 PDF를 다루고, C++ API를 통해 문서 메타데이터에 접근할 수 있는 오픈 소스 C++ PDF 처리 라이브러리.
PDFium-Render란 무엇인가요?
C++ 애플리케이션 내에서 PDF를 처리하고 렌더링하는 것은 역사적으로 복잡한 과제였으며, 종종 비싼 상용 라이선스나 번거로운 오픈소스 도구가 필요했습니다. 이제 PDFium-Render가 등장합니다. 이 현대적인 헤더 전용 C++ 래퍼 라이브러리는 직관적이고 깔끔한 인터페이스로 Google의 PDFium 엔진의 힘을 프로젝트에 가져다줍니다. PDFium-render는 Google Chrome과 Mozilla Firefox에 사용되는 동일한 PDF 렌더링 엔진인 PDFium에 대한 안전하고 관용적인 Rust 바인딩입니다. ajrcarey가 만들고 유지 관리하는 이 라이브러리는 개발자에게 PDF 페이지를 이미지로 렌더링하고, 텍스트를 추출하며, PDF 구조를 조작하고, 문서 메타데이터에 접근할 수 있는 강력한 툴킷을 제공하며, Rust의 메모리 안전 보장을 활용합니다.
많은 PDF 라이브러리가 생성이나 기본 파싱에만 초점을 맞추는 것과 달리, PDFium-Render는 픽셀 단위의 정확한 렌더링을 제공하여 기존 PDF 문서를 표시, 변환 또는 처리해야 하는 애플리케이션에 이상적입니다. PDF 파일 및 페이지 렌더링, 텍스트 추출 및 분석, 문서 메타데이터 작업, 페이지 객체 접근 및 조작, 비밀번호로 보호된 PDF 작업 등 기본 및 고급 기능을 다양하게 지원합니다. PDFium-Render의 가장 큰 강점 중 하나는 크로스 플랫폼 지원입니다. 이 라이브러리는 Windows, macOS, Linux에서 원활하게 작동하며 PDFium 바이너리의 플랫폼별 차이를 추상화합니다. 문서 뷰어를 구축하든, PDF 처리 워크플로를 자동화하든, PDF에서 데이터를 추출하든, pdfium-render는 필요한 도구를 제공합니다.
PDFium-Render 시작하기
PDFium-Render를 설치하는 권장 방법은 CMake를 사용하는 것입니다. 원활한 설치를 위해 다음 명령을 사용하십시오.
GitHub를 통해 PDFium-Render 설치
vcpkg install pdfium-render
GitHub를 통해 PDFium-Render 설치
Git clone https://github.com/ajrcarey/pdfium-render.git 수동으로 설치할 수도 있습니다; 최신 릴리스 파일을 GitHub 저장소에서 직접 다운로드하십시오.
C++를 통한 고품질 PDF 렌더링
오픈 소스 PDFium-Render 라이브러리의 주요 강점은 렌더링 기능에 있습니다. 이 라이브러리는 PDF 페이지를 뛰어난 품질의 래스터 이미지로 변환할 수 있으며, PNG, JPEG, BMP를 포함한 다양한 출력 형식을 지원합니다. 렌더링 엔진은 투명도, 그라디언트, 임베디드 폰트, 벡터 그래픽 등 복잡한 PDF 기능을 Chrome의 PDF 뷰어와 동일한 정확도로 처리합니다. 다음은 소프트웨어 개발자가 C++ 애플리케이션 내에서 특정 페이지를 PNG 이미지 형식으로 렌더링할 수 있는 간단한 예제입니다.
How to Render a Specific PDF Page into PNG Format via 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는 직관적이고 강력합니다. 소프트웨어 개발자는 개별 페이지에서 텍스트를 추출하고, 특정 문자열을 검색하며, 몇 줄의 코드만으로 문자 수준의 위치 정보를 얻을 수 있습니다 — 이는 텍스트 선택이나 하이라이트와 같은 기능을 구현하는 데 필수적입니다. 다음 예제는 소프트웨어 개발자가 C++ 애플리케이션 내에서 특정 PDF 페이지 영역에서 텍스트를 추출하는 방법을 보여줍니다.
C++ API를 통해 특정 PDF 페이지 영역에서 텍스트를 추출하는 방법은?
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(())
}
C++를 사용한 비밀번호 보호 PDF와 Word
문서 작업 시 보안은 가장 중요합니다. PDFium-Render는 비밀번호로 보호된 PDF를 원활하게 처리하며, 사용자 비밀번호와 소유자 비밀번호를 모두 지원합니다. 라이브러리는 인증을 투명하게 처리하고, 비밀번호가 틀렸거나 PDF에 특정 작업을 방지하는 제한이 있는 경우 적절한 오류를 반환합니다. 다음은 C++ 애플리케이션 내에서 비밀번호로 보호된 PDF 문서를 처리하는 방법을 보여주는 매우 유용한 예제입니다.
C++ API를 통해 비밀번호로 보호된 PDF 문서를 열고 로드하는 방법은?
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(())
}
C++를 통한 PDF 메타데이터 및 속성 작업
PDF 구조를 이해하는 것은 많은 애플리케이션에 필수적입니다. 오픈 소스 PDFium-Render 라이브러리는 문서 메타데이터, 페이지 수, 크기 및 기타 속성에 대한 완전한 접근을 제공합니다. 이 기능은 문서 관리 시스템, PDF 검증기 또는 속성을 기반으로 PDF를 분류하거나 처리해야 하는 모든 애플리케이션을 구축하는 데 매우 유용합니다. 다음 코드 예제는 프로그래머가 PDF 문서 메타데이터를 활용하고 다양한 속성에 쉽게 접근하는 방법을 보여줍니다.
C++ API를 사용하여 PDF 문서 메타데이터를 다루는 방법은?
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(())
}