Python でドキュメントをロードする方法
Aspose.PDF FOSS for Python は、PDF をファイルパス、 raw bytes、またはバイナリストリームから Document オブジェクトに読み込みます。このオブジェクトは検査および操作が可能です。このライブラリは純粋な Python で、ワンコマンドでインストールできます。
ステップバイステップガイド
ステップ 2: 必要なクラスをインポート
PDF をロードおよび保持するために Document をインポートし、ロードが失敗したときに処理する例外クラスもインポートします:
from aspose_pdf import (
Document,
InvalidPasswordException,
InvalidPdfFileFormatException,
PdfCorruptedError,
PdfParseException,
)ステップ 3: ファイルパスから PDF をロード
ファイルパスを直接 Document のコンストラクタに渡すか、既存のインスタンスで load_from を明示的に呼び出します — どちらもパス、bytes、またはバイナリストリームを受け取ります。Document をコンテキストマネージャとして使用すると、基礎となるファイルハンドルが自動的に解放されます:
from aspose_pdf import Document
with Document("report.pdf") as document:
print(f"Loaded {document.page_count} page(s)")コンストラクタ形式 Document(source) は Document().load_from(source) と同等です:
document = Document()
document.load_from("report.pdf")
print(f"Loaded {document.page_count} page(s)")
document.close()ステップ 4: パスワードで保護された PDF を読み込む
Document(source, password=...) と Document.load_from(source, password, limits) の両方は、ユーザーパスワードで暗号化された PDF 用の password 引数を受け取ります:
from aspose_pdf import Document
with Document("locked.pdf", password="secret") as document:
print(f"Opened encrypted document: {document.page_count} page(s)")
print(f"Encrypted: {document.is_encrypted}")ソースがパスワードで保護されていない場合は、引数を省略してください — デフォルトの password=None を渡すことで、通常の PDF でも機能します。
ステップ 5: 読み込み例外の処理
ファイルが見つからない、PDF でないデータ、パスワードがないまたは間違っている、あるいは破損した PDF は、決して空の Document を黙って返すことはなく、例外をスローします。適切に対処するために、特定の例外クラスを捕捉してください:
from aspose_pdf import (
Document,
InvalidPasswordException,
InvalidPdfFileFormatException,
PdfCorruptedError,
PdfParseException,
)
try:
document = Document("report.pdf", password="maybe-wrong")
except InvalidPasswordException:
print("The PDF is encrypted; supply the correct password.")
except InvalidPdfFileFormatException:
print("The file is not a valid PDF.")
except PdfCorruptedError as error:
print(f"Unrecoverable corruption at offset {error.offset}: {error.message}")
except PdfParseException as error:
print(f"Could not parse the PDF: {error}")
else:
print(f"Loaded {document.page_count} page(s)")
document.close()PdfCorruptedError とその兄弟である PdfMalformedError はどちらも message、offset、recoverable プロパティを持ち、破損したファイルがどこで解析に失敗したかを正確に記録するのに便利です。信頼できない入力を処理する際には、PdfResourceLimitException も捕捉してください。これは、ドキュメントがデフォルトの PdfLoadLimits 安全ポリシー(入力サイズ、オブジェクト数、デコードされたストリームサイズなど)を超える場合に発生します。
ステップ 7: ドキュメントリソースを解放する
Document をコンテキストマネージャー (with Document(...) as document:) として使用すると、ブロックを抜けたときにドキュメントが自動的に閉じられます。with ブロックの外で Document を作成する場合は、使用が終わったら明示的に close() または dispose() を呼び出してください:
document = Document()
document.load_from("report.pdf")
try:
print(document.page_count)
finally:
document.close()一般的な問題と対処法
InvalidPasswordException ファイルが暗号化されているとは思っていなかったのに、エラーが発生します
元のPDFにはユーザーパスワードが設定されています。ファイルの出所でこれを確認し、正しい値を password 引数として Document(...) または load_from(...) に渡してください。
InvalidPdfFileFormatException 見た目が正常なファイルで
このファイルは有効なPDFではありません — HTML エラーページであるか、ダウンロードが途中で切れたもの、あるいは .pdf 拡張子で保存された別の形式かもしれません。テキストエディタでファイルを開き、先頭が %PDF- で始まっていることを確認してください。
PdfCorruptedError 他のビューアで開くことができるファイルで
一部の PDF リーダーは壊れた構造を黙って修復します。Document は回復不可能な破損に対して PdfCorruptedError を、回復可能な構造上の問題に対して PdfMalformedError を発生させます — 例外の offset プロパティを確認して、バイトストリーム内の問題箇所を特定してください。
PdfResourceLimitException 大容量または複雑な PDF で
ドキュメントがデフォルトの PdfLoadLimits 制限(入力サイズ、オブジェクト数、デコード済みストリームサイズ、その他信頼できない入力から保護するための制限)を超えました。カスタム PdfLoadLimits を作成し、limits= として Document(...) または、ファイルが信頼できてより大きな制限が適切な場合は load_from(...) に渡してください。
閉じるのを忘れる Document 外部で開かれた with block
作業が終わったら document.close()(または document.dispose())を呼び出すか、with Document(source) as document: でファイルをロードして、ブロック内で例外が発生した場合でも自動的にクリーンアップが行われるようにしてください。
よくある質問
PDF をロードするとき、source 引数として何を渡すことができますか?
Document(source) と Document.load_from(source, password, limits) はファイルパス、生の bytes、または任意のバイナリストリームを受け付けます。
ディスク上ではなく、すでにメモリにある PDF をどのようにロードしますか?
bytes オブジェクトを直接渡します: Document(pdf_bytes)、または既存の Document インスタンスで document.load_from(pdf_bytes) を呼び出します。
PDF のロード時に最初から正しいパスワードが必要ですか、それとも先に確認できますか?
is_encrypted はロードが成功した後にのみ利用可能です。そのため、暗号化された PDF は同じ呼び出しで正しい password 引数を使用して開く必要があります。インタラクティブにパスワードを求める必要がある場合は InvalidPasswordException を捕捉してください。