以下のPDFファイルがあります。
----------
||----| |
||----| |
| |
| |
| |
|________|
次のコマンドの助けを借りて
$ convert -density 300 -quality 100 -crop 0x50% in.pdf out.png
$ ls
in.pdf, out-0.png, out-1.png
$ montage -mode concatenate -tile 1x out-0.png out-0.png out.pdf
$ ls
in.pdf, out-0.png, out-1.png out.pdf
こんなファイルが出ますね
----------
||----| |
||----| |
| |
||----| |
||----| |
|________|
その後、印刷してPDF文書を削除する必要があります。
与えられたファイルのリストを使用して同じ効果を得るにはどうすればよいですか?
$ cat list-of-pdfs.txt
file 1.pdf
file 2.pdf
file 3.pdf
...
答え1
単一のファイルに対して動作して結果をin.pdf
生成する一対のコマンドがあります。out.pdf
convert -density 300 -quality 100 -crop 0x50% in.pdf out.png montage -mode concatenate -tile 1x out-0.png out-0.png out.pdf
複数のファイルに変更を適用するため、固定名が使用できないため、ソースファイルが提供されたと想定してターゲットファイル名を生成します。
file=in.pdf # in.pdf
dest=${file%.pdf}-out.pdf # in-out.pdf
convert -density 300 -quality 100 -crop 0x50% "$file" "$dest"
montage -mode concatenate -tile 1x out-0.png out-0.png "$dest"
処理したい各ファイルのイメージが出力と一致するように同じである必要があるのか、それとも名前を付ける必要があるのかわからないので、out-0.png
これを定数にしておきます。
これで、各ファイルに効果を順番に適用する必要があります。一般的な構造はfor
ループですが、リストにファイルがあるのでループを使用しますwhile
。
while IFS= read -r file
do
# Apply your changes to the "$file"
#
dest="${file%.pdf}-out.pdf"
echo "Processing $file into ${dest##*/}" >&2
convert -density 300 -quality 100 -crop 0x50% "$file" "$dest"
montage -mode concatenate -tile 1x out-0.png out-0.png "$dest"
done <list-of-pdfs.txt