PDF ページを画像にレンダリングし、テキストを抽出する無料の C++ ライブラリ。
PDF ページを画像にレンダリングし、テキストを抽出し、パスワード保護された PDF を操作し、C++ API を通じてドキュメントメタデータにアクセスできるオープンソースの C++ PDF 処理ライブラリです。
PDFium-Render とは何ですか?
C++ アプリケーション内で PDF を扱い、レンダリングすることは、これまで高価な商用ライセンスや扱いにくいオープンソースツールが必要になることが多く、複雑な課題でした。そこで登場するのが PDFium-Render です。これは、Google の PDFium エンジンのパワーを直感的でクリーンなインターフェースでプロジェクトに取り入れることができる、モダンなヘッダーオンリー C++ ラッパーライブラリです。PDFium-render は、Google Chrome や Mozilla Firefox を支える同じ PDF レンダリングエンジンである PDFium の、安全で慣用的な Rust バインディングです。ajrcarey によって作成・保守されているこのライブラリは、PDF ページを画像にレンダリングしたり、テキストを抽出したり、PDF 構造を操作したり、ドキュメントのメタデータにアクセスしたりするための強力なツールキットを開発者に提供します—すべて Rust のメモリ安全性保証を活用しています。
多くのPDFライブラリが作成や基本的な解析にのみ焦点を当てているのとは異なり、PDFium-Renderはピクセル単位で正確にPDFコンテンツをレンダリングすることに優れており、既存の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 画像形式にレンダリングする方法を示すシンプルな例です。
C++ で特定の PDF ページを PNG 形式にレンダリングする方法は?
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++ 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(())
}