圧縮が削るのは冗長さで、中身ではない
PDF はページを描画命令として持ちます。フォントを伴うテキスト、指定解像度の画像、ベクターのパス、そして構造ツリーです。圧縮が削れる冗長さは三種類あります。表示に必要な解像度より高い画像、数文字しか使っていないのに一式埋め込まれたフォント、そして編集後にどこからも参照されなくなったオブジェクトです。
削れないのは中身です。どのページも 600 dpi のスキャン写真なら、ファイルを小さくする方法はピクセルを捨てることだけです。それは画質の判断であって、最適化ではありません。
出力が大きくなる三つの場合
元より大きくなるのは、ほぼ次のどれかです。
- すでに最適化済みだった。フォントをサブセット化し画像を縮小したファイルにもう一度かけると、再エンコードしかできません。近い画質で JPEG をかけ直すと、細部は増えずサイズだけ増えます。
- 元が JPEG で保存されたスキャンで、圧縮ツールが可逆形式へ変換した、または包み直した。可逆は定義上大きくなります。
- 出力時にリニアライズ、署名、暗号化が行われた。オブジェクトストリーム、署名辞書、増分更新は、それぞれページとは無関係なバイトを足します。
ではどうするか
役に立つ問いは「どう圧縮するか」ではなく「何が容量を食っているか」です。設定を触る前に、二つの事実で範囲が絞れます。
- ページ上の文字を選択してみる。選べるならテキスト層があり、重さはフォントと画像にあります。ページの画像ではありません。
- ファイルサイズをページ数で割る。文字の文書はふつう 1 ページ数十 KB、スキャンは 1 ページ数百 KB から数 MB です。
- スキャンなら解像度を下げ、内容が許すならグレースケールにする。メガバイトはそこにあります。
- 1 ページあたりがもともと小さいなら、触らない。300 KB の文字 PDF をかけ直しても 250 KB を切ることはまれで、大きくなることのほうが多いです。
「指定サイズまで圧縮」について
目標サイズを指定できるツールがあります。「2 MB に」というものです。これは別の操作で、推定値が目標に収まるまで画像の解像度と画質を下げ続けます。ページが読めなくなっても収まるまで下げます。提出先に厳格な上限があるなら有効ですが、ただ小さくしたいだけなら画質を固定するほうが安全です。