Linux/Ubuntuコマンドで画像のPDFを軽量化

PDFとしてスキャナーでスキャンしたけど、そのPDFファイルが大きすぎる時。

オンラインには軽量化をするサイトなどがありますが、大事な書類などアップロードはしたくない場合もあります。

解像度を下げたり、グレースケールにしたりすれば軽くなる場合もありますが、スキャン枚数が多いとスキャンのし直しもしたくない。

ということで今回はLinuxのコマンドラインで軽量化をします。

方法は、PDF→JPG→PDFという風に変換し、JPG化する時に圧縮します。

gs(ghostscrtip)でPDFを直接軽量化する方法もありますが、それだと3段階くらいで解像度を変更することしかできず、細かいクオリティの調整などはできないので、今回は少し手間ですが一旦JPGにして調整してからまたPDFに戻します。

以下のページを参考にしましたhttps://stackoverflow.com/questions/43085889/how-to-convert-a-pdf-into-jpg-with-command-line-in-linux

How to Convert JPG to PDF in Linux

 

https://linux.die.net/man/1/pdftoppm#:~:text=Pdftoppm%20converts%20Portable%20Document%20Format,%2C%20PPM%2Droot%2Dnnnnnn.

 

コマンドまとめ

詳しい解説が必要でない方はコマンドだけどうぞ。

1,PDFを圧縮してjpg画像に出力

pdftoppm -jpeg -jpegopt quality=80 -r 200 input.pdf output

2,jpgをPDFに変換

convert *.jpg output.pdf

 

手順詳細

1、PDFをJPGに変換、圧縮。

このコマンドでJPGに変換しますが、その際に解像度や圧縮率を設定します。

pdftoppm -jpeg -jpegopt quality=80 -r 200 input.pdf output

quality=80が圧縮率です。100が最高画質、0が最低画質です。軽量化したい度合いによって、60-90くらいの間で圧縮すると良いでしょう。

-r 200が解像度です。これはdpiです。印刷物が300dpi以上、画面上で見るだけのものなら150dpi以上が適切でしょう。デフォルトは150です。

変換の際に他にも-gray(グレースケール)、-scale-to-x number横サイズ、範囲指定、パスワード情報、pngで出力など沢山のオプションがあります。他のオプションはこちらを参考にして下さい。

input.pdfが変換元のPDF名です。

outputは出力先のファイル名です。ここにページ番号が振られます。出力名をoutputにすると

output-01.jpg
output-02.jpg
output-03.jpg
output-04.jpg

という風にページごとに番号が振られて出力されます。

出力された画像を開いてみてクオリティなどチェックしましょう。また各画像の合計がだいたいPDFの合計サイズになるので、容量もそれで良いか見ましょう。圧縮したりなければ元のPDFは残っている状態なので再度設定を変えて変換して下さい。

 

2,JPGをPDFにまとめる。

出力した画像を開いてみて問題無ければ次に再びひとつのPDFに変換して戻します。

その時使用するコマンドがconvertです。

convert *.jpg output.pdf

もしconvertがインストールされていなければ

sudo apt-get install imagemagick

でインストールして下さい。(convertはimagemagickパッケージに含まれます)

*.jpgで現在のディレクトリーの全てのjpgファイルがひとつのPDFに変換されます。もし特定のjpgファイルだけをPDFにしたい場合はこれを file1.jpg file2.jpgとか、必要に応じて変更して下さい。

3,convertが実行できない場合

convertを使う時PDFアクセスの権限に制限がかかっている場合があります。

その場合実行しようとすると not authorizedなんたらかんたらとでてきます。

これはこのページで解説されていますが、Convertが使用するghostscrtipのバージョン9.24以前のセキュリティホールのためにPDFのアクセス制限がかかっていて、9.24以降であれば(Ubuntu 16.04以降なら大丈夫)セキュリティの問題は解決されているものの、PDFの制限はそのままかかっているかもしれない。とのことです。

その場合は

/etc/ImageMagick-6/policy.xml

をsudo vi などのテキストエディタでひらいて

<policy domain=”coder” rights=”none” pattern=”PDF” />

というラインを

<policy domain=”coder” rights=”read|write” pattern=”PDF” />

に書き換えます。気になるようであれば終了後元に戻して下さい。

 

以上です。細かく説明すると長くなりましたが、実際にやっていることは結構単純だしすぐにできます。一度スキャンしてしまったあとで色々調整できるので便利ですね!

 

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です