PDF は何トークン?4 社の課金ルール、1 ページ 15-2,100
目次
PDF をファイルとしてモデルに送ると、ベンダーごとに異なるルールで課金されます。GPT-6 はページの本文のトークン数に、1 ページあたり約 15 を加算します。Claude は本文に 1 ページあたり 1,558 トークンを加算します。Gemini は 1 ページあたり 515 トークンで、本文はカウントしません。Qwen 3.8 は本文に 1 ページあたり 2,098 を加算します。同じページの文字量を増やしながら送信して、このルールを測定しました。さらに 10 文書を 15 モデルに送り、正しく回答できる範囲で、文書の種類ごとに最も安い送信方法を調べました。
TL;DR
- PDF をファイルとして送ると、1 ページあたり本文に GPT-6 は 15 トークン、Claude は 1,558、Qwen 3.8 は 2,098 を加算します。Gemini は一律 515 で、本文は無料です。
- 抽出したテキストでは、グラフに関する 150 問とスキャン文書に関する 105 問のどちらも正答数は 0 でした。
- ページごとに送信方法を切り替えると、Claude Sonnet 5.5 で混在文書の入力が 17,228 トークンから 6,543 に減り、12 問すべてに正答しました。
- 120 ページの PDF から必要な 4 ページだけを送ると、Claude Sonnet 5.5 の入力は 253,822 トークンから 8,758 に減りました。
文書をモデルに送る方法は?
ファイルとして送る、各ページを画像にして送る、先にテキストを抽出して送る、の 3 通りです。
import base64
import pymupdf # pip install pymupdf
doc = pymupdf.open("report.pdf")
b64 = lambda data: base64.b64encode(data).decode() # binary written as text, so it fits in JSON
# 1. As a file. The vendor decides how to read it.
as_file = [{"type": "file", "file": {"filename": "report.pdf", # OpenAI-compatible chat
"file_data": "data:application/pdf;base64," + b64(open("report.pdf", "rb").read())}}]
as_document = [{"type": "document", "source": {"type": "base64", # Anthropic Messages API
"media_type": "application/pdf", "data": b64(open("report.pdf", "rb").read())}}]
# 2. As page images. You render each page; any model that accepts images takes these.
as_images = [{"type": "image_url", "image_url": {"url": "data:image/jpeg;base64," +
b64(page.get_pixmap(dpi=72).tobytes("jpeg"))}} for page in doc]
# 3. As text. The text layer is the selectable text stored in a PDF. A scan has none.
as_text = "\n\n".join(page.get_text() for page in doc)
chat エンドポイントで 15 モデルが受け付けた入力は次のとおりです。
| モデル | PDF ファイル | ページ画像 | テキスト |
|---|---|---|---|
| GPT-6.1 Sol、GPT-6 Luna | 対応 | 対応、1 リクエストあたり最大 50 枚 | 対応 |
| Claude Opus 5.5、Sonnet 5.5、Haiku 5.5 | 対応 | 対応 | 対応 |
| Gemini 3.1 Pro、Gemini 3.8 Flash | 対応 | 対応 | 対応 |
| Qwen 3.8 Max、Qwen 3.8 Flash | 対応 | 対応 | 対応 |
| Qwen 3.6 35B(重み公開)、DeepSeek V4.1 Flash、GLM 5.3 Flash、Kimi K3 | 非対応 | 対応 | 対応 |
| GLM 5.3、DeepSeek V4 Pro | 非対応 | 非対応 | 対応 |
ページ画像は、すべての視覚対応モデルが受け付けます。重みが公開されていて、ファイル入力には対応しない 4 モデルも同様です。今回のエンドポイントでは、Gemini に PDF を画像パート内の data URL として渡しました。Google 自身の API ではインラインデータとして渡します。
モデルが本当にファイルを読んだか確認するには?
ファイルにしかない情報を質問し、入力トークン数も確認します。非対応の入力は 400 エラーになる場合もあれば、無視されたままモデルが回答する場合もあります。今回の検証では、視覚非対応の 2 モデルは画像パートを無視し、2 ページの文書に対して入力トークン数 27 と 98 で回答しました。また、ファイルの代わりに URL を渡したあるモデルは、内容を捏造して回答しました。
r = client.chat.completions.create(model=model, messages=[{"role": "user", "content": as_file + [question]}])
read_it = "MF-OPS-2291" in r.choices[0].message.content # a string found only in the document
plausible = r.usage.prompt_tokens > 200 * len(doc) # a dropped file leaves a few dozen tokens
ページの種類を判定するのにモデルは不要です。後述する送信方法の振り分けでは、この判定を使います。
def kind(page) -> str:
if len(page.get_text().strip()) < 40:
return "scan" # no text layer: needs OCR or an image
if page.get_images() or len(page.get_drawings()) > 60:
return "visual" # a picture or a chart drawn on the page
return "text"
PDF ファイルのトークン数は各社でどう計算される?
4 社それぞれルールが異なります。各ページの単語数を 0、80、250、500、約 670 とした 6 ページの PDF を作成しました。各ページにグラフを追加した版も作り、それぞれファイルと抽出テキストの両方で送信しました。
| ベンダー | PDF をファイルとして送った場合のトークン数 |
|---|---|
| GPT-6 | 本文のトークン数に 1 ページあたり 14.5 を加算。画像のあるページでは約 650-1,700 を追加 |
| Claude | 本文のトークン数に 1 ページあたり正確に 1,558 を加算。グラフがあっても追加なし |
| Gemini | 内容に関係なく 1 ページあたり 515。本文はカウントしない |
| Qwen 3.8 | 本文のトークン数の約 0.94 倍に、1 ページあたり 2,098 を加算。グラフがあると約 770 を追加 |
トークンはモデルの課金単位で、英語の単語の約 4 分の 3 に相当します。同じ系列のモデルでは、カウントの差は数トークン以内でした。
少なくとも今回測定した経路では、2 社のルールが公開情報と異なりました。Google のドキュメントでは 1 ページ 258 トークンで、PDF 内のテキストには課金しないとしています。実測は 1 ページ 515 でしたが、本文が無料という点は記載どおりでした。OpenAI は PDF を抽出テキストとページ画像としてモデルに渡すとしていますが、今回、テキストだけのページには画像分のコストがありませんでした。Anthropic は各ページをテキストと画像として処理し、通常 1,500-3,000 トークンとしています。これは実測と一致します。
このルールから、次のことが分かります。
- Claude と Qwen では、文字の少ないページほど割高です。1 行だけのページでも、ファイルなら 1,558 または 2,098 トークン、テキストなら十数トークンです。
- Gemini では、文字の多いページが割安です。約 670 単語のページも白紙と同じ 515 トークンです。本文だけを送ると約 800 トークンになります。
- GPT-6 では、画像のないページはファイルでもテキストと同じコストです。ページ全体が画像であるスキャンページは、実測で 2,868 トークンでした。
1 ページ約 250 単語のテキストだけで構成された 12 ページのレポートをファイルで送ると、GPT-6.1 Sol では 6,028 トークン、Gemini 3.8 Flash では 6,441、Claude Sonnet 5.5 では 27,297、Qwen 3.8 Flash では 30,934 でした。抽出テキストは、15 モデル全体で 5,924-8,716 トークンでした。
抽出テキストでは回答できないのはどんな場合?
テキストレイヤーにない情報が必要な場合です。各質問を回答に必要な情報で分類し、15 モデルの結果を合算しました。
| 送信方法 | 本文 | 表のセル | グラフ | スキャンページ |
|---|---|---|---|---|
| 抽出テキスト | 300 問中 297 | 170 問中 168 | 150 問中 0 | 105 問中 0 |
| OCR 後にテキスト送信 | 105 問中 104 | |||
| PDF ファイル | 186 問中 186 | 103 問中 103 | 90 問中 90 | 63 問中 62 |
| ページ画像、110 dpi | 260 問中 258 | 148 問中 148 | 130 問中 130 | 91 問中 89 |
| ページ画像、72 dpi | 260 問中 257 | 148 問中 142 | 130 問中 130 | 91 問中 88 |
dpi は 1 インチあたりのドット数で、ページを画像化する際の解像度です。72 dpi では、US Letter のページは 612 × 792 ピクセルになります。OCR は光学文字認識で、画像から文字を読み取るソフトウェアです。今回はオープンソースの Tesseract をローカルで実行しました。
抽出テキストでは、すべてのモデルでグラフとスキャン文書の正答数が 0 でした。数値がテキストに含まれていないためです。OCR を使えばスキャンしたレポートをテキストの料金で読めましたが、グラフは読めませんでした。グラフを含む 15 枚のスライドを OCR にかけた結果は、試した 2 モデルとも 7 問中 0 問でした。今回の表は単純な格子状だったため、テキスト抽出後も情報が保たれました。結合セルや、列内で折り返されたテキストは難しくなるので、実際に使う文書で検証してください。
文書入力のコストを下げるには?
方法は 7 つあり、そのうち 6 つを測定しました。
1. 課金ルールに合わせて送信方法を選ぶ。テキストだけのページはテキストで送ります。それ以外は Gemini ならファイル、他社なら 72 dpi のページ画像を使います。ページ画像のコストは、ページ内の文字量に左右されないためです。文字の多い 6 ページの IRS 書式は、Claude Sonnet 5.5 でテキストなら 13,635 トークン、ファイルなら 22,871、72 dpi の画像なら 4,015 でした。どの方法でも 3 問すべてに正答しました。
2. ページごとに送信方法を切り替える。実際の文書には複数の種類のページが混在します。上の kind 関数で分類し、テキストページはテキスト、画像のあるページは 72 dpi の画像、スキャンページは OCR を通して送ります。9 ページの文書(テキスト 4 ページ、グラフ 3 ページ、スキャン 2 ページ)に対する 12 問の結果は次のとおりです。
| モデル | ファイル | ページごとに振り分け | 全ページを 72 dpi の画像で送信 |
|---|---|---|---|
| GPT-6 Luna | 15,106、12 問正答 | 5,140、12 問正答 | 5,750、9 問正答 |
| Claude Sonnet 5.5 | 17,228、12 問正答 | 6,543、12 問正答 | 6,257、12 問正答 |
| Qwen 3.8 Flash | 25,036、12 問正答 | 5,313、12 問正答 | 4,710、12 問正答 |
| Gemini 3.8 Flash | 5,043、12 問正答 | 7,110、12 問正答 | 10,278、12 問正答 |
3 社では、ファイル送信に比べて入力を 62%-79% 削減し、全問正答を維持できました。Gemini は元からファイルが最安です。
3. 画像の解像度を下げる。ただし本文には使わない。ページ画像のトークン数はピクセル数を減らすと下がります。例外は Gemini で、どのサイズでも同じ課金でした。ラベルの大きいグラフのスライドは 36 dpi でも読め、試した 6 モデルすべてが 7 問中 6 問以上に正答しました。Claude Haiku 5.5 では 15 枚で 2,874 トークンとなり、ファイルの 23,949 より少なくなりました。本文には 72 dpi が必要でした。50 dpi でも Claude Haiku 5.5 と Gemini は 7 問すべてに正答しましたが、GLM 5.3 Flash は 7 問中 2 問に落ちました。GPT-6 Luna は 96 dpi 未満のどのサイズでもページ画像で正答を取りこぼしたため、ファイルかテキストを渡してください。
4. OpenAI では、画像のあるページに detail の low を指定する。Responses API は PDF ファイルに detail フィールドを指定できます。GPT-6 Luna に low を指定すると、15 枚のスライドはデフォルトの 22,155 トークンから 9,985 に、スキャンしたレポートは 34,396 から 11,387 に減り、すべての質問に正答しました。テキストだけのページは変わりませんでした。
5. 必要なページだけを送る。120 ページのマニュアルについて、まず GPT-6 Luna に抽出テキスト(46,420 トークン)を読ませ、4 つの質問それぞれに必要なページを特定させました。次に、その 4 ページだけの PDF を Claude Sonnet 5.5 に送り、8,758 トークンで 4 問すべてに正答しました。ファイル全体は Claude で 253,822 トークンになるため、最初の処理を含めても入力コストは $0.508 から $0.022 に下がりました。
6. 安いモデルで文字起こしし、大きなモデルで推論する。安い視覚対応モデルで、15 枚のグラフのスライドを Markdown の表に変換しました。費用は $0.002-$0.011 でした。その後、Claude Opus 5.5 は約 2,000 トークンの文字起こし結果から、$0.010 で 7 問すべてに正答しました。ファイルで送ると入力は 23,949 トークン、$0.096 です。文字起こし結果は保存して、後の質問にも使えます。
7. 文書をキャッシュし、待てる処理はバッチにする。PDF にキャッシュの区切り(Anthropic の API の cache_control マーカー)を設定すると、Claude Sonnet 5.5 への 6 回の質問は $0.461 から $0.117 に下がりました。最初に 38,364 トークンをキャッシュへ書き込み、続く 5 回はそれを 1 回約 $0.004 で読み込みました。バッチ処理だけは測定していません。OpenAI、Anthropic、Google はいずれも、24 時間以内に結果を返すバッチ API を半額としています。Anthropic はキャッシュの割引と併用できるとしています。
注意したい料金の境界があります。120 ページの PDF は Claude で 250,000 トークンを超えます。Claude Haiku 5.5 では、100,000 トークンを超えるプロンプトは 5 倍の料金 で課金されます。同じマニュアルの抽出テキストは 68,382 トークンです。
Word ファイルはどう扱う?
変換します。試した 6 モデルのうち、.docx をファイルとして受け付けたのは GPT-6.1 Sol と GPT-6 Luna だけでした。どちらもテキストしか読みません。これは、PDF 以外のファイルについての OpenAI のドキュメントどおりです。テキストと表なら pandoc で Markdown に変換すれば十分です。9 ページの契約書は 3,144 トークンになり、すべてのモデルが 7 問すべてに正答しました。グラフを埋め込んだメモは、この方法では 5 問中 2 問でしたが、LibreOffice で PDF に変換すると 5 問すべてに正答しました。入力は Gemini 3.8 Flash で 1,217 トークン、Claude Sonnet 5.5 で 3,827 でした。
測定方法
対象は 10 文書です。7 つは生成した文書(12 ページのレポート、8 ページの財務表、グラフを含む 15 枚のスライド、レポートのスキャン版、120 ページのマニュアル、Word の契約書、Word のメモ)、3 つは公開文書(論文「Attention Is All You Need」、IRS Form W-9、NIST の AI リスク管理フレームワーク)です。それぞれに、答えが一意に検証できる質問を 3-7 問用意しました。
主測定では、各文書を各送信方法で各モデルに、1 リクエストで送信しました。2026 年 10 月 10 日に 568 リクエストを実行し、566 件が成功しました(GPT-6 Luna が 120 枚のページ画像を 2 回拒否しました)。課金ルールとコストの測定では、同日に各社の低価格モデルを 1 つずつ使い、さらに 176 リクエストを実行しました。キャッシュのテスト(Messages API)と detail のテスト(Responses API)を除き、すべて Synthorai ゲートウェイの OpenAI 互換 chat エンドポイントを通しました。金額には定価を使っています。
トークン数は、今回の経路でエンドポイントが返した値です。同じモデルでも、提供元によってファイルの前処理が異なることがあります。このルールを前提にする前に、自分の経路で 6 ページのテストを実行してください。質問数は文書あたり 3-7 問なので、全問正答した方法でも、読めることを確認しただけで、情報が一切失われないと証明したわけではありません。
よくある質問
PDF の 1 ページは何トークン?
ベンダーによります。ファイルとして送ると、GPT-6 は本文に約 15 トークン、Claude は本文に 1,558、Gemini は本文無料で一律 515、Qwen 3.8 は本文に約 2,098 を加算します。スキャンページの実測は、GPT-6.1 Sol で 2,868 トークン、Claude Sonnet 5.5 で 1,579 でした。
PDF と抽出テキストはどちらが安い?
テキストだけのページでは、Gemini 以外はすべて、抽出テキストのほうが安いか同額です。Gemini は本文をカウントしないため、文字の多いページはファイルのほうが少ないトークンで済みます。GPT-6.1 Sol では、ファイルとテキストのコストはほぼ同じです。抽出テキストでは、グラフやスキャンページに関する質問には回答できません。
LLM はスキャンした PDF を読める?
ファイルかページ画像として渡せば読めます。スキャンから抽出したテキストは空になり、今回のテストでは 105 問中 0 問でした。ローカルで OCR を実行して結果を送ると、テキストの料金で 105 問中 104 問に正答しました。印刷された文字のスキャンには最も安い方法です。
PDF ファイルを直接受け付けるモデルは?
今回のテストでは、GPT-6.1 Sol、GPT-6 Luna、Claude 5.5 の 3 モデル、Gemini 3.1 Pro、Gemini 3.8 Flash、Qwen 3.8 Max、Qwen 3.8 Flash です。DeepSeek V4.1 Flash、GLM 5.3 Flash、Kimi K3、Qwen 3.6 35B はページ画像を受け付けましたが、ファイルは受け付けませんでした。
長い PDF のコストを減らすには?
送るページを絞り、各ページを最も安い方法で送り、送った内容を再利用します。安いモデルで必要なページを選ぶと、Claude Sonnet 5.5 の 120 ページのリクエストは、入力 253,822 トークンから 8,758 に減りました。種類ごとにページの送信方法を切り替えると、混在文書の入力を 62%-79% 削減できました。キャッシュを使うと、同じ文書に対する 6 回の質問は $0.461 から $0.117 に下がりました。
関連記事
- 画像は何トークン?:ページ画像の送信に適用される画像の課金ルール。
- Claude Haiku 5.5 の料金:長い PDF が超える 100,000 トークンの境界。
- プロンプトキャッシュの書き込みコスト:文書をキャッシュするとき、最初のリクエストにかかる費用。