メインコンテンツへスキップ
Tooletto

PDFのファイルサイズがなぜこんなに大きいのか(そして実際に解決する方法)

PDFは単一の形式ではなく、一種のコンテナです。そのサイズはほぼすべて、内部に埋め込まれたものによって決まります。PDFが肥大化する本当の原因と、実際に効果のある対策を解説します。

· 読了時間 1

PDFはコンテナであり、コンテナ自体はごく小さい

「なぜこのPDFはこんなに大きいのか」という疑問の背後にある誤解は、たいていPDFをプレーンテキストファイルのような単一で均質なファイル形式として扱うところから始まります。しかし実際のPDFは、ZIPアーカイブに近い発想のコンテナ形式であり、ページレイアウトの指示、埋め込みフォント、埋め込み画像、ベクター図形、メタデータといった、それぞれ内部表現の異なる本質的に別種のコンテンツを一つにまとめたものです。コンテナ構造そのもの — PDFに実際に固有の部分 — は小さく、埋め込み画像や特殊なフォントを含まないプレーンテキストと単純なレイアウトだけのPDFは、ページ数がいくら多くても通常わずか数キロバイトにしかなりません。PDFが数十メガバイトや数百メガバイトにまで膨れ上がるときは、そのサイズはコンテナ形式そのものではなく、そのコンテナの中に埋め込まれたものに由来しています。だからこそ「なぜPDFがこんなに大きいのか」には、形式に内在する性質などではなく、ほぼ必ず特定できる具体的な答えがあるのです。

圧倒的に多い原因 — 印刷解像度のまま保存されたスキャンページ

紙の書類をスキャンして作られた文書は、ファイル形式のレベルで見ると実はテキスト文書ではまったくありません。1ページごとに1枚の全ページ写真がPDFコンテナに包まれて並んでいるだけであり、写真に適用されるファイルサイズのルールがそのままここにも当てはまります。スキャナーは既定で300dpi以上で取り込むことが多く、これは物理的な紙への印刷向けに調整された解像度で、画面にしか表示されない文書が実際に必要とする以上、あるいは画面が表示できる以上のピクセルデータを含んでいます。印刷解像度で取り込まれた10ページのスキャン文書が日常的に数十メガバイトに達してしまうのはまさにこのためです。それはテキスト10ページ分ではなく、フル解像度の写真10枚分であり、その解像度の写真は、通常の画面で見たときに実際に伝えている視覚情報の量にかかわらず、本質的に大きなものになります。

これはまた、本当にテキストベースのPDFではしばしば起こらないほど、スキャンされたPDFが圧縮に劇的に反応する理由でもあります。各ページの画像を、画面表示に見合った解像度と、やや積極的でも画面上では妥当な圧縮レベルで再エンコードするだけで、オンラインでの見た目の読みやすさをほとんど、あるいはまったく損なうことなく、スキャン文書を70〜90パーセント縮小できることがあります。元のファイルが、画面がそもそも使い切れないほどはるかに多くのピクセルデータを抱えていたからです。

埋め込みフォントが、多くの人が思う以上に重要な理由

どんな端末でも、インストールされているフォントに関係なく同一の見た目でレンダリングされる必要があるPDFは、フォントを名前で参照して閲覧側のシステムに一致するものがあることを期待するのではなく、実際に使用しているフォントファイルそのものを文書内に直接埋め込むのが一般的です。これは信頼性の高い一貫したレンダリングのためには正しい設計判断ですが、実際のサイズという代償を伴います。埋め込まれたフォントファミリーは、特に複数のウェイトやスタイルを含む場合、それ以外はほぼすべてテキストであるはずの文書に数百キロバイト単位で容易に上乗せされます。この影響は、中国語・日本語・韓国語のテキストを使う文書でとりわけ大きくなります。これらの文字体系はラテン文字のフォントが必要とする約100文字とは異なり、何千もの個別のグリフを必要とするため、CJKフォントを丸ごと埋め込むとそれだけで数十メガバイトに達することがあり、多くの場合、それ以外は控えめな文書の中で単独では最大の構成要素になります。

きちんと作られたPDF生成ツールは、フォントファイル全体ではなく、文書が実際に使用しているグリフの部分集合だけを埋め込むことでこの問題に対処しており、そのぶんサイズの増加は実際に存在するテキスト量に比例したものにとどまります。逆に、文字数の多い文字体系について実際に使われているグリフだけでなく、サブセット化されていないフォントファイル全体を埋め込んでしまう文書は、ページ上のテキストが本来必要とする量の何倍ものフォントデータを抱え込むことになりかねません。

編集履歴の残留と、冗長な内部構造

一部のPDF編集の仕組み、特に文書全体を書き換えるのではなく編集のたびにファイル末尾に追記していく増分保存(インクリメンタルセーブ)のパターンでは、編集前のコンテンツが目に見える形では表示されなくなっていても、技術的にはファイル内部に残り続けることがあります。編集履歴が整理されないまま、文書内部に静かに蓄積していくようなものです。この方法で何度も編集を重ねたPDFは、現在目に見えているコンテンツから想像されるよりも、意味のある量だけ多くのデータを抱えていることがあります。内部に保存されているものの一部が、もう誰にも実際には表示されていないからです。既存の構造への追記を続けるのではなく、文書の現在の表示状態からファイルを再構築するプロセスで保存し直すことで、この余分なデータは取り除かれます。

本当に効果があること、効果がないこと

文書が実際にどう閲覧されるかに見合った解像度と圧縮レベルで、埋め込まれた画像を再エンコードすることが、最も効果の高い単一の対策です。これは、サイズ過多になったPDFの圧倒的多数において肥大化の本当の原因 — 最終的な用途が必要とする以上にはるかに高い忠実度で取り込まれたり埋め込まれたりした画像データ — に直接働きかけるからこそ効果的です。文書の内部構造を再構築し、増分編集の残骸を取り除くことも、規模は小さいながらも本当に効果のある二番目の手段です。一方、あまり意味のある効果を生まないのは、すでに保存済みのPDFに対して汎用のファイル圧縮ユーティリティをかけることです。PDFの閲覧ソフトや生成ツールは、標準的でよく理解された圧縮方式を使って埋め込みコンテンツの大部分をすでに内部的に圧縮しているため、ファイル全体をさらに別の汎用圧縮レイヤーで包んでも、通常は1〜2パーセント程度しか節約できません。これは実際に埋め込まれた画像や構造を再処理する場合に比べて明らかに劣ります。すでに圧縮済みのファイルには、無関係な二度目の圧縮パスが見つけられるほどの冗長性がほとんど残っていないからです。

関連ツール

ブログの他の記事