構造の最適化と再構築:どちらのツールが適している?
この二つのプログラムは、根本的に異なる方法で処理します。このページのQPDFコマンドは、ページの内容をそのままにして、ファイル内のオブジェクトだけをできるだけコンパクトに保存し直します。例えば、オブジェクトをオブジェクトストリームにまとめ、Flateデータを再圧縮します。その際、画像の解像度を下げたり、JPEGとして再エンコードしたりすることはありません。QPDFで任意に実行できる画像の最適化は、これとは別の非可逆処理です。次のセクションで簡単に説明します。各オプションについては、QPDFのドキュメントに説明があります。
Ghostscriptは別の方法で処理します。出力デバイスpdfwriteを使ってPDFを読み込み、各ページの描画命令から新しいファイルを生成します。通常、テキストとベクター画像はそれぞれの形式で維持され、ページが単に画像に変換されるわけではありません。ただし、設定によってはGhostscriptが画像を再計算する場合があります。また、ページ上に見える内容以外の要素は、いずれも変わる可能性があります。詳しくは、Ghostscriptのpdfwriteマニュアルで説明されています。
プログラムによっては、各ページを画像として出力し直す第三の方法も用意されています。この方法では通常、元のテキストデータ、検索機能、インタラクティブな要素が失われます。このページの二つのコマンドは、どちらもこの方法では処理しません。
どの方法も、ファイルが小さくなることを保証するものではありません。目安として、主にテキストとベクター画像で構成されたPDFなら、まずQPDFを試してください。画像、リンク、フォームの変更をできるだけ抑えたい場合も同様です。大きな写真やスキャン画像が容量の主な原因で、多少の画質低下を許容できるなら、Ghostscriptが選択肢になります。可逆圧縮と非可逆圧縮が具体的に何を意味するかは、画質を落とさずにPDFを圧縮のガイドで説明しています。
グラフィカルな操作画面を備えたプログラムも、同じ方法を使っています。PDFsamの説明では、Basic版で行う構造のみの最適化と、Visual版およびEnhanced版で行う独自の画像圧縮を区別しています。バックグラウンドでGhostscriptを呼び出すファイルマネージャー用スクリプトや操作画面の古い解説には、以前のUbuntuバージョンを対象にしたものもあります。そのため、インストール手順は確認せずにそのまま使わないでください。PDF24 Creatorは、提供元によるとWindows専用で、Linux版は提供されていません。
何もインストールしたくない場合は、ブラウザーのPDF圧縮ツールを利用できます。ファイルはアップロードされず、端末上で処理されます。ただし、Linuxのブラウザーでは個別にテストしていません。ブラウザー内でのローカル処理と完全なオフライン作業の違いは、アップロードせずにPDFを圧縮のガイドで説明しています。
バージョンを確認し、別の出力ファイルに書き込む
コマンド一覧
このガイドに掲載されている六つのコマンドから一つ選んでください。コマンドがそのまま表示され、各部分の意味を確認できます。
これらのコマンドは、QPDFとGhostscriptの公式マニュアルに掲載されているものです。当サイトでは、Ubuntuやその他のディストリビューションで実際に実行していません。お使いのシステムにインストールされているバージョンは、オンラインドキュメントの対象バージョンと異なる場合があります。
このページではコマンドを実行せず、ターミナルの出力も表示しません。システムからのメッセージは、ご自身でコマンドを実行して初めて確認できます。
QPDFのバージョンを表示
インストールされているQPDFのバージョンを表示します。他のコマンドを使用する前に確認してください。
qpdf --versionコード欄でコマンドを直接選択してコピーすることもできます。
コマンドの各部分
qpdfプログラム- コマンドラインプログラムのQPDFを呼び出します。
--versionバージョンを表示- お使いのシステムで動作するQPDFのバージョンを出力します。
シェルにコマンドが見つからないと表示された場合は、QPDFがインストールされていない可能性があります。パッケージ名やインストール方法は、ディストリビューションによって異なります。
ガイド内の該当箇所Ghostscriptのバージョンと出力デバイスを表示
Ghostscriptのバージョンと利用可能な出力デバイスを表示します。
gs -hコード欄でコマンドを直接選択してコピーすることもできます。
コマンドの各部分
gsプログラム- Ghostscriptを呼び出します。Unixではプログラム名はgsです。
-hヘルプ- バージョン、オプション、形式、利用可能な出力デバイス、検索パスを出力します。
シェルにコマンドが見つからないと表示された場合は、Ghostscriptがインストールされていない可能性があります。後で結果を確認できるように、ディストリビューションとバージョンを書き留めておいてください。
ガイド内の該当箇所構造をよりコンパクトに保存
ファイル内のオブジェクトを、できるだけコンパクトになるように保存し直します。画像の解像度を下げたり、JPEGとして再エンコードしたりはしません。
qpdf "original.pdf" --object-streams=generate --compress-streams=y --decode-level=generalized --recompress-flate --compression-level=9 "optimiert-qpdf.pdf"コード欄でコマンドを直接選択してコピーすることもできます。
コマンドの各部分
qpdfプログラム- コマンドラインプログラムのQPDFを呼び出します。
"original.pdf"入力ファイル- 読み込むPDFです。結果は別のファイルに保存されます。
--object-streams=generateオブジェクトストリームを生成- 対象となるオブジェクトをオブジェクトストリームにまとめて圧縮します。その結果、出力のPDFバージョンは1.5以上になります。
--compress-streams=yストリームを圧縮- まだ別の方式で圧縮されていないストリームを、Flateで圧縮します。
--decode-level=generalized汎用フィルターをデコード- LZW、Flate、ASCII85、ASCIIHexなど、対応している汎用フィルターでエンコードされたデータをデコードします。JPEGデータ(DCT)はデコードしません。
--recompress-flateFlateを再圧縮- 既存のFlateストリームを展開し、再圧縮します。これにより、書き込みに時間がかかる場合があります。
--compression-level=9圧縮レベル- Flateに対して、文書に記載された1から9の範囲で最も高いzlibレベルを選びます。レベルが高いほど時間がかかります。この値はJPEGの画質とは関係ありません。
"optimiert-qpdf.pdf"出力ファイル- 新しいファイルの名前です。二つの確認コマンドでは、このファイルが入力になります。
新しいファイルが小さくなったかどうかは、バイト数を比較して初めてわかります。出力用の名前を別に指定しても、同じ名前の既存ファイルの上書きは防げません。そのため、まだ使われていない名前を選んでください。このコマンドは、デジタル署名が有効なまま維持されることを保証しません。
ガイド内の該当箇所pdfwriteでPDFを再構築
GhostscriptがPDFを読み込み、各ページの描画命令から新しいファイルを生成します。ここではプリセットの/ebookを使用します。
gs -dSAFER -dBATCH -dNOPAUSE -sDEVICE=pdfwrite -dPDFSETTINGS=/ebook -sOutputFile="optimiert-gs.pdf" "original.pdf"コード欄でコマンドを直接選択してコピーすることもできます。
コマンドの各部分
gsプログラム- Ghostscriptを呼び出します。
-dSAFERアクセス制御- ファイルとデバイスへのアクセスを制限します。バージョン9.50以降では標準の動作です。安全性全般を保証するものではありません。
-dBATCH処理後に終了- 指定したファイルの処理が完了したら、対話モードに移行せずにGhostscriptを終了します。
-dNOPAUSE一時停止なし- 各ページの終わりでの確認要求と一時停止を抑制します。
-sDEVICE=pdfwrite出力デバイス- 新しいPDFを生成するpdfwriteを選択します。通常、テキストとベクターグラフィックは維持されます。目に見えるページの描画内容に含まれないものは、すべて変更される可能性があります。
-dPDFSETTINGS=/ebookプリセット- 画像の解像度を中程度にする複数の個別パラメーターをまとめて設定します。名前が示すのは用途であり、品質レベルや確実なサイズ削減を示すものではありません。
-sOutputFile="optimiert-gs.pdf"出力ファイル- 新しいファイルの名前を指定します。
"original.pdf"入力ファイル- Ghostscriptが読み込むPDFです。
ページが同じように見えても、画像の細部や文書の機能が変わる場合があります。特定のサイズや品質は保証されません。保存した出力を確認し、出力にはまだ使われていない名前を選んでください。
ガイド内の該当箇所出力の構造を確認
保存した出力の構文を確認します。Ghostscriptの結果を確認する場合は、ファイル名を置き換えてください。
qpdf "optimiert-qpdf.pdf" --checkコード欄でコマンドを直接選択してコピーすることもできます。
コマンドの各部分
qpdfプログラム- コマンドラインプログラムのQPDFを呼び出します。
"optimiert-qpdf.pdf"確認するファイル- 先ほど保存したQPDFコマンドの出力です。
--check構造を確認- 構造、暗号化、リニアライズ、ストリームのエンコードを確認します。
戻り値0はエラーのない検査結果、2はエラー、3は警告を示します。検査の対象はファイルの構造だけです。見た目が正しいか、フォームやリンクが機能するか、安全性に問題がないかは、この検査ではわかりません。
ガイド内の該当箇所ページ数を出力
保存した出力のページ数を出力します。元のファイルの名前でもう一度コマンドを実行し、両方の数を比較してください。
qpdf "optimiert-qpdf.pdf" --show-npagesコード欄でコマンドを直接選択してコピーすることもできます。
コマンドの各部分
qpdfプログラム- コマンドラインプログラムのQPDFを呼び出します。
"optimiert-qpdf.pdf"ページ数を数えるファイル- 先ほど保存したQPDFコマンドの出力です。
--show-npagesページ数を数える- 指定したファイルのページ数を出力します。
ページ数が同じでも、内容、画像、機能が変わっていないとは限りません。ページをご自身で確認してください。
ガイド内の該当箇所このボタンは、クリックしたときにのみ、表示されているコマンドをクリップボードに書き込みます。クリップボードの読み取り、保存、送信は行いません。
このページのコマンドは、QPDFとGhostscriptの公式マニュアルに基づいています。当サイトではUbuntuやその他のディストリビューションで実行していないため、Ubuntuで動作確認済みの手順ではありません。まず、システムにインストールされているバージョンを確認してください。ディストリビューションのパッケージは、最新のオンラインドキュメントが説明するバージョンと異なる場合があります。
インストール済みのバージョンを表示
qpdf --versiongs -hコマンドが見つからないとシェルに表示される場合、そのプログラムはインストールされていない可能性があります。パッケージ名とインストール方法は、ディストリビューションによって異なります。後から結果を検証できるように、ディストリビューションと各バージョンを記録しておいてください。
毎回の試行で守る基本ルール
- 元のファイルには手を加えないでください。入力と出力には、必ず異なるファイル名を使います。
- 以前のファイルを上書きしないように、出力には毎回、まだ使っていない新しい名前を付けてください。
- 次の試行も、前回の処理結果ではなく、必ず元のファイルから始めてください。
- 入力ファイルを直接置き換えるオプションやスクリプトは使わないでください。
QPDF:保存構造を最適化
qpdf "original.pdf" --object-streams=generate --compress-streams=y --decode-level=generalized --recompress-flate --compression-level=9 "optimiert-qpdf.pdf"このコマンドはoriginal.pdfを読み込み、optimiert-qpdf.pdfという新しいファイルを書き出します。各オプションにより、オブジェクトがオブジェクトストリームにまとめられ、データストリームが圧縮され、Flateデータが最高レベルで再圧縮されます。画像の再計算は含まれません。オブジェクトストリームにはPDF 1.5が必要です。受信者が明示的にそれより古いPDFバージョンを求めている場合、このコマンドをそのまま使うことはできません。
QPDFでは追加で画像を最適化し、選択した品質でJPEGデータを再エンコードすることもできます。JPEGの品質を指定するオプションは、バージョン12.1以降で利用できます。どちらも非可逆処理で、すでに圧縮されたJPEG画像の品質をさらに低下させる可能性があります。処理後に画像を重点的に確認できる場合に限って使ってください。
Ghostscript:プリセットを使ってPDFを書き直す
gs -dSAFER -dBATCH -dNOPAUSE -sDEVICE=pdfwrite -dPDFSETTINGS=/ebook -sOutputFile="optimiert-gs.pdf" "original.pdf"-sDEVICE=pdfwriteはPDF出力を選択し、-sOutputFileは新しいファイル名を指定します。入力ファイルは末尾に置きます。-dBATCHと-dNOPAUSEは、Ghostscriptが入力待ちになるのを防ぎます。-dSAFERも、Ghostscriptのコマンドラインガイドの例に同じ形で記載されています。プリセット/ebookは試行の出発点にすぎず、すべてのファイルに推奨するものではありません。
Ghostscriptのプリセットを正しく理解する
-dPDFSETTINGSを使うと、複数の個別パラメーターをまとめて選択できます。プリセットの名前は用途を表しています。品質の段階や、特定の削減量を示すものではありません。
では、/prepressが最高品質なのでしょうか。いいえ。マニュアルには、/prepressは元の内容を最も忠実に保つ設定ではないと明記されています。-dPDFSETTINGSを指定しない方が、元のファイルに近い結果になる場合があります。また、/prepressで最小のファイルになる保証もありません。
/screenと/ebookの目標値は、処理後のすべての画像がちょうど72または150 dpiになるという意味ではありません。しきい値を下回る画像は解像度を下げられず、その解像度が維持されます。ただし、プリセットの他のパラメーター、例えば画像のエンコードや色に関する設定によって変わる可能性があるため、画像が完全にそのまま維持されるとは限りません。-rオプションは、画像の解像度低減の代わりにはなりません。Ghostscriptが一部を代替処理としてレンダリングする必要がある場合の解像度だけを制御し、埋め込まれた画像を小さくすることはありません。マニュアルによると、プリセットに頼るよりも、個別のパラメーターを目的に合わせて設定した方がよい場合が多いとされています。
すべてのファイルに同じプリセットを使わないでください。テキスト文書、写真カタログ、スキャン文書では、処理の影響が異なります。スキャン文書では、スキャン時点で設定を見直すのが最善です。方法は、スキャンしたPDFを圧縮のガイドで説明しています。
テキスト、リンク、フォーム、署名を確認する
圧縮後のPDFが同じ見た目でも、保存されていたすべての情報が維持された証拠にはなりません。Ghostscriptはファイルを再構築します。GhostscriptによるPDF最適化の解説によると、見た目が同じでも、内部の命令やメタデータが変わっている場合があります。QPDFを使った後も、必要な機能を確認してください。
- テキストを選択してコピーし、検索も試してください。
- リンクとしおりをクリックしてください。
- フォームのファイルの場合は、フォーム欄に入力して、試しに保存してください。
- 受信者がタイトルや作成者などの情報を利用する場合は、それらの項目を確認してください。
- PDF/Aなどの特定の規格が求められる場合は、専用のツールで確認してください。ここで紹介するコマンドはいずれも、その規格への適合を保証しません。
デジタル署名付きPDF
書き直した後もデジタル署名が有効であることは、どちらのコマンドでも保証できません。そのため、署名付きPDFを小さくする方法として圧縮は適していません。署名付きの元のファイルは変更せずに保管してください。他の人が署名した文書の小さい版が必要な場合は、署名前の元データを入手するか、署名者に相談してください。再署名については、発行者または受信者と調整してください。詳しくは、署名付きPDFの制限事項に関するAdobeの説明を参照してください。スキャンされた、目に見える手書きの署名は、デジタル署名ではありません。
パスワード保護や編集制限の解除は、ファイルを小さくする処理には含まれないため、ここではそのためのコマンドを紹介していません。代わりに、適切な版を送るよう送信者に依頼してください。このような文書の扱いについては、署名とフォームを理解するのガイドで詳しく説明しています。
出力サイズを比較し、元のファイルを保管する
コマンドがエラーメッセージなしで完了しても、それだけでは結果の良し悪しは分かりません。丸められたMB表示だけでなく、元のファイルと出力ファイルの正確なサイズをバイト単位で比較してください。何パーセント削減できたかは、圧縮率計算ツールで計算できます。
構文とページ数を確認
qpdf "optimiert-qpdf.pdf" --checkQPDFは、問題なく確認が完了した場合は戻り値0、エラーがある場合は2、警告がある場合は3を返します。この確認の対象は、ファイルの構造だけです。フォーム、リンク、画像が以前と同じように機能し、表示されるかは分かりません。
qpdf "optimiert-qpdf.pdf" --show-npagesPDFビューアーで確認
- 保存した出力ファイルを、そのフォルダーから改めて開いてください。
- すべてのページを順に確認し、ページ形式と向きを元のファイルと比較してください。
- 画像、小さい文字、細い線を高倍率で拡大して確認してください。
- 前のセクションで説明したように、検索、リンク、フォームを試してください。
- 可能であれば、別のビューアーでもファイルを開いてください。
大きくなった、変わらない、空になった場合は?
Ghostscriptで処理すると、PDFが大きくなる場合もあります。ファイルが再構築されて別の方法でエンコードされ、新しい命令が以前の命令より多くの容量を必要とすることがあるためです。QPDFでも、すでにコンパクトに保存されたファイルでは、削減の余地がほとんどない場合があります。
大きくなった結果や、ほとんど小さくならなかった結果でも、有効な出力である場合があります。ただし、それを判断するには、他の出力と同じように保存済みファイルを確認する必要があります。サイズだけでは、エラーや失われた機能の有無は分からないためです。最終的には、より適したファイルを残してください。元のファイルがそのまま最適な場合もよくあります。一方、空、読み取り不能、破損した出力は別です。これは試行の失敗であり、非常に強く圧縮できたということではありません。そのファイルは送信せず、ターミナルのメッセージを読み、元のファイルと新しい出力名を使ってやり直してください。
PDFが受信者の上限に対してまだ大きすぎる場合は、PDFのサイズが小さくならないのガイドで次の対処方法を確認できます。いずれの場合も、新しい版が相手に届き、受け付けられるまで元のファイルを保管してください。
よくある質問
LinuxのPDF圧縮にはQPDFとGhostscriptのどちらを使うべきですか?
どの方法も、ファイルが小さくなることを保証するものではありません。目安として、主にテキストとベクター画像で構成されたPDFなら、まずQPDFを試してください。画像、リンク、フォームの変更をできるだけ抑えたい場合も同様です。大きな写真やスキャン画像が容量の主な原因で、多少の画質低下を許容できるなら、Ghostscriptが選択肢になります。可逆圧縮と非可逆圧縮が具体的に何を意味するかは、画質を落とさずにPDFを圧縮のガイドで説明しています。
Ghostscriptの/prepressが最も高品質な設定ですか?
では、/prepressが最高品質なのでしょうか。いいえ。マニュアルには、/prepressは元の内容を最も忠実に保つ設定ではないと明記されています。-dPDFSETTINGSを指定しない方が、元のファイルに近い結果になる場合があります。また、/prepressで最小のファイルになる保証もありません。
Ghostscriptを使うとPDFが大きくなるのはなぜですか?
Ghostscriptで処理すると、PDFが大きくなる場合もあります。ファイルが再構築されて別の方法でエンコードされ、新しい命令が以前の命令より多くの容量を必要とすることがあるためです。QPDFでも、すでにコンパクトに保存されたファイルでは、削減の余地がほとんどない場合があります。
大きくなった結果や、ほとんど小さくならなかった結果でも、有効な出力である場合があります。ただし、それを判断するには、他の出力と同じように保存済みファイルを確認する必要があります。サイズだけでは、エラーや失われた機能の有無は分からないためです。最終的には、より適したファイルを残してください。元のファイルがそのまま最適な場合もよくあります。一方、空、読み取り不能、破損した出力は別です。これは試行の失敗であり、非常に強く圧縮できたということではありません。そのファイルは送信せず、ターミナルのメッセージを読み、元のファイルと新しい出力名を使ってやり直してください。
処理後のページが同じように見えても、GhostscriptでPDFが変わることはありますか?何を確認すべきですか?
圧縮後のPDFが同じ見た目でも、保存されていたすべての情報が維持された証拠にはなりません。Ghostscriptはファイルを再構築します。GhostscriptによるPDF最適化の解説によると、見た目が同じでも、内部の命令やメタデータが変わっている場合があります。QPDFを使った後も、必要な機能を確認してください。
- テキストを選択してコピーし、検索も試してください。
- リンクとしおりをクリックしてください。
- フォームのファイルの場合は、フォーム欄に入力して、試しに保存してください。
- 受信者がタイトルや作成者などの情報を利用する場合は、それらの項目を確認してください。
- PDF/Aなどの特定の規格が求められる場合は、専用のツールで確認してください。ここで紹介するコマンドはいずれも、その規格への適合を保証しません。
/ebookや/screenはすべての画像を150または72 dpiに設定しますか?
/screenと/ebookの目標値は、処理後のすべての画像がちょうど72または150 dpiになるという意味ではありません。しきい値を下回る画像は解像度を下げられず、その解像度が維持されます。ただし、プリセットの他のパラメーター、例えば画像のエンコードや色に関する設定によって変わる可能性があるため、画像が完全にそのまま維持されるとは限りません。-rオプションは、画像の解像度低減の代わりにはなりません。Ghostscriptが一部を代替処理としてレンダリングする必要がある場合の解像度だけを制御し、埋め込まれた画像を小さくすることはありません。マニュアルによると、プリセットに頼るよりも、個別のパラメーターを目的に合わせて設定した方がよい場合が多いとされています。