Aspose.PDF FOSS for C++ 機能
Aspose.PDF FOSS for C++ の機能
Aspose.PDF FOSS for C++ は、PDF 文書を作成、開く、変更、保存するための C++20 ライブラリです。このページでは主要な機能領域とそれらへのエントリーポイントとなるクラスを概観します。各領域は個別の developer-guide ページで詳細に解説されています。
ドキュメント管理
Aspose::Pdf::Document はすべての操作のルートオブジェクトです。パスから既存のファイルを開き、Pages() を通じてページコレクションを公開し、Save() で変更を永続化します。Optimize() と OptimizeResources() は未使用または重複したリソースを削除することでファイルサイズを削減します。
#include <aspose/pdf/document.hpp>
int main() {
Aspose::Pdf::Document doc("input.pdf");
auto& pages = doc.Pages();
pages.Add(); // append a blank page
pages.Delete(1); // remove the original first page
doc.Optimize();
doc.Save("output.pdf");
}テキスト抽出
Aspose::Pdf::Text::TextAbsorber は文書または単一ページを走査し、プレーンテキストを収集します。テキストは Visit() を呼び出した後、Text() で取得できます。TextFragmentAbsorber は同じ走査を行いますが、TextFragments() を通じて個々の TextFragment オブジェクトを返し、各フラグメントの位置とテキスト状態にアクセスできます。
#include <aspose/pdf/document.hpp>
#include <aspose/pdf/text_absorber.hpp>
#include <iostream>
int main() {
Aspose::Pdf::Document doc("report.pdf");
Aspose::Pdf::Text::TextAbsorber absorber;
absorber.Visit(doc);
std::cout << absorber.Text() << "\n";
}ラスタ画像へのレンダリング
ページレンダリングデバイスは Page をラスタ画像に変換します。BmpDevice、PngDevice、JpegDevice、および TiffDevice は同じ Process(page, output) 署名を共有し、出力 DPI を設定する Resolution で構築されています。
#include <aspose/pdf/document.hpp>
#include <aspose/pdf/bmp_device.hpp>
#include <aspose/pdf/resolution.hpp>
#include <fstream>
int main() {
Aspose::Pdf::Document doc("report.pdf");
Aspose::Pdf::Devices::BmpDevice device(Aspose::Pdf::Devices::Resolution(150));
std::ofstream out("page1.bmp", std::ios::binary);
device.Process(doc.Pages()[1], out);
}暗号化
Document::Encrypt() は、ユーザーパスワード(開くために必要)と所有者パスワード(権限変更に必要)で文書を保護し、CryptoAlgorithm 列挙型から選択されたアルゴリズム(RC4x40、RC4x128、AESx128、または AESx256)を使用します。IsEncrypted() は現在の状態を報告し、Decrypt() はすでに開かれた文書から保護を解除します。
#include <aspose/pdf/document.hpp>
int main() {
Aspose::Pdf::Document doc("input.pdf");
doc.Encrypt("user-password", "owner-password",
Aspose::Pdf::Permissions::PrintDocument,
Aspose::Pdf::CryptoAlgorithm::AESx256);
doc.Save("encrypted.pdf");
}注釈
注釈はページに可視ノート、形状、マークアップを付加します。各注釈タイプは Annotation から派生し、対象の Page と配置の Rectangle で構築され、注釈()(AnnotationCollection)を通じてページに追加されます。
#include <aspose/pdf/document.hpp>
#include <aspose/pdf/text_annotation.hpp>
#include <aspose/pdf/rectangle.hpp>
int main() {
Aspose::Pdf::Document doc("input.pdf");
auto page = doc.Pages()[1];
Aspose::Pdf::Annotations::TextAnnotation note(
page, Aspose::Pdf::Rectangle(50.0, 700.0, 250.0, 740.0, false));
note.Contents("Reviewed and approved.");
page.Annotations().Add(note);
doc.Save("annotated.pdf");
}Forms
AcroForm フィールドは Aspose::Pdf::Forms::Form を通じて管理され、Document::Form() からアクセスできます。TextBoxField のようなフィールドタイプは注釈と同様に—Page と Rectangle を使って—構築され、Form::Add() に登録されます。
#include <aspose/pdf/document.hpp>
#include <aspose/pdf/text_box_field.hpp>
#include <aspose/pdf/rectangle.hpp>
int main() {
Aspose::Pdf::Document doc("input.pdf");
auto page = doc.Pages()[1];
Aspose::Pdf::Forms::TextBoxField field(
page, Aspose::Pdf::Rectangle(100.0, 650.0, 300.0, 670.0, false));
field.PartialName("customer_name");
field.Value("Jane Doe");
doc.Form().Add(field);
doc.Save("form_filled.pdf");
}ヒントとベストプラクティス
- 入力ファイルをパスで
Documentコンストラクタで開きます;Save()は、他のハンドルがまだ開いている可能性があるソースを上書きせず、明示的な出力パスを指定して呼び出してください。 - 文書が大幅に編集された場合は、
Optimize()をSave()より先に呼び出してください――それにより、どのページからも参照されなくなったリソースが削除されます。 - ラスタデバイス(
BmpDevice、PngDevice、JpegDevice、TiffDevice)は解像度ごとに一度だけ作成し、ページごとにデバイスを再生成するのではなく、ページ間で再利用してください。 Encrypt()を呼び出す際には、ユーザーパスワードとオーナーパスワードの両方を設定します――ユーザーパスワードが空の場合、誰でもファイルを開くことができますが、オーナーパスワードは権限変更を制御します。- アノテーションやフィールドオブジェクト(
TextAnnotation、TextBoxFieldなど)は、Save()が戻るまで存続させておいてください。ドキュメントはそれらが追加されたページコンテンツへの参照を保持しているためです。
一般的な問題
| 問題 | 原因 | 修正 |
|---|---|---|
Save() は内容が変更されていないファイルを生成します | 編集は doc.Pages() から取得したオブジェクトではなく、ページまたは注釈のコピーに対して行われました | Pages()、Annotations()、または Form() が直接返すオブジェクトを変更してください |
| レンダリングされた画像が空または白紙です | 誤ったページインデックスが Process() に渡されています | PageCollection は 1 インデックスです — ページ 1 は doc.Pages()[1] であり、[0] ではありません |
Encrypt() はパスワードなしでも開くファイルを生成します | ユーザーパスワードが空のままです | userPassword 引数に空でない文字列を渡してください |
| スキャンされた PDF の抽出テキストは空です | このページはテキストオペレーターではなく、ラスタ画像コンテンツのみを含んでいます | TextAbsorber はテキストオペレーターを読み取りますが、画像のみのページには抽出できるものがありません |
Form::Add() で追加したフィールドがページに表示されません | フィールドのRectangleがページのMediaBoxの外にあります | 矩形座標がPage::MediaBox()の範囲内にあることを確認してください |
FAQ
Aspose.PDF の C++ 用 FOSS は、商用の PDF ライブラリに依存していますか?
いいえ。これは商用PDFスタックに依存しない、ゼロからのC++20実装で、MIT licenseの下でリリースされています。
既存のPDFを開くのではなく、ゼロから新しいPDFを作成できますか?
はい。Documentには空のドキュメントを作成するデフォルトコンストラクタがあります。保存する前にページを追加するには、Pages().Add()を呼び出してください。
どのラスターフォーマットにレンダリングできますか?
BmpDevice、PngDevice、JpegDevice、およびTiffDeviceは、それぞれ個々のページをBMP、PNG、JPEG、TIFFにレンダリングします。
サポートされている暗号化アルゴリズムは何ですか?
CryptoAlgorithmはRC4x40、RC4x128、AESx128、およびAESx256を提供し、Document::Encrypt()に渡されます。
次はどこに行けばよいですか?
開発者ガイドには、ドキュメントおよびページ管理、PDFネイティブのグラフィックとシェイプ、注釈とインタラクティブフォーム、そして一般的なファイル操作をラップする上位レベルのファサードクラス用の専用ページが含まれています。
API Reference 概要
| クラス/メソッド | 説明 |
|---|---|
Document | ルートオブジェクト — PDF を開く、作成する、保存する、最適化する |
Document.Pages() | ドキュメントのPageCollectionを返します |
Document.Encrypt() / Decrypt() | ドキュメントにパスワード保護を設定する、または保護を解除する |
Document.Form() | ドキュメントのAcroFormコンテナを返します |
TextAbsorber | ドキュメントまたはページからプレーンテキストを抽出します |
TextFragmentAbsorber | 位置情報付きテキストフラグメントを抽出します |
BmpDevice / PngDevice / JpegDevice / TiffDevice | ページをラスタ画像形式にレンダリングする |
Resolution | レンダリングデバイスに渡される出力DPI |
CryptoAlgorithm | 暗号化アルゴリズムの選択:RC4またはAES、40〜256ビット |
Permissions | Encrypt() に渡されるアクセス制御フラグ |
Annotation / AnnotationCollection | ページ注釈のベースタイプとコンテナ |
TextAnnotation | テキストノート注釈 |
Form | AcroForm フィールドコンテナは Document.Form() によって到達します |
TextBoxField | シングルライン/マルチラインテキストフォームフィールド |