Skip to content

Instantly share code, notes, and snippets.

@LeeDDHH
Last active February 6, 2024 08:27
Show Gist options
  • Star 1 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save LeeDDHH/2dba6998e634eb3fe8cac20011c5b47b to your computer and use it in GitHub Desktop.
Save LeeDDHH/2dba6998e634eb3fe8cac20011c5b47b to your computer and use it in GitHub Desktop.
ghostscriptを使ってpdfの圧縮をする場合

ghostscript

  • 単体で圧縮するときには使えそう
  • pdfの中身をいじるとなると、けっこうしんどい戦いになりそう

確認時の環境

MacOS 13.4.1
ghostscript 10.01.1
brew 4.0.24
zsh 5.9

ghostscriptのオプション

-sDEVICE

  • 出力デバイスを指定する
    • printer
    • pdfwrite
    • jpeg -pngalpha

-dCompatibilityLevel

  • Ghostscriptで生成されるPDFファイルの互換性レベルを指定する
    • 1.4
      • 比較的古いバージョンのPDFで、ほとんどのPDFビューアでサポートされている
      • 一部の新しい機能や改良された圧縮アルゴリズムは使用できない
    • 1.5
      • Adobe Acrobat 6.0以降のバージョンでサポートされる
      • レイヤー(オプションのコンテンツ)、埋め込みフォントのサブセット化などの機能が使える
    • 1.6
      • Adobe Acrobat 7.0以降のバージョンでサポートされる
      • 透明なオブジェクト、マルチメディア要素、強化された暗号化などの機能が使える
    • 1.7
      • Adobe Acrobat 8.0以降のバージョンでサポートされる
      • 埋め込みファイル、フォームデータの保存、PDF/Aなどの機能が使える

-dPDFSETTINGS

  • Ghostscriptで生成されるPDFファイルの圧縮と品質の設定を指定する
    • /screen
      • 画面表示向けの圧縮設定
      • 読み込みや表示が迅速に行われるよう最適化される
    • /ebook
      • 電子書籍向けの圧縮設定
      • 相対的に高い圧縮率で生成される
      • ファイルサイズを小さくし、電子書籍リーダーやタブレットなどのデバイスでの表示や操作を向上させる
    • /printer
      • 印刷向けの圧縮設定
      • 印刷品質を重視し、高い画質で表示される
      • ファイルサイズは通常、他の設定よりも大きくなる
    • /prepress
      • 印刷事前準備向けの圧縮設定
      • 最高品質で生成され、印刷業界の要件を満たす
      • ファイルサイズは通常、他の設定よりも大きくなる

-dNOPAUSE

  • Ghostscriptが実行中にユーザーからの入力を待たないようにする
    • 通常、Ghostscriptは各ページの処理後に一時停止し、ユーザーがEnterキーを押すのを待つため
  • 複数のファイルやページを自動的に処理するときに使う
  • エラーメッセージや警告メッセージも自動的に進行してしまう

-dQUEIT

  • Ghostscriptの出力を抑制し、実行時のメッセージや警告を非表示にする
    • Ghostscriptは動作中に生成されるメッセージを表示せず、静かに処理する
    • スクリプトやバッチファイル内でGhostscriptを実行して、処理の結果だけを必要とするケースに使うといい
  • 出力されないメッセージの種類
    • コマンドライン引数の詳細情報
    • 処理中のページ番号やファイル名
    • 警告メッセージ
    • エラーメッセージ

-dBATCH

  • Ghostscriptをバッチモードで実行する
  • Ghostscriptが処理を自動化し、対話型のプロンプトやユーザーからの入力を待たずに処理を完了する
    • 通常、Ghostscriptは処理が完了するたびにプロンプトを表示してユーザーの入力を待つため
    • スクリプトやバッチファイル内でGhostscriptを使用するケースで便利になる
    • 適切なエラーハンドリングやエラーメッセージのログ出力を設定することが必要
  • 一般的に-dQUIETや-dNOPAUSEのオプションと組み合わせて使用する(らしい)

-sOutputFile

  • Ghostscriptを使用して生成される出力ファイルの名前と場所を指定する

現在のディレクトリのoriginディレクトリにあるpdfファイルを圧縮してcompressディレクトリに出力する場合のコード例

ls -1F origin | grep -v "/" | xargs -IXXXX gs -sDEVICE=pdfwrite -dCompatibilityLevel=1.4 -dPDFSETTINGS=/ebook -dNOPAUSE -dQUIET -dBATCH -sOutputFile=./compress/XXXX ./origin/XXXX
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment