コンテンツにスキップ

Python API リファレンス

NextPDF Python Software Development Kit(SDK)は、2 つのクライアント、両者が共有する単一の ast メソッド名前空間、すべてのレスポンスを型付けする Pydantic モデル群、nextpdf コマンドラインインターフェイス(CLI)、および 6 クラスから成る例外階層を公開します。このページは、それらの各シンボルのリファレンスです。

パブリックな機能はトップレベルのパッケージからインポートします。

from nextpdf import (
AsyncNextPDF,
NextPDF,
AstBuildTimeoutError,
AstNoStructTreeError,
NextPDFAPIError,
NextPDFError,
NextPDFLicenseError,
QuotaExceededError,
)

すべての抽出メソッドは、最初の位置引数として生の PDF バイト列(bytes)を受け取り、型付きの Pydantic モデルを返します。後続のオプションはキーワード専用です。同期版の NextPDF.ast.* メソッドと非同期版の AsyncNextPDF.ast.* メソッドは、同一のシグネチャを共有します。非同期メソッドはコルーチンであり、呼び出しには await が必要です。

同期版の NextPDF クライアントは非同期クライアントをラップし、各コルーチンを完了まで実行します。非同期版の AsyncNextPDF クライアントは、非同期コンテキストマネージャーとしても使用できます。コンテキストマネージャー形式を推奨します。内部トランスポートを確実にクローズできるためです。

シンボルパラメーター既定の動作戻り値スローまたは失敗の条件備考
NextPDF(*, base_url, api_key, api_version='v1')キーワード専用のベース URL、API キー、および任意の API バージョン。リモートバックエンドを使う同期クライアントを構築。NextPDFbase_url または api_key が空の場合に ValueErrorメソッドは非同期処理を同期的に実行するため、ノートブック内や実行中のイベントループ内でも安全です。
AsyncNextPDF(*, base_url='', api_key='', api_version='v1', backend=None)キーワード専用のベース URL、API キー、任意の API バージョン、および任意で注入するバックエンド。バックエンドが注入されていない場合、リモートバックエンドを使う非同期クライアントを構築。AsyncNextPDFbase_url または api_key が空で、かつ backend が指定されていない場合に ValueError引数 backend= を渡すと、テストでカスタムバックエンドまたはローカルバックエンドを注入できます。
AsyncNextPDF.__aenter__()なし。非同期コンテキストに入り、クライアントを返却。AsyncNextPDF想定されません。形式 async with AsyncNextPDF(...) as client: を使用。
AsyncNextPDF.__aexit__(*_)抑制対象の例外引数。コンテキスト終了時にメソッド close() を呼び出し。None想定されません。本体で例外が発生した場合でも、トランスポートを解放。
AsyncNextPDF.close()なし。所有しているリモートバックエンドをクローズし、コネクションプールを解放。None想定されません。べき等です。注入されたバックエンドはクローズされません。

API キーはソースコードに記述しないでください。base_urlapi_key は、環境変数(NEXTPDF_BASE_URLNEXTPDF_API_KEY)またはシークレットマネージャーから読み込みます。

import os
from nextpdf import AsyncNextPDF
async def extract(pdf_bytes: bytes) -> int:
"""Return the page count of a PDF using the async client as a context manager."""
base_url = os.environ["NEXTPDF_BASE_URL"]
api_key = os.environ["NEXTPDF_API_KEY"]
async with AsyncNextPDF(base_url=base_url, api_key=api_key) as client:
document = await client.ast.get_document_ast(pdf_bytes)
return document.page_count
シンボルパラメーター既定の動作戻り値スローまたは失敗の条件備考
NextPDF.ast.get_document_ast()pdf_data: bytes。キーワード page_range_startpage_range_endtoken_budget全ページを対象に完全なセマンティック AST を構築。AstDocumentAstNoStructTreeErrorAstBuildTimeoutErrorNextPDFLicenseErrorQuotaExceededErrorビルドがタイムアウトする場合は、ページ範囲を狭めてください。
NextPDF.ast.extract_cited_text()pdf_data: bytes。キーワード page_indexheadings_only引用アンカーを持つすべてのテキストブロックを抽出。list[CitedTextBlock]NextPDFAPIErrorQuotaExceededError引数 headings_only=True を指定すると、見出しノードのみを取得します。
NextPDF.ast.extract_cited_tables()pdf_data: bytes。キーワード page_rangedict のフィールド startend)。セル単位の引用アンカーを持つすべてのテーブルを抽出。ExtractCitedTablesResponseNextPDFAPIErrorQuotaExceededError引数 page_range を省略すると、ドキュメント全体をスキャンします。
NextPDF.ast.get_ast_node()pdf_data: bytesnode_id: str識別子で 1 つのノードを取得。GetAstNodeResponseNextPDFError(ノードが見つからない場合)。node_id の形式は ast:{hash6}:{pageIdx}:{seq}
NextPDF.ast.search_ast_nodes()pdf_data: bytes。キーワード node_typepage_indextext_querymax_results=100フィルターに一致するシャローノードを返却。SearchAstNodesResponseNextPDFAPIErrortext_query は、大文字と小文字を区別しない部分一致です。
NextPDF.ast.get_ast_diff()original_pdf_data: bytesmodified_pdf_data: bytes2 つのドキュメントを構造的に比較。GetAstDiffResponseNextPDFAPIErrorQuotaExceededError追加、削除、および変更されたノードを報告します。

各非同期メソッドはコルーチンであり、上記の同期版と同じパラメーター、既定値、戻り値の型、および失敗モードを持ちます。asyncio ランタイム内で await を付けて呼び出します。

シンボルパラメーター既定の動作戻り値スローまたは失敗の条件備考
AsyncNextPDF.ast.get_document_ast()pdf_data: bytes。キーワード page_range_startpage_range_endtoken_budget全ページを対象に完全なセマンティック AST を構築。AstDocumentAstNoStructTreeErrorAstBuildTimeoutErrorNextPDFLicenseErrorQuotaExceededErrorawait で結果を待機します。
AsyncNextPDF.ast.extract_cited_text()pdf_data: bytes。キーワード page_indexheadings_only引用アンカーを持つすべてのテキストブロックを抽出。list[CitedTextBlock]NextPDFAPIErrorQuotaExceededErrorawait で結果を待機します。
AsyncNextPDF.ast.extract_cited_tables()pdf_data: bytes。キーワード page_rangeセル単位の引用アンカーを持つすべてのテーブルを抽出。ExtractCitedTablesResponseNextPDFAPIErrorQuotaExceededErrorawait で結果を待機します。
AsyncNextPDF.ast.get_ast_node()pdf_data: bytesnode_id: str識別子で 1 つのノードを取得。GetAstNodeResponseNextPDFError(ノードが見つからない場合)。await で結果を待機します。
AsyncNextPDF.ast.search_ast_nodes()pdf_data: bytes。キーワード node_typepage_indextext_querymax_results=100フィルターに一致するシャローノードを返却。SearchAstNodesResponseNextPDFAPIErrorawait で結果を待機します。
AsyncNextPDF.ast.get_ast_diff()original_pdf_data: bytesmodified_pdf_data: bytes2 つのドキュメントを構造的に比較。GetAstDiffResponseNextPDFAPIErrorQuotaExceededErrorawait で結果を待機します。

非同期クライアントをコンテキストマネージャーとして使い、2 つの抽出を同時にバッチ処理します。

import asyncio
from nextpdf import AsyncNextPDF
async def extract_pair(first: bytes, second: bytes) -> None:
"""Extract two PDFs concurrently with one shared async client."""
async with AsyncNextPDF(base_url="https://connect.example.com", api_key="set-from-secret") as client:
text_blocks, tables = await asyncio.gather(
client.ast.extract_cited_text(first),
client.ast.extract_cited_tables(second),
)
print(f"text blocks: {len(text_blocks)}; tables: {tables.table_count}")

すべてのレスポンスは Pydantic モデルです。モデルクラスは nextpdf または nextpdf.models.ast からインポートします。

シンボル種別主なフィールド備考
AstDocumentドキュメントルートschema_versionsource_hashpage_countroot: AstNodeestimated_tokens(プロパティ)。メソッド get_document_ast() の戻り値。schemaVersionsourceHashpageCount のエイリアスを受け付けます。
AstNodeツリーノードidtype: NodeTypepage_indexbboxtext_contentattributeschildren: list[AstNode]pdf_object_numbermcidドキュメントツリーを保持する再帰的なノード。
AstNodeMetaレスポンスメタデータetagpages_processedイミュータブル。ノードレスポンスと検索レスポンスに付与。
AstNodeShallow検索ヒットidtype: NodeTypepage_indexbboxtext_contentattributeschildren_countイミュータブル。深い子要素なし。
BoundingBox値オブジェクトxywidthheight(各 0.01.0)。正規化されたページ座標。
CitationAnchor値オブジェクトnode_idpage_indexbbox: BoundingBoxconfidencecontent_hash各ブロックの来歴情報。
CitedTextBlockテキストブロックtextcitation: CitationAnchornode_typechunk_indexdepthメソッド extract_cited_text() が返すリストの各項目。
CitedTableBlockテーブルブロックtable_node_idpage_indexcitation_anchorrow_countcol_countrowsイミュータブル。1 つのテーブル。
CitedTableCellテーブルセルrowcolrow_spancol_spantextbboxconfidenceイミュータブル。1 つのセル。
NodeType列挙型documentsectionheadingparagraphlisttablefigure、その他。ノード型の値を表す文字列列挙型。
GetAstNodeResponseレスポンスnode: AstNodemeta: AstNodeMetaメソッド get_ast_node() の戻り値。
SearchAstNodesResponseレスポンスnodes: list[AstNodeShallow]total_matchestruncatedmetaメソッド search_ast_nodes() の戻り値。
ExtractCitedTablesResponseレスポンスtables: list[CitedTableBlock]table_countpages_processedメソッド extract_cited_tables() の戻り値。
AstDiffEntry差分項目typeadded/removed/changed)、node_idnode_typepage_indextext_preview差分における 1 つの変更。
AstDiffSummary差分の合計added_node_countremoved_node_countchanged_node_count集計カウント。
GetAstDiffResponseレスポンスoriginal_page_countmodified_page_countsummary: AstDiffSummarydiff: list[AstDiffEntry]pages_processedメソッド get_ast_diff() の戻り値。

抽出したテキストブロックから引用アンカーを参照します。

from nextpdf import CitedTextBlock
def describe(block: CitedTextBlock) -> str:
"""Render a text block with its page index and confidence."""
anchor = block.citation
return f"[page {anchor.page_index}, confidence {anchor.confidence:.2f}] {block.text[:80]}"

nextpdf コマンドは、ターミナルから抽出を実行します。接続設定には --base-url--api-key を指定するか、NEXTPDF_BASE_URLNEXTPDF_API_KEY を環境変数に設定します。version を除くすべてのコマンドは、接続設定を必要とします。PDF_PATH- の場合、PDF バイト列を標準入力から読み込みます。

シンボルパラメーター既定の動作戻り値スローまたは失敗の条件備考
nextpdf extract textPDF_PATH--format {json,markdown,plain}--page--headings-only引用付きテキストブロックを JSON として出力。標準出力または --output ファイルに書き出し。いずれかの NextPDFError が発生すると終了コード 1 で終了。--page は、0 始まりのページインデックスを 1 つ選択します。
nextpdf extract tablesPDF_PATH--format {json,csv}--page-start--page-endテーブルを JSON として出力。標準出力または --output ファイルに書き出し。いずれかの NextPDFError が発生すると終了コード 1 で終了。--format csv は、テーブルごとに 1 つの CSV ブロックを書き出します。
nextpdf astPDF_PATH--page-start--page-end--token-budget完全なセマンティック AST を JSON として出力。標準出力または --output ファイルに書き出し。いずれかの NextPDFError が発生すると終了コード 1 で終了。引数 --token-budget を使ってレスポンスのサイズを制限します。
nextpdf infoPDF_PATHドキュメントのメタデータ(ページ数、スキーマバージョン、ソースハッシュ、推定トークン数、ルートの概要)を出力。JSON を標準出力または --output ファイルに書き出し。いずれかの NextPDFError が発生すると終了コード 1 で終了。軽量な検査用コマンド。
nextpdf versionなし。インストールされている SDK のバージョンを出力。標準出力に書き出し。想定されません。サーバーに接続しません。認証情報は不要です。
python -m nextpdf.mcpなし(NEXTPDF_BASE_URLNEXTPDF_API_KEY)。Model Context Protocol サーバーを標準入出力(input/output)上で実行。長時間稼働するサーバープロセス。RuntimeError(環境変数が設定されていない場合)。拡張機能 nextpdf[mcp] が必要です。

ページ範囲からテーブルをカンマ区切り値(CSV)として抽出します。

Terminal window
nextpdf extract tables invoice.pdf --format csv --page-start 0 --page-end 2 --output tables.csv

例外階層は nextpdf.models.errors にあり、nextpdf から再エクスポートされます。コードが処理できる最も具体的なクラスを先にキャッチし、その後に基底クラスへフォールバックしてください。サーバーは、RFC 9110 に準拠した HTTP ステータスのセマンティクスで失敗を通知します。各例外は、発生元の status_code と、該当する場合は error_code を保持します。

シンボル基底クラスstatus_codeスローされる条件備考
NextPDFErrorException任意すべての SDK エラーの基底クラス。任意の status_code を保持。フォールバックとして最後にキャッチ。
NextPDFAPIErrorNextPDFError必須Connect エンドポイントから HTTP エラーが返された場合。属性 error_code を追加。
NextPDFLicenseErrorNextPDFAPIError402この機能には、サーバー上でより上位のライセンスが必要です。error_codelicense/tier-required
QuotaExceededErrorNextPDFAPIError429レート制限またはクォータを超過しました。属性 retry_after を保持。再試行前にこの値を尊重してください。
AstNoStructTreeErrorNextPDFAPIError422PDF がタグ付けされておらず、ヒューリスティックフォールバックが有効になっていません。ヒューリスティックモードを有効にするか、タグ付き PDF を指定してください。
AstBuildTimeoutErrorNextPDFAPIError504サーバー上で AST のビルドがタイムアウトしました。ページ範囲を狭めて再試行してください。
from nextpdf import (
NextPDF,
AstBuildTimeoutError,
NextPDFAPIError,
NextPDFError,
QuotaExceededError,
)
def extract_text(client: NextPDF, pdf_bytes: bytes) -> int:
"""Extract cited text, handling the most specific failures first."""
try:
blocks = client.ast.extract_cited_text(pdf_bytes)
except QuotaExceededError as error:
raise RuntimeError(f"Quota exceeded (retry after {error.retry_after}s)") from error
except AstBuildTimeoutError as error:
raise RuntimeError("AST build timed out; reduce the page range") from error
except NextPDFAPIError as error:
raise RuntimeError(f"API error {error.status_code}: {error}") from error
except NextPDFError as error:
raise RuntimeError(f"SDK error: {error}") from error
return len(blocks)
  • 同期版の NextPDF クライアントは、すべての呼び出しを AsyncNextPDF に委譲します。ノートブックや、すでにイベントループを実行しているスレッドから呼び出しても安全です。実行中のループが検出されると、コルーチンはワーカースレッドにディスパッチされます。
  • 非同期コンテキストマネージャー形式 async with AsyncNextPDF(...) as client: を推奨します。これにより、コネクションプールが確実にクローズされます。 AsyncNextPDF を直接構築する場合は、close() を自分で呼び出してください。
  • ベアラートークンがログに記録されたりエラーメッセージに含まれたりすることはなく、Transport Layer Security(TLS)の検証は既定で有効です。認証情報をソースに埋め込まないでください。環境変数またはシークレットマネージャーから読み込みます。
  • すべてのモデルは Pydantic v2 クラスです。いくつかのレスポンスモデルはイミュータブル(変更不可)です。抽出されたブロックは読み取り専用の値として扱ってください。
  • CLI は、いずれかの NextPDFError が発生するとステータスコード 1 で終了し、メッセージを標準エラーに出力します。パイプラインではその終了コードを利用してください。
  • Python SDK 開発者ガイド — アーキテクチャ、非同期バッチ処理、および失敗時の処理。
  • Python CLI — ターミナルでの抽出と、大きなファイル向けのストリーミング。
  • Python MCP サーバー — 抽出ツールを AI エージェントに公開します。
  • RFC 9110(HTTP Semantics)と RFC 9457(Problem Details for HTTP APIs)は、Connect エンドポイントが返すステータスのセマンティクスと、機械可読なエラー本文を規定しています。正式な本文については、IETF RFC インデックスを参照してください。