PDF圧縮できない原因|縮まないPDFを診断して分かったこと
NotebookLMへ200MB以上あるPDFを入れるために、Claudeに圧縮ソフトを作らせてみた。ところが試してみると、同じ設定でも縮むPDFと縮まないPDFがある。フリーソフトで実験しても自作ツールでも結果はほぼ同じだった。
原因はツールではなくPDFの中身だった。そしてさらに調査を進めると、NotebookLMで弾かれる理由も単純な容量超過だけでは説明できなかった。
この記事はPDF圧縮の手順ではなく、「なぜ縮むのか」「なぜ縮まないのか」を観察した記録である。
まとめ
圧縮するだけならフリーソフトで十分であるが、細かい機能をつけるなら自作してもよい
PDFが縮む・縮まない理由はフォーマットによって全部違う
圧縮の前に「何が入っているか」を診断することが先決
文字数カウントは正確な判定基準ではなく、操作のトリガーとして使う

注意点
この記事は技術的な観察記録だ。ツールの配布はしないし意味もない。手順の再現性も保証しない。PDFの仕様や挙動はファイルによって大きく異なる。
PDF圧縮できない問題を調べ始めた
最初に疑ったのはコードだった。
圧縮処理は動いているのにファイルサイズが変わらない。エラーも出ないし、ログも正常に見える。原因を調べるために、まずPDFの中身を診断することにした。PDFは「コンテナ」なので、中に何が入っているかによって圧縮の余地が全然違う。画像の圧縮フォーマットを調べると、CCITTFaxDecodeというものが大量に出てきた。
PDF圧縮できない原因はコードではなかった
PDFの中身を診断すると、画像の圧縮フォーマットが複数混在していることがわかった。フォーマットによって「縮まない理由」が全部違う。詳細は付録Fにまとめた。
縮まないPDFには、縮まない理由がある。
PDFが縮まない理由はフォーマットごとに違う
今回、同じDPI・画質設定でフリーソフトと自作ツールを比較した。
$$\begin{array}{|l|r|r|r|}
\hline
\text{ファイル} & \text{元サイズ} & \text{フリーソフト} & \text{自作ツール} \cr
\hline
\text{CCITT主体} & \text{328MB} & \text{22MB} & \text{24.6MB} \cr
\hline
\text{JPX主体} & \text{281MB} & \text{80MB} & \text{73.4MB} \cr
\hline
\text{JPX主体} & \text{414MB} & \text{136MB} & \text{128.8MB} \cr
\hline
\end{array}$$
結果はほぼ同等だった。フリーソフトでも縮む。
ただし、フリーソフトは「なぜ縮むか」を教えてくれない。CCITTFaxDecodeが多いから縮まない、JPXDecodeだからDPIを下げないと縮まない、非画像部分が重いからGhostscriptが必要、という診断ができない。縮まなかったときに次の手が打てないのが問題だ。
PDF圧縮より先にPDF診断が必要だった
まず診断してから圧縮するという順番が重要だとわかった。圧縮ツールを作ろうとして、最終的に「診断が先に必要だった」という結論に至ったのは少し皮肉だが、それがこの作業の一番の収穫だった。
NotebookLM PDF制限は容量だけでは説明できない
NotebookLMでは文字数が500,000語という制限もあるため、結合ソフト・圧縮ソフト共に文字数カウント機能をつけた。
文字数を確認しながら分割・再結合する操作をしたら、入れられるようになった。文字数カウントは正確な判定基準ではなく、操作のトリガーだったのかもしれない。その操作の過程でPDFの構造が整理されて、入れられるようになった可能性が高い。
また、大量のPDFをNotebookLMで扱う場合、複数ファイルを結合してソース数を減らすことで、コンテキストの断片化を防ぎ回答精度が上がるという利点もある。圧縮・結合という操作は、NotebookLMをうまく使うための前処理として機能する。

FAQ
Q. PDFの画像フォーマットはどうやって調べればいい?
A. PDF診断ツールやライブラリを使うと、CCITTFaxDecodeやJPXDecodeなどのフィルター情報を確認できる。圧縮前の切り分けとして有効だ。
Q. NotebookLMで通ったPDFと通らなかったPDFの違いは何だった?
A. 観測上はファイルサイズだけでは説明できなかった。OCR層やフォント構造の違いも影響している可能性がある。
Q. PDFを分割して再結合すると通ることがあるのはなぜ?
A. PDF内部構造が整理されるためと考えられるが、現時点では推測の域を出ない。再現条件は明確ではない。
Q. 圧縮で画質を落とすべきか、構造を直すべきか迷ったら?
A. まず診断する。原因が画像なのかフォントなのかで有効な対処は変わる。
付録A:PDFの画像フォーマット一覧
$$\begin{array}{|l|l|l|l|}
\hline
\text{フィルター} & \text{方式} & \text{対象} & \text{圧縮の余地} \cr
\hline
\text{DCTDecode} & \text{JPEG} & \text{グレー・カラー} & \text{△ DPI次第} \cr
\hline
\text{CCITTFaxDecode} & \text{FAX圧縮} & \text{白黒2値のみ} & \text{❌ 既に最適} \cr
\hline
\text{JPXDecode} & \text{JPEG 2000} & \text{グレー・カラー} & \text{❌ 既に高効率} \cr
\hline
\text{JBIG2Decode} & \text{白黒高圧縮} & \text{白黒2値のみ} & \text{❌ 外部ツール必要} \cr
\hline
\text{FlateDecode} & \text{zlib} & \text{何でも} & \text{○ JPEG化で縮む} \cr
\hline
\text{LZWDecode} & \text{古いzlib} & \text{何でも} & \text{△ 自動デコードされる} \cr
\hline
\text{RunLengthDecode} & \text{連長圧縮} & \text{何でも} & \text{△ ほぼ存在しない} \cr
\hline
\end{array}$$
補足:DPI推定はA4固定ではなく、PDFのMediaBoxから実際のページサイズを取得する必要がある。A3・B4・変形サイズのPDFではDPIがずれて正確なダウンサンプルができない。
付録B:縮まない理由の類型と対処
$$
\begin{array}{|l|l|l|}
\hline
\text{パターン} & \text{原因} & \text{対処} \cr
\hline
\text{CCITTFaxDecodeが多い} & \text{白黒2値で元が最適圧縮済み} & \text{高DPIのみJPEG化} \cr
\hline
\text{JPXDecodeが多い} & \text{JPEG 2000は既に高効率} & \text{DPIダウンサンプル} \cr
\hline
\text{非画像部分が重い} & \text{フォント・テキスト構造} & \text{Ghostscriptが必要} \cr
\hline
\text{JBIG2Decodeが多い} & \text{外部バイナリ必要} & \text{対応不可} \cr
\hline
\text{元が高圧縮済み} & \text{圧縮の余地がない} & \text{DPIを下げる} \cr
\hline
\end{array}
$$
付録C:PDFのフォント種類とNotebookLMの挙動
$$
\begin{array}{|l|l|l|}
\hline
\text{フォント種類} & \text{特徴} & \text{挙動} \cr
\hline
\text{MS-Gothic・MS-Mincho} & \text{本物のテキストPDF} & \text{文字数が多くなりやすく弾かれやすい} \cr
\hline
\text{HiddenHorzOCR・HiddenVertOCR} & \text{スキャン画像に隠しテキスト層} & \text{語数が少なくなりやすく通りやすい} \cr
\hline
\end{array}
$$
※NotebookLMの判定基準は文字数だけではない可能性がある。観測ベースの知見。
付録D:圧縮で「壊れる」パターン
縮まないとは別に、圧縮後に画像が壊れるケースがある。
代表的なのがCMYK画像だ。CMYKは印刷用のカラーモードで、古い発掘報告書の図版に使われていることがある。これをRGBに変換してJPEGで書き出すと、色が反転して黒つぶれが起きる。PDFビューワーはCMYKを正しく解釈して表示するが、圧縮ツールが内部でRGB変換を挟むと元の見え方と全く違う結果になる。CMYKはRGB変換せずそのままJPEGで書き出し、ColorSpaceを保持することで解決できる。
付録E:NotebookLMにソースを追加できない理由一覧
制限超過
ファイルサイズが200MBを超えている
PDFを圧縮するか、複数に分割してアップロードする。
(Google公式ドキュメント・確認済み)
文字数が500,000語を超えている
日本語は1文字≒1語換算。ファイルを分割して複数ソースに分ける。ただし実際の挙動はこの基準と一致しないケースがある。
(Google公式ドキュメント・確認済み/実挙動は観測ベース)
ソース数が上限に達している
無料版50個・Pro版300個。新しいノートブックを作るか不要なソースを削除する。
(Google公式ドキュメント・確認済み)
PDFの構造・中身の問題
テキストレイヤーがない(画像PDF)
スキャンのみのPDFはNotebookLMが文字を読み取れない。GoogleドライブにアップしてGoogleドキュメントとして開くとOCRがかかる。ただし古い日本語印刷物はOCR精度が低い場合がある。
(一次資料確認済み・記述なし/対処法は観測ベース)
隠しテキスト層(HiddenHorzOCR・HiddenVertOCR)
スキャン画像の上にOCRテキストを透明な層として重ねた構造。語数が少なくカウントされるため、逆に通りやすいこともある。山王廃寺(MS-Gothic主体)は弾かれたが、鳥羽遺跡(HiddenHorzOCR主体)は通った。
(一次観測ベース)
フォント・エンコーディング問題
古い日本語PDFに含まれるDFPLeiSho・DFPHSGothic(Identity-H)や90ms-RKSJ-H(Shift-JIS系)はテキストを正しく抽出できないことがある。GhostscriptやAcrobatで再書き出しすると改善する場合がある。
(一次観測ベース)
フォント未埋め込み
フォント情報がPDFに埋め込まれていない場合、テキスト抽出が失敗することがある。Acrobatで「名前を付けて保存」して再書き出しする。
(観測ベース)
パスワード保護・コピー制限
パスワードがかかっているか、テキストのコピーが制限されているPDFは読み取れない。
(一次資料確認済み・記述なし)
DRM保護
DRMがかかった文書はテキストを取り出せない。権限がある場合は保護を解除する。
(観測ベース)
XFAフォームベースのPDF
XFAはPDF 2.0で非推奨となった古い仕様で、多くのパーサーが非対応。Acrobatで通常のPDFに変換する。
(観測ベース)
ファイル名の問題
特殊文字・絵文字・長すぎるファイル名がアップロードを妨げることがある。シンプルな英数字のファイル名に変更して再試行する。
(観測ベース)
ファイルの破損
別の名前で保存し直してから再アップロードする。
(観測ベース)
環境・接続の問題
ブラウザ拡張機能のブロック
広告ブロッカーなどがアップロードスクリプトをブロックすることがある。シークレットモードで試すか、拡張機能を一時的に無効にする。
(観測ベース・複数報告あり)
連続アップロードによるスロットリング
短時間に何度もアップロードを繰り返すとサーバー側で制限がかかることがある。60分待ってからブラウザを再起動して再試行する。
(観測ベース)
ブラウザキャッシュの破損
キャッシュとCookieをクリアしてから再試行する。
(観測ベース・複数報告あり)
ネットワーク不安定・サーバー障害
時間をおいて再試行する。
(観測ベース)
アカウント・権限の問題
組織アカウントの管理者制限
学校・職場のアカウントでは管理者がNotebookLMへのアクセスを制限していることがある。管理者に有効化を依頼するか、個人アカウントで試す。
(一次資料確認済み・記述なし)
18歳未満のアカウント
NotebookLMは18歳以上のユーザーのみ利用可能。
(Google公式ドキュメント・確認済み)
Googleドライブの共有設定不一致
Googleドライブ経由でソースを追加する場合、NotebookLMで使っているアカウントと共有設定が一致している必要がある。
(Google Support・確認済み)
付録F:フォーマット別に縮まない理由
CCITTFaxDecode
FAX圧縮の規格で、白黒2値の画像に使われる。発掘報告書のような古いスキャンPDFに大量に含まれている。白黒2値の画像をJPEGに変換すると逆に膨らむ。JPEGはグレースケールやカラーを得意とする形式で白か黒しかない画像には向いていない。CCITTFaxDecodeはその用途においてすでに最適な圧縮をしているので、別フォーマットに変換しても縮まないし、むしろ大きくなる。「縮まない」のは圧縮ツールの失敗ではなく、元の画像フォーマットが正しく機能している証拠だ。
JPXDecode
JPEG 2000という高効率な圧縮形式。同じDPIで変換しても縮まない。DPIをダウンサンプルすることで縮む。
JBIG2Decode
白黒高圧縮。外部ツール(jbig2dec)が必要なため一般的なライブラリでは処理できない。
非画像部分が重いケース
フォントやテキスト構造は一般的なPDF圧縮ライブラリでは触れない領域。Ghostscriptのような別のツールが必要になる。
出典
PDF 1.7仕様書(Adobe)
Google NotebookLM公式ドキュメント

「最初に200MBと言われて信じた、というところから始まったのが全部の出発点だったんだよね。情報を疑うより先に動いた。」
「でもそれがあったから解剖できたんですよね。信じて動いて、詰まって、調べた。順番としては正しかったと思います。」
