在 Linux 中将多个 JPG 合并为单个 PDF

新手上路,请多包涵

我使用以下命令将目录中的所有 JPG 文件转换并合并为单个 PDF 文件:

 convert *.jpg file.pdf

目录中的文件编号从 1.jpg123.jpg 。转换很顺利,但转换后,页面都混在一起了。我希望 PDF 具有从 1.jpg123.jpg 的页面,其顺序与它们命名的顺序相同。我也使用以下命令进行了尝试:

 cd 1
FILES=$( find . -type f -name "*jpg" | cut -d/ -f 2)
mkdir temp && cd temp
for file in $FILES; do
    BASE=$(echo $file | sed 's/.jpg//g');
    convert ../$BASE.jpg $BASE.pdf;
    done &&
pdftk *pdf cat output ../1.pdf &&
cd ..
rm -rf temp

但仍然没有运气。操作系统是Linux。

原文由 Harikrishnan 发布,翻译遵循 CC BY-SA 4.0 许可协议

阅读 1.2k
2 个回答

问题是因为您的 shell 以纯字母顺序扩展通配符,并且由于数字的长度不同,因此顺序将不正确:

 $ echo *.jpg
1.jpg 10.jpg 100.jpg 101.jpg 102.jpg ...

解决方案是根据需要用零填充文件名,以便在运行转换命令之前它们的长度相同:

 $ for i in *.jpg; do num=`expr match "$i" '\([0-9]\+\).*'`;
> padded=`printf "%03d" $num`; mv -v "$i" "${i/$num/$padded}"; done

现在文件将以正确的顺序与通配符匹配,为转换命令做好准备:

 $ echo *.jpg
001.jpg 002.jpg 003.jpg 004.jpg 005.jpg 006.jpg 007.jpg 008.jpg ...

原文由 Delan Azabani 发布,翻译遵循 CC BY-SA 3.0 许可协议

来自 ls手册

-v 文本中(版本)数字的自然排序

所以,在一个命令中做我们需要的事情:

 convert $(ls -v *.jpg) foobar.pdf

请注意 convertImageMagick 的一部分。

原文由 Felix Defrance 发布,翻译遵循 CC BY-SA 4.0 许可协议

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题