从列表中编辑 PDF 文件,从半页到从该半页获取整页

从列表中编辑 PDF 文件,从半页到从该半页获取整页

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

相关内容