我有一个如下所示的 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