生成された互換性モジュールを使用して Python でドキュメントを作成する方法

生成された互換性モジュールを使用して Python でドキュメントを作成する方法

Aspose.PDF FOSS for Python は、メインの API サーフェスの安定したサブセットを鏡写しする generated 互換性サブパッケージ(aspose_pdf.generated)を提供します――コアライフサイクル操作を備えた Document クラスと、UnsignedContent/UnsignedContentAbsorber および PdfAValidateOptions/PdfAValidationResult が含まれます。このサブパッケージは、フル機能のトップレベルクラスではなく、より狭いサーフェスを明示的に利用したい呼び出し元向けに存在し、そのクラスは import aspose_pdf によって自動的にインポートされません――直接 aspose_pdf.generated.* からインポートします。このパッケージは純粋な Python であり、以下のコマンドでインストールします。

ステップバイステップガイド

ステップ 1: パッケージをインストールする

Aspose.PDF FOSS パッケージをインストールします:

git clone https://github.com/aspose-pdf-foss/Aspose-PDF-FOSS-for-Python.git
cd Aspose-PDF-FOSS-for-Python
pip install -e .

生成された Document をインポートし、確認メッセージを出力してインストールを検証します:

import aspose_pdf
from aspose_pdf.generated.document import Document
print("aspose-pdf-foss-for-python is ready.")

ステップ 2: 必要なクラスをインポート

generated 互換クラスは aspose_pdf.generated.document、aspose_pdf.generated.forms、および aspose_pdf.generated.pdfa にあります — サブモジュール単位で明示的にインポートしてください:

import aspose_pdf
from aspose_pdf.generated.document import Document
from aspose_pdf.generated.forms import UnsignedContent, UnsignedContentAbsorber
from aspose_pdf.generated.pdfa import PdfAValidateOptions, PdfAValidationResult

ステップ 3: ドキュメントを作成してロード

ソースが提供されると Document(source) は即座にロードされます; 引数なしで Document() を呼び出すと、後で load_from でロードできる空のインスタンスが作成されます。両方ともファイルパス、bytes、またはバイナリストリームを受け取ります:

from aspose_pdf.generated.document import Document

document = Document("report.pdf")
print(f"Loaded {len(document.pages)} page(s)")

empty_doc = Document()
empty_doc.load_from("report.pdf")

ステップ 7: 署名されていないフォームコンテンツを抽出

UnsignedContentAbsorber はデジタル署名の対象になっていないページ、フォームフィールド、注釈を抽出します。抽出を実行するには extract() を呼び、実行済みかどうかを確認するには has_extracted() を、再抽出せずに結果を再取得するには get_extracted() を呼び出してください:

from aspose_pdf.generated.forms import UnsignedContentAbsorber

absorber = UnsignedContentAbsorber()
unsigned = absorber.extract()
print(f"Unsigned pages: {len(unsigned.pages)}")
print(f"Unsigned form fields: {len(unsigned.form_fields)}")

if absorber.has_extracted():
    same_result = absorber.get_extracted()

ステップ 8: UnsignedContent コンテナを手動で構築

UnsignedContent はプレーンなコンテナでもあり、add_page、add_form_field、add_annotation を使って自分で項目を追加できます — それぞれに対応する remove_* メソッドがあり、reset() は3つのコレクションを一度にクリアします:

from aspose_pdf.generated.forms import UnsignedContent

content = UnsignedContent()
content.add_page("page-1")
content.add_annotation("signature-placeholder")
print(content)  # UnsignedContent(pages=1, form_fields=0, annotations=1)

content.remove_annotation("signature-placeholder")
content.reset()

ステップ 9: PDF/A バリデーションの構成と実行

PdfAValidateOptions はバリデーション実行のための入力と設定を収集します。add_input(source) は入力を登録し、set_option(key, value) は名前付きオプションを保存し、get_options() は保存されたオプションのコピーを返します。PdfAValidationResult は結果を保持します — add_error(message) は結果を無効としてマークし、errors に追加し、to_dict() は is_valid と errors をプレーンな辞書としてレンダリングします:

from aspose_pdf.generated.pdfa import PdfAValidateOptions, PdfAValidationResult

options = PdfAValidateOptions()
options.add_input("report.pdf")
options.set_option("pdfa_version", "1b")
print(options.get_options())

result = PdfAValidationResult()
result.add_error("Font 'Arial' is not embedded")
print(result.is_valid)   # False
print(result.to_dict())

一般的な問題と解決策

ImportError or AttributeError アクセス時に aspose_pdf.generated

generated サブパッケージは import aspose_pdf から再エクスポートされていません — 各クラスはその特定のサブモジュールからインポートしてください。例えば from aspose_pdf.generated.document import Document のように、単純な import aspose_pdf の後で aspose_pdf.generated.Document が動作することを期待しないでください。

生成されたものを混同する Document メインと aspose_pdf.Document

aspose_pdf.Document(import aspose_pdf によって再エクスポートされるトップレベルクラス)は、より広いインターフェースを持ちます — aspose_pdf.generated.document.Document が実装していない validate_pdfa、iter_pages、redact_text などのメソッドを追加します。生成された Document にメソッドが欠けている場合は、代わりにトップレベルの Document クラスに属しているか確認してください。

save() raises AsposePdfException: Cannot save a disposed document

close()/dispose() はドキュメントの内部状態を永続的に解放します — 破棄された Document はその後保存・最適化・修復できません。残りの操作はすべて close() を呼び出す前に実行するか、または新しい Document(...) 呼び出しでソースからリロードしてください。

change_passwords raises PdfSecurityException: Document is not encrypted

change_passwords は、すでに暗号化されたドキュメントのパスワードのみをローテーションします。先に encrypt(password) を呼び出すか、パスワード変更を試みる前に document.is_encrypted を確認してください。

PdfAValidationResult.add_error raises TypeError

add_error は str 引数が必要です。例外オブジェクトやその他のエラー詳細は、add_error に渡す前に文字列 (str(error)) に変換してください。

よくある質問

なぜ aspose_pdf.generated はメインの aspose_pdf.Document と共存しているのですか?

それは、縮小されたインターフェースに対して書かれたコード用の、Aspose.PDF API のより狭く安定したサブセットを鏡像化します。特にこの互換性サブセットを必要としない新しいコードは、通常、より多くの操作(PDF/A 変換、ページ反復、テキスト削除、その他)をサポートするトップレベルの aspose_pdf.Document を使用すべきです。

UnsignedContentAbsorber.extract() はスキャン用の Document を受け付けますか?

extract() は位置引数とキーワード引数を受け取り、返される UnsignedContent の pages、form_fields、および annotations コレクションを埋めるために使用されます — 表示させたいコレクションはキーワード引数として渡してください(pages=、form_fields=、annotations=)。

何も抽出する前に UnsignedContentAbsorber に対して reset() を呼び出すとどうなりますか?

それは以前に抽出された結果をすべてクリアします。次に get_extracted() は None を返し、has_extracted() は False を返し続け、extract() が再度呼び出されるまでです。

PdfAValidateOptions.add_input を複数回呼び出すことはできますか?

はい — 各呼び出しは inputs リストに別のエントリを追加し、self を返します。そのため、呼び出しをチェーンできます: options.add_input("a.pdf").add_input("b.pdf")。

生成された Document 上で、close() は dispose() と異なりますか?

いいえ — close() は、同じ引数で dispose() を呼び出す直接エイリアスです。どちらの名前でもドキュメントのリソースを解放します。

参照

 日本語