生成された互換性モジュールを使用して 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() を呼び出す直接エイリアスです。どちらの名前でもドキュメントのリソースを解放します。