pdfxをインストールするには?
パッケージをグローバルにインストールすると、pdfx コマンドが使えます。インストールせずに1回だけ実行することもできます。
npm install -g @pdf123/cli
pdfx --versionnpx @pdf123/cli merge a.pdf b.pdf -o merged.pdf
bunx @pdf123/cli merge a.pdf b.pdf -o merged.pdfbun add -g @pdf123/cli や pnpm add -g @pdf123/cli でも同様にインストールできます。ほかにインストールするものはありません。
使い始めるには?
次の6つのコマンドで、よく使うパターンがわかります。
pdfx list # every tool; --category security for one category
pdfx describe watermark # a tool's fields and defaults
pdfx merge a.pdf b.pdf -o merged.pdf
pdfx compress *.pdf -o compressed/ # several files: one result per file
pdfx watermark in.pdf --watermarkText DRAFT
pdfx pipeline a.pdf b.pdf --step merge --step compress -o out.pdf任意のツールを実行するには?
最初の引数はツールIDです。その後に入力ファイルとツールのオプションを続けます。ツールのオプションはすべてフラグで、APIのフィールド名(--pageNumbers)またはケバブケース(--page-numbers)で書きます。負の数は、--rotation -90 のようにフラグの後ろに空白を挟んで続けるか、等号の後ろに書きます。
pdfx <tool> [files...] [--<field> <value>]...ツールの一覧は pdfx list で確認します。--category または --group と、検索語を指定する --query を使えます。pdfx describe <tool> では、エンドポイント、受け付ける入力、バッチとして実行されるかどうか、各フィールドの既定値と許可される値が表示されます。不明なツールIDには候補が示され、入力ミスは終了コード2で終了します。
どのコマンドがどのツールページに対応しますか?
| コマンド | ツールページ | 機能 |
|---|---|---|
pdfx merge a.pdf b.pdf -o merged.pdf | 結合 | 複数のPDFを1つにまとめる |
pdfx split report.pdf --pageNumbers 3,7 -o parts.zip | 分割 | PDFを複数のファイルに分ける |
pdfx compress in.pdf -o out/ | 圧縮 | PDFのストリームを再圧縮してサイズを減らす |
pdfx watermark in.pdf --watermarkText DRAFT | 透かし | テキストまたは画像の透かしを追加する |
pdfx protect in.pdf --password secret -o locked.pdf | 保護 | パスワードでPDFを暗号化する |
pdfx unlock locked.pdf --password secret | 解除 | パスワード保護を取り除く |
pdfx get-info in.pdf | 文書情報 | メタデータ、権限、構造をJSONで出力する |
pdfx ocr scan.pdf -o out/ | OCR | スキャンしたPDFを読み取り、Markdownを保存する |
pdfx pdf-to-markdown in.pdf -o out/ | PDFからMarkdown | PDFをMarkdownに変換する |
pdfx rotate in.pdf --angle 90 | 回転 | ページの向きを90度、180度、270度のいずれかで変える |
pdfx repair broken.pdf | 修復 | 破損したPDFの構造を再構築する |
多数のファイルを一度に処理するには?
単一ファイル用のツールに複数のファイルを渡すと、pdfx はバッチとして実行します。-o には、末尾がスラッシュのディレクトリを指定します。ツールはファイルごとに1回ずつ、既定では2ファイルずつ並行して実行されます。これは --concurrency で変更できます。
pdfx compress *.pdf -o compressed/
pdfx protect *.pdf --password secret --concurrency 4 -o locked/pdfx は、各ファイルが終わるたびに input -> saved という1行を表示します。失敗したファイルは標準エラー出力に報告され、ほかのファイルは最後まで処理されます。Ctrl-Cを1回押すと、実行中のリクエストを中止します。すでに保存されたファイルは残ります。2回目のCtrl-Cでは、コード130ですぐに終了します。--idempotency-key k を付けると、各ファイルが k:<index> を送り、同じリクエストを繰り返したときは24時間のあいだ最初の結果が再生されます。
get-info のようにレポートを返すツールのバッチは、-o がなければファイルを書き出しません。代わりに、入力ファイルをキーにしたレポートを表示します。
1回のリクエストで複数のツールをつなぐには?
pdfx pipeline は、複数のツールを1回のリクエストで実行します。ツールごとに --step を繰り返し指定します。オプションを設定するには、--steps でJSON配列を渡します。
pdfx pipeline a.pdf b.pdf --step merge --step compress -o out.pdf
pdfx pipeline in.pdf --steps '[{"tool":"watermark","params":{"watermarkText":"DRAFT"}},{"tool":"compress"}]' -o out.pdfステップには、2つ目のファイルを必要とするツールは使えません。
パスワード付きのPDFを開くには?
--input-password は、暗号化されたすべての入力を先に開きます。--password-for <file>=<password> は、1つのファイルのパスワードを設定します。繰り返し指定でき、ファイル名に * を指定すると残りのすべてが対象になります。ロックされたファイルとそうでないファイルが混在するバッチに向いています。merge と images-to-pdf では、名前を指定した各ファイルが、ツールの実行前に個別にロック解除されます。
pdfx compress locked.pdf --input-password secret -o out.pdf
pdfx compress report.pdf --password-for report.pdf=secret -o out.pdf
pdfx merge a.pdf b.pdf --password-for a.pdf=secret -o merged.pdf同じオプションはパイプラインでも使えます。保護を恒久的に取り除くには、独自の --password オプションを持つ解除ツールを使ってください。
入力と出力はどのように扱われますか?
- 入力が
-のときは標準入力を読み取ります。これは1回の実行につき1度だけです。-o -は結果を標準出力に書き出します。 -o file.pdfはそのファイルに書き込みます。-o dir/はディレクトリに書き込みます。まだ存在しないディレクトリには末尾のスラッシュが必要です。スラッシュのない名前はファイルとして書き込まれるためです。-oがない場合、結果は、サーバーが付けたファイル名でカレントディレクトリに保存されます。- ディレクトリへの書き込みでは、
pdfxは既存のファイルを置き換えず、新しい名前を選びます。-o file.pdfのように明示したファイルは置き換えられます。 - 結果と矛盾する拡張子の
-oファイル名(たとえばsplitが返したZIPを.pdfとして保存しようとした場合)は、終了コード2とcode: output_mismatchで拒否されます。何も書き込まれません。 - 書き込めない出力先は使い方のエラーとして扱われ、何かをアップロードする前に検出されます。
cat in.pdf | pdfx compress - -o - > out.pdf--json は何を出力しますか?
保存された結果については、--json はパス、コンテンツタイプ、サイズを出力します。レポートを返すツールでは、レポートそのものを出力します。バッチでは、ファイルごとのステータスを含む1つのレポートを出力します。
{ "path": "one.pdf", "contentType": "application/pdf", "bytes": 1040 }{
"processed": 2,
"unmatched": 0,
"failed": 0,
"files": [
{ "input": "/abs/a.pdf", "ok": true, "path": "comp/a.pdf", "contentType": "application/pdf", "bytes": 1040 }
]
}失敗したファイルには、path と bytes の代わりに error と reason が入ります。一致しなかったフィルターツールは { "matched": false } を出力します。pdfx list --json は、id、category、group、name、description、returns、files、filter を持つ行を出力します。
すべてのツールに共通するオプションは?
| オプション | 効果 |
|---|---|
-o, --output <path> | 書き込むファイル、または書き込み先のディレクトリ。既定はカレントディレクトリ。- は標準出力 |
--api-base <url> | APIのオリジン。環境変数は PDFX_API_BASE、既定値は https://pdf123.xyz |
--api-key <key> | X-API-KEY として送信。環境変数は PDFX_API_KEY。省略可能 |
--input-password <pw> | パスワードで保護されたすべての入力を先に開く |
--password-for <file>=<pw> | 1つのファイルのパスワード。繰り返し指定可能 |
--concurrency <n> | バッチで同時に処理するファイル数。既定は2 |
--timeout <ms> | 各リクエストのタイムアウト。既定は300000 |
--idempotency-key <k> | 24時間のあいだ最初の結果を再生する |
--json | 機械可読な出力 |
終了コードにはどのような意味がありますか?
| コード | 意味 |
|---|---|
0 | 成功。一致しなかったフィルターツールも0で終了し、no match と表示する |
1 | リクエストが失敗した。バッチでは少なくとも1つのファイルが失敗したが、ほかは最後まで処理される |
2 | 使い方のエラー。何もアップロードされていない |
130 | Ctrl-Cで中断された。実行中のリクエストは中止される |
失敗時には、サーバーから提供されていれば reason:、code:、hint: の行が表示されるため、スクリプトは文言を照合せずに分岐できます。表のないPDFに対する pdf-to-csv のように、返すものが見つからないツールは、空のファイルを書き出す代わりに、終了コード1と code: no_content で終了します。コードはエラーコードに一覧があります。
pdfxを自分のサーバーに向けるには?
PDFX_API_BASE を設定するか --api-base を渡して、セルフホストした pdfx-server のアドレスを指定します。サーバーがキーを必要とする場合は PDFX_API_KEY も追加してください。セルフホストをご覧ください。
export PDFX_API_BASE=http://localhost:8080
export PDFX_API_KEY=<your-key>
pdfx compress in.pdfCLIが知らないエンドポイントを実行するには?
pdfx call は、操作IDまたは /api/... パスに生のリクエストを送ります。フォームのフィールドには --field name=value、追加のファイルには --file field=path を使います。リクエストはちょうど1回だけ送られ、ローカルでの検証は一切行われないため、パスワードとバッチは拒否されます。
pdfx call general/merge-pdfs a.pdf b.pdf -o merged.pdf
pdfx call /api/v1/misc/flatten in.pdf --field flattenOnlyForms=true -o flat.pdf関連ページ
- 開発者向け概要: REST APIと認証について
- TypeScript SDK: コマンドラインの土台になっているライブラリ
- MCPサーバー: AIエージェント向け
- PDF123ブログの記事「pdfx CLI: One Catalog, Called From Your Terminal」
FAQ
pdfxはオフラインで動作しますか?
いいえ。pdfx は各ファイルをPDF123 APIまたは自分のサーバーにアップロードし、結果をローカルに保存するため、APIのベースに接続できる必要があります。
pdfxにAPIキーは必要ですか?
いいえ。匿名でも使えます。サーバーがキーを必要とする場合は、PDFX_API_KEY を設定するか --api-key を渡してください。キーは X-API-KEY ヘッダーとして送られます。
pdfxにはどのバージョンのNodeが必要ですか?
Node 20.3以降、またはBunです。
pdfxは自分のファイルを上書きしますか?
ディレクトリに書き込む場合は上書きしません。既存のファイルが置き換えられることはありません。-o file.pdf のように出力ファイルを自分で指定した場合は、そのファイルが置き換えられます。元のファイルを残したいときは、新しい名前を選んでください。
フィルターツールが一致しなかった場合はどうなりますか?
フィルターツール(IDが filter- で始まるもの)は、条件を満たすとファイルをそのまま通します。満たさないときは、pdfx は no match と表示し、終了コード0で終了します。バッチでは、そのようなファイルは失敗ではなく、不一致として数えられます。