PDFのピクセル確認で失敗しない!解像度チェックと最適化の秘策

PDFのピクセル確認で失敗しない!解像度チェックと最適化の秘策
(本文のみ)


はじめに

PDFは「作ったらいつでも同じに見える」という特性により、設計図・報告書・マーケティング資料などで広く利用されています。しかし、PDFの内部に埋め込まれた画像や図形は、外部の表示デバイスや印刷機で意図せずぼやけたり切れっ隨たりする原因になります。
「PDFのピクセル確認で失敗しない!」という課題を解決するには、以下の二点を押さえることが重要です。

  1. 解像度(DPI)を正確に把握し、必要に応じて再サンプリング(再描画)する
  2. ファイルサイズを抑えつつ品質を維持するための最適化手法を適切に実行する

この記事では、PDFにおけるピクセル確認の具体的手順と、失敗しない最適化の秘策を、ツール別・コマンドライン別に分かりやすく解説します。ぜひ「ピクセル確認で失敗したいない」と思われる方々の参考にしてください。


1. PDFのピクセル量を測定するツール一覧

PDFの内部構造を視覚的に確認したい場合、以下のようなツールが便利です。各ツールの使い方は少しずつ変わりますが、基本的には「情報抽出 → 画像の解像度を確認」といった流れになります。

ツール 主な特徴 実行例
Adobe Acrobat Pro DC GUIベースで簡易。PDF内にある画像を一覧表示できる。 ファイル→印刷 → プレビューでDPIを確認
Ghostscript コマンドラインでサンプリング率を変更できる。 gs -sDEVICE=pdfwrite -dCompatibilityLevel=1.4 -dPDFSETTINGS=/prepress -o out.pdf in.pdf
ImageMagick + pdfinfo pdfinfoでページ情報、convertで画像を抽出し identify で DPI を調べられる。 convert -density 300 in.pdf page-%d.png
PDFtk シンプルな分割や結合が可能。 pdftk in.pdf burst output page-%d.pdf
Mutool MuPDF のツール。 mutool draw でページを画像化。 mutool draw -F png -o out%d.png -r 300 in.pdf

ここでは主に ImageMagickGhostscript を使ったコマンド例を中心に解説します。
ただし、Adobe Acrobat Pro DC は GUI で直感的に確認できるので一度試してみるのもおすすめです。


2. PDFの画像解像度を正確に取得する方法

2.1 ImageMagick でピクセル情報を取得

ImageMagick の identify コマンドは画像ファイルのメタ情報を表示します。まず PDF から画像を抜き出し、identify で DPI を調べます。

# 300 DPI でレンダリングして PNG を作成
convert -density 300 input.pdf page-%02d.png

# 生成した PNG の DPI を確認
identify -format "%m %x %y\n" page-01.png
  • -density 300:PDFを300 DPIで描画。
  • -format "%m %x %y":フォーマット(モード)、X 軸 DPI、Y 軸 DPI を出力。

2.2 Ghostscript による DPI 直接抽出

Ghostscript は PDF を再生成する際に解像度を指定できるので、元の画像解像度を確認しつつ再サンプリングも同時に行えます。

gs -sDEVICE=pdfwrite -dNOPAUSE -dBATCH \
   -dPDFFitPage -dCompatibilityLevel=1.4 \
   -dAutoRotatePages=/None -dPrintScaling=0 \
   -dPDFFitPage -dDEVICEWIDTHPOINTS=595 -dDEVICEHEIGHTPOINTS=842 \
   -dUseCIEColor -dColorConversionStrategy=/sRGB \
   -q -sOutputFile=output.pdf input.pdf
  • -dDEVICEWIDTHPOINTS-dDEVICEHEIGHTPOINTS:ページサイズをポイント単位で指定。
  • -dPrintScaling=0:スケーリングなしで出力。
  • ただし DPI の取得は -dPrintScaling 設定が正しく行われているかを確認し、必要に応じて pdfinfo で PDF のメタ情報をチェックします。
pdfinfo input.pdf | grep -i "Page size"

2.3 Acrobat Pro DC での確認

  1. ファイル > プロパティ で「フォーマット」タブを開き、"DPI" の情報を確認
  2. ウィンドウ > ツール > 印刷製品 > PDF ファイルを作成 で印刷時の DPI を調整

Acrobat Pro DC では Preflight 機能の「DPIチェック」もあります。プリフライトを走らせるだけで欠陥画像を自動検知できます。


3. 失敗しないリサンプリング(再サンプリング)手順

画像が 低解像度 で埋め込まれている場合、単に DPI を上げるだけでは表示が改善されません。必ず画像自体を再サンプリング(再描画)する必要があります。

3.1 具体的な手順

ステップ 内容 コマンド例
1 まず現状のDPIを取得 identify -format "%x %y\n" page-01.png
2 目標DPI(例:300)に合わせて再変換 convert page-01.png -density 300 -resize 100% output.png
3 PDFに再挿入 pdftk in.pdf update_xmp output tmp.pdf \
“"output.pdf"`
4 最終ダウンロード mv tmp.pdf in.pdf

ポイント

  • -density を先に設定してから -resize すると、画像が再サンプリングされます。
  • 目的に応じて -quality(JPEG の圧縮率)を併用し、ファイルサイズの適正化を図ります。

3.2 Ghostscript で一括リサンプリング

PDF 全体を対象に、500 DPI でレンダリングし再構築する場合:

gs -sDEVICE=pdfwrite -dNOPAUSE -dBATCH \
   -sOutputFile=final_highres.pdf \
   -dDownsampleColorImages=true \
   -dColorImageResolution=500 \
   -dDownsampleGrayImages=true \
   -dGrayImageResolution=500 \
   -dDownsampleMonoImages=true \
   -dMonoImageResolution=500 \
   input.pdf
  • -dDownsampleColorImages=true などで画像を再サンプリング。
  • -dColorImageResolution=500 で色画像の対象 DPI。
  • この設定により、元の解像度が下げられた画像は500 DPIに上げられ、逆に高解像度の画像は500 DPIにダウンサンプリングされます。

注意:500 DPI は印刷(高解像度)向けですが、Web向けは 150–300 DPI で十分です。


4. PDF の最適化で失敗しない秘策

4.1 画像圧縮とフォーマット選択

  1. JPEG(ロス圧縮)

    • Web:300–400 DPI の JPEG 推奨。
    • 印刷:300 DPI の JPEG で 10–15% まで圧縮。
  2. PNG(ロスレス)

    • ロゴやテキストに向く。
    • 画像が多いページは -quality 95 で最小化を試みる。
  3. PDF/A へ変換

    • アーカイブ用。透明度や高解像度画像は自動で圧縮される。

4.2 ユーティリティを使った自動最適化

ツール 役割 コマンド例
Ghostscript 画像圧縮・再サンプリング 上記 3.2 と同様
PdfOptim macOS 向け GUI。圧縮・重複削除 pdfoptim in.pdf out.pdf
qpdf 圧縮・分割 qpdf --stream-data=compress in.pdf out.pdf
Pymupdf (fitz) スクリプトで細かい最適化 python optimize.py in.pdf out.pdf

例:Python スクリプトで画像圧縮

import fitz  # PyMuPDF

doc = fitz.open("input.pdf")
for page in doc:
    image_list = page.get_images(full=True)
    for img_index, img in enumerate(image_list):
        img_xref = img[0]
        pix = fitz.Pixmap(doc, img_xref)
        if pix.n > 4:  # RGB or CMYK
            rgb = fitz.Pixmap(fitz.csRGB, pix)
            pix = rgb
        # 300 DPI の JPEG で再圧縮
        pix.save(f"tmp_{img_index}.jpg", format="jpeg", dpi=300, quality=90)
        pix = None
doc.save("output.pdf", garbage=4, deflate=True)

4.3 フォント最適化

埋め込みフォントが多いと大きなファイルになります。

  • Subset:使用したグリフだけを残す
  • OpenType:Adobe Acrobat の「フォント最適化」または ghostscript-dSubsetFonts=true
gs -sDEVICE=pdfwrite -dNOPAUSE -dBATCH \
   -sOutputFile=final_font_opt.pdf \
   -dSubsetFonts=true -dEmbedAllFonts=true \
   input.pdf

5. トラブルシューティング

問題 原因 対処
PDF が極端に大きい 設定なしで高DPI画像が埋め込まれた -dDownsampleColorImages=true で 150 dpi に下げる
画像がゴシゴシに見える DPI が低い、または再サンプリングしていない convert -density 300 で再描画
Webで読み込みが遅い 画像がロスレスで大きい JPEG に変換、-dDownsampleColorImages を使い圧縮
印刷時にピンぼけ 印刷解像度が 600 dpi 以上必要 500–600 dpi でGhostscript で再生成

6. 実務で使えるワンポイント集

  1. PDF の各ページごとに DPI を自動リスト化
    for f in page-*.png; do echo -n "$f:"; identify -format "%x %y" "$f"; done
    
  2. PDF 内の画像パスを抽出
    pdftk input.pdf dump_data | grep "ImageObject" | cut -d= -f2
    
  3. サーバー上で連続最適化
    find /pdfs/ -name "*.pdf" -exec gs -sDEVICE=pdfwrite -dNOPAUSE -dBATCH -dCompatibilityLevel=1.5 -sOutputFile={} -dDownsampleColorImages=true -dColorImageResolution=300 {} \;
    

まとめ

PDF に埋め込まれる画像は、ピクセル単位での解像度確認と再サンプリングが成功の鍵です。

  • まずは ImageMagickGhostscript で現状 DPI を把握。
  • 必要に応じて Ghostscript で一括再サンプリング。
  • その後、画像圧縮(JPEG/PNG)と フォントサブセット を行い、ファイルサイズを最適化。

このワークフローに沿って実際に PDF を作成・分配すれば、ピクセル確認で失敗することはほぼありません。ぜひ試してみてください。💡

コメント