合并具有相似名称的 PDF 文件

合并具有相似名称的 PDF 文件

我有一个文件夹,其中填充了以下格式的 PDF 文件:

SI-T-xxxxxx.pdf
SI-T-xxxxxx-sol.pdf
SI-T-yyyyyy.pdf
SI-T-yyyyyy-sol.pdf
等等,中间部分是数字。

我想要一种将每对文件合并到一个 pdf 中的方法,而不需要 -sol

我如何在终端中执行此操作?谢谢

答案1

pdfunite实用程序似乎可以满足您的需求(在类似 Debian 的 Linux 发行版中,它是软件包的一部分poppler-utils

$ pdfunite a.pdf b.pdf c.pdf combined.pdf

另一个选择是 GhostScript:

$ gs -q -sPAPERSIZE=letter -dNOPAUSE -dBATCH -sDEVICE=pdfwrite =sOutputFile=combined.pdf a.pdf b.pdf c.pdf

ImageMagick 还支持 GhostScript,所以如果您已经熟悉它:

$ convert a.pdf b.pdf c.pdf combined.pdf

Python还提供了一个PDF库,pdftools

$ python3 pdftools/pdfmerge.py -o combined.pdf -d a.pdf b.pdf c.pdf

无论您使用哪种工具,我们都需要一种根据您描述的标准来配对文件的方法。这个大括号扩展的 glob 应该获取每对中的第一个:

SI-T-*{0..9}.pdf

所以我们可以循环它:

for pdf in SI-T-*{0..9}.pdf; do
    stuff
done

我们可以根据第一个文件名按程序确定第二个文件名:

$ pdf1='SI-T-xxxxxx.pdf'
$ pdf2="$(basename "$pdf1" .pdf)-sol.pdf"
$ printf "%s %s" "$pdf1" "$pdf2"
$ SI-T-xxxxxx.pdf SI-T-xxxxxx-sol.pdf

因此,让我们将其纳入我们的循环中:

for pdf1 in SI-T-*{0..9}.pdf; do
    pdf2="$(basename "$pdf1" .pdf)-sol.pdf"
    pdf3="$(basename "$pdf1" .pdf)-combined.pdf"
    if ! [[ -r "$pdf2" ]]; then
        printf "%s not found to merge with %s; skipping" "$pdf2" "$pdf1" >&2        
    else
        convert "$pdf1" "$pdf2" "$pdf3"
    fi
done

答案2

您可以查看这篇较长的文章如果您想要更详细的讨论,但简而言之:

pdftk SI-T-xxxxxx.pdf SI-T-xxxxxx-sol.pdf cat output SI-T-xxxxxx-combined.pdf

将 SI-T-xxxxxx.pdf 和 SI-T-xxxxxx-sol.pdf 合并到一个名为 SI-T-xxxxxx-combined.pdf 的文件中同时保留超链接

pdftk是开源的并且Debian 发行版的一部分

相关内容