メインコンテンツへスキップ

PDF4me Python SDK はじめる

の pdf4me パッケージ PyPI 公式の非同期 Python SDK のために PDF4me REST API変換、最適化、マージ、分割、スタンプ、電子署名、 OCRフォーム入力、抽出、バーコード、 ZUGFeRD 電子請求書、そして AI請求書、領収書、契約書、銀行取引明細書、税務書類、給与明細書などから文書を抽出する。

パッケージ情報​

分野価値
パッケージ名pdf4me
現在のバージョン1.0.2 (公開日:2026年9月14日)
ライセンスMIT
Python サポート>=3.11 (3.11、3.12、3.13、3.14でテスト済み)
開発状況生産/安定
フレームワークAsyncIO
PyPIpypi.org/project/pdf4me

クライアントは内部的にはマイクロソフトによって生成されています Kiota 上に乗って httpx[http2]そのため、すべてのアクションは完全に型付けされ、型付けされた結果を返し、クライアントごとに1つの接続プールを再利用します。

前提条件​

  • Python バージョン3.11以降。
  • A PDF4me アカウントと API 鍵。
  • pip (または uv、 poetryまたは、 PyPI-互換性のあるインストーラー)。

インストール​

python -m pip install pdf4me

インストール中 pdf4me 引き込む httpx[http2] そしてマイクロソフト Kiota ランタイムパッケージ(microsoft-kiota-abstractions、 microsoft-kiota-http(JSON、フォーム、テキスト、マルチパートシリアル化バックエンドを含む)。

認証する​

設定する API 環境における鍵:

export PDF4ME_API_KEY="your-api-key"

以下の例では、実行時にその変数からキーを読み取ります。また、それを直接渡すこともできます。 Pdf4meClient(api_key) シークレットマネージャーからロードすることを希望する場合は、 .env ファイル、または別のソース。

クイックスタート​

最小限の有用なプログラム:クライアントを開き、1つのアクションを実行し、結果をディスクに書き込む。

import asyncio
import os
from pathlib import Path

from pdf4me import Pdf4meClient
from pdf4me.optimize import optimize


async def main() -> None:
api_key = os.environ.get("PDF4ME_API_KEY")
if not api_key:
raise SystemExit("Set PDF4ME_API_KEY before running this example.")

source = Path("input.pdf")
async with Pdf4meClient(api_key) as client:
result = await optimize(
client, source.read_bytes(), doc_name=source.name
)
Path("optimized.pdf").write_bytes(result)
print("Saved optimized.pdf")


if __name__ == "__main__":
asyncio.run(main())

注目すべき3つの点:

  1. 顧客一人につき、多数の電話がかかってくる。 の async with Pdf4meClient(...) コンテキストは、 httpx 接続プール。内部のすべての呼び出しで同じクライアントを再利用します。 main アクションごとに1つずつ開くのではなく。
  2. アクションは自由関数であり、クライアントメソッドではありません。 各アクションをそのモジュールからインポートします(from pdf4me.optimize import optimize、 from pdf4me.pdf import get_pdf_metadata) そして、クライアントを最初の引数として渡します。これにより、インターフェースがフラットになり、エディタで使用されていないモジュールをツリーシェイキングできるようになります。
  3. 入力バイト数、出力バイト数。 ファイルを返すアクション bytesメタデータを生成するアクションは、型付きデータクラスを返します。ディスク上にステージングは行われないため、ファイルシステムにアクセスすることなく、アクション間で結果をパイプで渡すことができます。

さらに2つのよくある電話​

スタンプ PDF:

from pdf4me.edit import StampAlignX, stamp

stamped = await stamp(client, data, text="DRAFT", align_x=StampAlignX.Center)
Path("stamped.pdf").write_bytes(stamped)

読む PDF メタデータ:

from pdf4me.pdf import get_pdf_metadata

metadata = await get_pdf_metadata(client, data, doc_name="input.pdf")
print(metadata.page_count)

列挙型として渡されるすべての値(例: StampAlignX.Center) は型付き定数なので、 IDE 法的値を自動補完し、編集時にmypyまたはpyrightがタイプミスを検出します。

ボックスには何が同梱されているか(18モジュールにわたる106のアクション)​

モジュール行動インポート例
pdf4me.ai_document_extraction14from pdf4me.ai_document_extraction import extract_invoice_data
pdf4me.barcode7from pdf4me.barcode import create_barcode, read_barcodes
pdf4me.convert13from pdf4me.convert import html_to_pdf, url_to_pdf, word_to_pdf
pdf4me.edit7from pdf4me.edit import stamp, add_page_number, add_html_header_footer
pdf4me.excel1from pdf4me.excel import excel_to_pdf
pdf4me.extract8from pdf4me.extract import extract_text, extract_attachments
pdf4me.find_search2from pdf4me.find_search import find_and_replace_text
pdf4me.forms2from pdf4me.forms import fill_pdf_form, get_form_fields
pdf4me.generate6from pdf4me.generate import generate_document_single
pdf4me.image13from pdf4me.image import resize_image, add_watermark_to_image
pdf4me.merge_split5from pdf4me.merge_split import merge_pdfs, split_pdf_by_barcode
pdf4me.optimize1from pdf4me.optimize import optimize
pdf4me.organize5from pdf4me.organize import rotate_pdf, extract_pages
pdf4me.pdf16from pdf4me.pdf import get_pdf_metadata, sign_pdf
pdf4me.pdf4me1from pdf4me.pdf4me import ping
pdf4me.security2from pdf4me.security import protect_document, unlock_pdf
pdf4me.word2from pdf4me.word import add_tracked_changes
pdf4me.zugferd1from pdf4me.zugferd import create_zugferd_invoice

上記のインポートパスはモジュールサーフェスの例です。 PDF4me REST API 参照 各アクションの完全なパラメータリストとソースリポジトリについては、 pdf4me/ お使いのバージョンがエクスポートする正確なシンボル名に対応するパッケージツリー。

次はどこへ行く?​

トラブルシューティング​

ModuleNotFoundError: No module named 'pdf4me'。 パッケージは、スクリプトを実行しているインタープリタとは別のインタープリタにインストールされています。 python -m pip show pdf4me 同じ仮想環境内で。 pyenv または condaまず環境をアクティブ化してください。

SystemExit: Set PDF4ME_API_KEY before running this example. 環境変数はプロセスから見えません。シェルを再起動してください。 exportまたは、キーを直接渡します Pdf4meClient("your-api-key")Windowsでは、次の点に注意してください。 set CMD 内部ではセッション間で保持されません。 setx 永続的な価値のために。

httpx.HTTPStatusError: 401 Unauthorized。 の API キーは存在しますが拒否されました。 PDF4me ダッシュボード そしてもう一度試してください。

一定期間の非アクティブ状態の後、最初の呼び出しが遅い。 HTTP/2 キープアライブはアイドル時にリセットされます。 Pdf4meClient ファイルごとに新しいファイルを開くのではなく、バッチジョブの実行期間中ずっとファイルを開く。

asyncio.run() cannot be called from a running event loop。 あなたは中にいます Jupyter または既にイベントループを実行しているフレームワーク。 await main() ノートブックセルの最上位レベルで記述するか、フレームワーク独自の非同期エントリポイントでコードをラップします。