pdfファイルをモノクロのpdfに変換する方法

pdfファイルを白黒のpdfに変換する方法です

pdfファイルを一度開いて,印刷を選んで,白黒印刷で pdf 出力…とマウスで操作してもモノクロのpdfは出力できます.でも,大量のpdfファイルを変換する場合などは面倒です.

pdfをモノクロpdfに変換するワンライナー

そういう場合はgsコマンドを使って自動変換すると楽です

gs -sDEVICE=pdfwrite -sProcessColorModel=DeviceGray \
   -sColorConversionStrategy=Gray -dOverrideICC \
   -o  output.pdf -f input.pdf

変換元のpdfファイルが input.pdf です.
変換後のpdfは output.pdf として出力しています.

シェルスクリプトの作成

こんなコマンドは覚えられないのでシェルスクリプトを作りました.

#!/bin/bash
if [ $# -ne 2 ]; then
    cat<<EOF
usage:
	$0 input.pdf output.pdf
EOF
    exit 1
fi

input="$1"
output="$2"

gs \
   -sDEVICE=pdfwrite \
   -sProcessColorModel=DeviceGray \
   -sColorConversionStrategy=Gray \
   -dOverrideICC \
   -o "$output" \
   -f "$input"

私は pdf 関連のシェルスクリプトは pdf_hogehoge.sh という命名規則で管理しているので,今回は pdf_grayscale.sh というファイル名にしました

使い方

使い方は

$ ./pdf_grayscale.sh   元のpdfファイル名  出力のpdfファイル名

です

使い方を忘れてしまった場合も想定して,ヘルプを出すようにしています

$ ./pdf_grayscale.sh  

と実行すると

usage:
 pdf_grayscale.sh input.pdf output.pdf

と簡易ヘルプが出ます

使い方(その3)

大量のpdfファイルを一括変換したい場合は

for x in *.pdf; do ./pdf_grayscale.sh $x  output_$x ; done

などとやればOKです

これで hogehoge.pdf は output_hogehoge.pdf に自動変換されます

使い方(その3)

作成した pdf_grayscale.sh は,パスが通ったディレクトリに配置しておくと便利です.

なぜならパスが通ったディレクトリに置いてけば,あとは「pdfまでタイプしたら[TAB]で候補を出す」ということだけ覚えておけば,あとは候補の中からスクリプトを探すだけで,必要なスクリプトがすぐに見つけ出せるはずです.

ちなみに手元の環境では,pdfまでタイプして[TAB]を押すと以下のコマンドや自作スクリプトが出てきました

pdf2dsc            pdfbook2           pdfimages          pdfmom             pdftexi2dvi        pdfunite
pdf2ps             pdfclose           pdfinfo            pdfopen            pdftocairo         pdfxup
pdf_grayscale.sh   pdfcrop            pdfjam             pdfroff            pdftohtml          
pdf_reduce.sh      pdfcsplain         pdflatex           pdfseparate        pdftoppm           
pdfannotextractor  pdfdetach          pdflatex-dev       pdfsig             pdftops            
pdfatfi            pdfetex            pdflatexpicscale   pdftex             pdftosrc           
pdfattach          pdffonts           pdfmex             pdftex-quiet       pdftotext   

pdf_reduce.sh は自作のスクリプトで,pdfファイルのファイルサイズを自動で小さくするスクリプトです
https://pyopyopyo.hatenablog.com/entry/20160712/p1 これです

残りのコマンドの大半は pdfjamとかpdftkに付属しているツールです

よく使うのは以下のコマンドです

pdfunite 複数のpdfファイルを入力として,1ファイル1ページとして連結(=unite),一つのpdfファイルとして出力します
pdfseparate pdfuniteの逆の処理.一つのpdfファイルを入力として,1ページごとに分割(=separate)して出力します
pdftotext pdfファイルから,文字(テキスト)を抜き出して,テキストファイルを出力します
pdfimage pdfファイルから,画像を抜き出して,画像ファイルを出力します
pdflatex LaTeXのファイルから pdfを作ります

まとめ

  • pdfをモノクロに変換するコマンドを紹介しました
  • シェルスクリプト化しておけば,「 pdf + [TAB] 」だけ覚えておけば pdf_grayscale.sh に辿り着けます
  • それさえ忘れてしまった場合は,ブログを pdf で検索しましょうpyopyopyo.hatenablog.com



systemdにバグ./home以下のファイルが全削除される可能性あり

systemdのバージョン256に /homeディレクトリ以下のファイルを削除してしまうバグがあったそうで,修正版の 256.1 がリリースされています.

systemdのissuesによると,一時ファイルを一括削除する systemd-tmpfiles --purge コマンドが /home以下を不要ファイルと誤判定して削除するそうです

tmpファイルを消すだけのコマンドと見せかけて,home以下も消すという邪悪なバグなので注意が必要です.

心配な人は systemd のバージョンを確認しておきましょう

systemdのバージョンの確認方法

以下のコマンドを実行してsystemdのバージョンを確認します

$ systemctl --version

バグ有り,/homeが消える可能性がある場合

1行目にsystemd 256 (256-1)と表示されます.バグあり版です.何かの拍子に/homeが削除される可能性があります.

systemd 256 (256-1)
+PAM +AUDIT +SELINUX +APPARMOR +IMA +SMACK +SECCOMP +GCRYPT -GNUTLS +OPENSSL +ACL +BLKID +CURL +ELFUTILS +FIDO2 +IDN2 -IDN +IPTC +KMOD +LIBCRYPTSETUP +LIBCRYPTSETUP_PLUGINS +LIBFDISK +PCRE2 +PWQUALITY +P11KIT +QRENCODE +TPM2 +BZIP2 +LZ4 +XZ +ZLIB +ZSTD +BPF_FRAMEWORK -XKBCOMMON +UTMP +SYSVINIT +LIBARCHIVE

なお手元のdebianのsidはバグありの256になっていました.

バグ無し,問題ない場合

1行目に systemd 256 (256.1-2) と表示されます.バグ修正版になっています.

systemd 256 (256.1-2)
+PAM +AUDIT +SELINUX +APPARMOR +IMA +SMACK +SECCOMP +GCRYPT -GNUTLS +OPENSSL +ACL +BLKID +CURL +ELFUTILS +FIDO2 +IDN2 -IDN +IPTC +KMOD +LIBCRYPTSETUP +LIBCRYPTSETUP_PLUGINS +LIBFDISK +PCRE2 +PWQUALITY +P11KIT +QRENCODE +TPM2 +BZIP2 +LZ4 +XZ +ZLIB +ZSTD +BPF_FRAMEWORK -XKBCOMMON +UTMP +SYSVINIT +LIBARCHIVE

手元のdebainのsidなサーバーも apt upgrade で256.1 になりました.