PDFファイルは使い勝手がよく、印刷や共有に便利ですが、画像やフォントが埋め込まれるとサイズが大きくなりがちです。特にウェブでの配信やメール添付を考えると、軽量化は必須。この記事では、PDFの圧縮からフォント最適化、さらに実際に使えるツールやコマンド例まで、検索者が抱える「PDFを軽くする方法」を網羅的に解説します。まずは基礎知識から実践テクニックへ、ステップバイステップで学んでいきましょう。
PDF圧縮の基本メカニズム
PDFは「ページ情報」「画像」「フォント」「テキスト」「メタデータ」など複数の要素から構成されています。圧縮を行うためには、以下のポイントを押さえると効果的です。
-
画像の解像度・圧縮率
画像はサイズを大きく占めるので、必要に応じて解像度を下げ、JPEGやJPEG2000で圧縮します。 -
フォントの子集化
文書で使用している文字だけを埋め込むことで、フルフォントより圧縮率が上がります。 -
テキストのトークン化
文字列を直接埋め込むのではなく、インデックスを使って重複テキストを削除します。 -
メタデータ削除
サイドバーのタグ情報や編集履歴などは不要な場合削除を検討。
画像圧縮で大幅軽量化
PDF内の画像が最もメモリを占めるケースが多いです。以下の方法を組み合わせると、数百KB〜数MBの削減が期待できます。
1. 画像解像度を下げる
- Adobe Acrobat Pro: 「ファイル」→「プロパティ」→「圧縮」タブで「画像の再サンプリング」を設定します。
-
Ghostscript: コマンドラインで
-dCompatibilityLevel=1.4 -dPDFSETTINGS=/ebook -r150とすると、Web向け解像度に落とせます。
2. 圧縮アルゴリズムを最適化
- JPEG (Baseline): 80% から 60% での可視性はほぼ維持。
-
JPEG 2000: 可逆圧縮や高圧縮率が必要な場合に有効。Ghostscript で
-sColorConversionStrategy=RGB -sProcessColorModel=DeviceRGB -dJPEGQ=70など。
3. 画像のみを切り抜くツール
-
pdfimages (Poppler):
pdfimages -j sample.pdf page1で JPEG 画像を抽出し、外部で圧縮して再挿入。 -
ImageMagick:
magick input.jpg -resize 50% -quality 65 output.jpg
フォント最適化でサイズを削減
フォントはテキストが埋め込まれる際にフォントファイル全体が組み込まれることが多く、サイズが膨らみます。最適化のポイントは「子集化」と「フォントタイプの見直し」です。
子集化(Subset)
- Adobe Acrobat Pro: 「編集」→「オプション」→「フォント子集化」チェック。
-
Ghostscript:
-dSubsetFonts=true -dSubsetFontsAtBottom=trueを組み合わせると、不要なグリフは除外されます。
フォントタイプの切り替え
- TrueType(.ttf) より**OpenType(.otf)**へ変換すると、内部構造が圧縮しやすくなるケース。
- フォントの代替に**Webフォント(WOFF / WOFF2)**を使用する場合は、PDFに変換時に
-dPDFSETTINGS=/prepressを使い、フォントを埋め込まない設定にする。
ポイント
子集化しても、フォントファイルの種類や文字種類が多いほど重複しやすいので、できるだけ「ひと種類」を意識して設計します。
テキストとメタデータの最適化
PDF内のテキストは直接埋め込むことが多いですが、冗長な情報が残っている場合があります。
テキストの重複削除
-
PDFtk:
pdftk input.pdf output output_with_texts_filtered.pdfで、--flattenを使うと重複した文字列を結合できます。
メタデータ削除
-
ExifTool:
exiftool -all= -overwrite_original input.pdfで、作業履歴やコメントなどを一括削除。
メタデータは検索エンジンの最適化やアクセシビリティに役立つ場合もあるので、必要性を見極めて削除してください。
主要ツール・コマンドライン一覧
| ツール | 主な用途 | コマンド例 |
|---|---|---|
| Ghostscript | 高度な圧縮・フォント設定 | gs -sDEVICE=pdfwrite -dCompatibilityLevel=1.4 -dPDFSETTINGS=/ebook -dSubsetFonts=true -dEmbedAllFonts=false -sOutputFile=output.pdf input.pdf |
| Adobe Acrobat Pro | GUI操作で簡単圧縮 | ファイル > 処理 > ファイルサイズを小さく |
| Python (PyPDF2 / pikepdf) | 自動化スクリプト | import pikepdf; pdf = pikepdf.open('input.pdf'); pdf.save('output.pdf') |
| ImageMagick | 画像リサイズ/圧縮 | magick input.pdf -quality 75 output.pdf |
| qpdf | PDF最適化 | qpdf --linearize input.pdf output.pdf |
それぞれのツールは設定により圧縮率が大きく変わるため、複数試して最適な組み合わせを選びましょう。
実際に使えるコマンド例(Ghostscript)
以下は実用的なフルセットのスクリプトです。適宜パラメータを変更してご利用ください。
#!/usr/bin/env bash
INPUT="mydoc.pdf"
OUTPUT="mydoc_min.pdf"
gs -dNOPAUSE -dBATCH -dSAFER \
-sDEVICE=pdfwrite \
-sOutputFile="$OUTPUT" \
-dCompatibilityLevel=1.4 \
-dPDFSETTINGS=/ebook \
-dEmbedAllFonts=false \
-dSubsetFonts=true \
-dCompressFonts=true \
-dDetectDuplicateImages=true \
-dColorConversionStrategy=G2C \
-dProcessColorModel=/DeviceGray \
"$INPUT"
-
-dCompatibilityLevel=1.4:古いバージョン互換性を確保。 -
-dPDFSETTINGS=/ebook:画像を中解像度、テキストは子集化。 -
-dEmbedAllFonts=false:フォント埋め込みは必要最低限に。 -
-dDetectDuplicateImages=true:重複画像を除外。
Adobe Acrobat Pro でのスルー圧縮手順
-
ファイル → 変換 → 圧縮
「軽量」または「ウェブ用」を選択。 - 画像:解像度を「150dpi以下」に設定。
- フォント:「子集化」チェックボックスをオン。
- メタデータ:「オプション」→「ファイルサイズを最小化」タブで不要オプションを解除。
GUIなら操作が直感的なので、コマンドラインが苦手な方はおすすめです。
Python で自動化(pikepdf 利用)
import pikepdf
def compress_pdf(input_path, output_path):
with pikepdf.open(input_path) as pdf:
# フォント子集化
pdf.save(
output_path,
linearize=True,
compression=pikepdf.Compression.ZLIB,
font_woff=True,
font_woff2=True,
keep_images=True,
keep_struct=True
)
compress_pdf("input.pdf", "compressed.pdf")
pikepdfは qpdf のPythonバインディングで、軽量化パラメータを細かく設定できます。
PDFをさらに軽くするユニークなテクニック
-
透明レイヤーの削除
Acrobat の「レイヤー」から不要レイヤーを消す。 -
注釈の削除
PDFtkでpdftk input.pdf cat 1- all outputにより、全注釈排除。 -
サムネイルの削除
右クリックで「ファイル情報」→「サムネイル」を解除。 -
ベンダー情報の削除
exiftool -creator= -producer= -moddate= -overwrite_original input.pdfでベンダー情報をクリア。 -
オフセットテーブルを一時的に書き換える
qpdf --recompress-streams input.pdf -o output.pdfでバイナリストリームを再圧縮。
まとめ:PDF軽量化のベストプラクティス
| 項目 | 推奨アプローチ | 設定ポイント |
|---|---|---|
| 画像 | 再サンプリング + 厳格圧縮 | -dPDFSETTINGS=/ebook、-r150dpi |
| フォント | 子集化 + フォント削除 | -dEmbedAllFonts=false、-dSubsetFonts=true |
| テキスト | 重複削除 | -dDetectDuplicateImages=true |
| メタデータ | 必要最小化 | exiftool -all= |
| ツール選択 | GUI vs CLI | Acrobat Pro + Ghostscript の併用 |
-
まず基本圧縮:Ghostscript で
/ebook設定を試す。 -
フォントを子集化:Acrobat Pro 内で
フォント子集化をオンにする。 - 画像を最適化:画像解像度、JPEG 圧縮率を再調整。
- メタデータと冗長情報を削除:ExifTool や PDFtk でクリーンアップ。
- ファイルをチェック:サイズ・閲覧確認を必ず行う。
これらを順に実施するだけで、PDFサイズは数 MB 減ることが多いです。
最後に、生成された PDF を複数の環境(iOS、Android、PC)で開いても読みやすさが保たれるか確認しましょう。
よくある質問(FAQ)
Q1. 圧縮後にテキストが読めなくなることはありますか?
A1. フォント子集化を行うと、使用されていないグリフが除外されますが、必要な文字だけ残る設定にすれば読めなくなるリスクはゼロです。
Q2. PDFの安全性(暗号化)を残したまま圧縮できますか?
A2. Ghostscript の -dEncryptR=4 -dEncryptionKey= オプションで暗号化を維持しつつ圧縮できます。
Q3. 画像のみのサイズを確認したい場合は?
A3. pdfimages -list input.pdf で画像サイズと数を確認し、不要な画像を削除できます。
Q4. スクリプトを複数のファイルに対して一括実行したいですか?
A4. for f in *.pdf; do gs -sOutputFile=compressed_$f ... $f; done でシェルループで実行できます。
Q5. 既存のテンプレート PDF を軽量化したいのですが?
A5. Adobe Acrobat の「レポート」機能を使って全ページを一括処理、または qpdf --compress-streams でストリーム圧縮が有効。
これで「PDFを軽くする完全ガイド」がお役に立てるはずです。
まずは最も簡単な Ghostscript のコマンドを試し、徐々にフォントや画像の設定を細かく調整していくと、最適なバランスが見えてくるでしょう。さらにスクリプト化すれば、毎回手動で処理する手間が省け、業務効率化に直結します。ぜひ試してみてください。


コメント