我有一个文件夹,其中填充了以下格式的 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 发行版的一部分。