要点
重い PDF のサイズは、ほぼすべてが画像によるものです。タイプした文字だけのページは 20〜50 KB、300 dpi のカラーでスキャンしたページは 1〜3 MB あります。PDF の圧縮とは、こうした画像を低い解像度や品質で再エンコードすることで、ファイル内のほかの要素には縮める価値がありません。ほとんどが文字の文書なのに大きすぎる場合は作り方に問題があり、対処法も変わります。
バイトはどこにあるか
PDF の構造を開くと、3 種類の中身が見つかります。
- テキストとベクター図形:コンパクトな命令(「このグリフをここに描く」)として保存され、ZIP と同じアルゴリズムですでに圧縮されています。100 ページの小説でも 1 MB 未満です。ここで得られるものはありません。
- フォント:どこで開いても同じ見た目になるよう埋め込まれています。CJK のフルフォントは 5〜15 MB になることもありますが、PDF を作るソフトは通常、使っているグリフだけを埋め込み(「サブセット化」)、数十 KB に抑えます。フォントのせいで重い PDF は、サブセット化をオフにして書き出されたものです。圧縮ではなく、書き出し直してください。
- 画像:写真、スキャン、ロゴ、そしてよくある原因であるスキャンしたページ。中身が何であれ、1 ページが 1 枚の大きな画像になります。
スマートフォンでスキャンした 12 ページの賃貸契約書は、300〜400 万画素の JPEG が 12 枚です。25 MB の出どころはそこで、アップロードフォームが受け付けないのもそれが原因です。
「PDF 圧縮」がしていること
PDF 圧縮ツールが行う有効な処理は一つだけです。各画像を見つけてデコードし、より小さく再エンコードします。JPEG の品質を下げるか、解像度を下げるか、その両方です。テキスト層、リンク、しおりには手を付けません。効いてくる設定は 3 つです。
- 解像度。 OCR や印刷に必要なのは 300 dpi のスキャンです。画面上では 150 dpi でも見た目は同じで、ピクセル数は 4 分の 1 になります。画面でしか見ないフォームなら 100〜120 dpi まで下げられます。解像度を半分にすると画像サイズは 4 分の 1 になり、これが群を抜いて大きな効果を持ちます。
- JPEG の品質。 95 から 75 に下げると、文書では見た目をほとんど変えずに約 60% 削減できます。60 を下回ると、文字の輪郭がにじみ始めます。
- カラー。 白黒の書類を RGB でスキャンしたものは、1 チャンネル分の内容に 3 チャンネル分の情報を持っています。グレースケールにすると 3 分の 1 減り、きれいな文字のページを完全な白黒(1 ビット、CCITT または JBIG2 エンコード)にすると 90% 減ることもあります。
PDF 圧縮はこれをブラウザ内で行います。文書は手元のマシン上で PDF.js によってデコードされ、各画像が再エンコードされ、pdf-lib でファイルが組み立て直されます。ダウンロード前に仕上がりサイズが表示されます。結果が元より大きくなる場合は元のファイルを残します。これは画像がもともと小さかった場合に起こり、そのファイルには圧縮が解決策にならないことを意味します。
圧縮では届かないとき
- 上限がとても小さく、文書が長い。 40 ページのスキャンは、読める品質のままでは 2 MB に収まりません。フォームが実際に求めているページだけに PDF 分割してください。「契約書をアップロード」という欄の多くが求めているのは署名ページで、別紙ではありません。
- すでに圧縮済み。 圧縮ツールを 2 回かけても、画像が劣化するだけです。ツールの表示する削減率が数パーセントなら、そこで止めてください。
- 重さの原因がフォントや埋め込みファイル。 添付ファイル、3D モデル、フルフォントを含む PDF もあります。元の文書(Word、Google ドキュメント、デザインツール)から「標準」や「最小サイズ」の設定で書き出し直してください。
- 本来テキストであるべきスキャン。 タイプした手紙を印刷してスキャンすると、元の手紙の 100 倍重くなります。元のファイルがあれば書き出し直してください。スキャンしかない場合、OCR をしてもサイズは減りません。画像はそのまま残り、その上にテキストが加わるだけです。
試す順番
- 中身を確認する:スキャンなら圧縮、タイプした文書なら書き出し直しを想定します。
- 150 dpi、品質 75 で圧縮する。「25 MB → 5 MB 未満」のケースは、たいていこれだけで解決します。
- まだ大きい:グレースケールにし、次に 120 dpi に下げる。
- まだ大きい:分割して、必要なページだけを送る。
- 最後の手段:控えめな解像度で PDF を画像に変換し、それを画像を PDF に変換します。すべてが 1 ページ 1 枚の JPEG に平坦化され、ピクセル数を直接コントロールできます。テキスト層は失われるので、誰も検索やコピーをしない文書に限って使ってください。
圧縮後に確認すること 2 つ
結果を開き、いちばん小さい文字(署名、脚注、印影の文字)を拡大して確認します。圧縮しすぎの影響が最初に表れるのはそこです。また、PDF が証明書でデジタル署名されている場合、再エンコードすると署名は無効になり、受信者には「署名後に変更されています」と表示されます。こうしたファイルで安全にサイズを減らせるのは分割だけですが、それでも署名は壊れます。元のファイルを送り、上限について先方と相談してください。