使用终端将数百张 jpg 转换为 PDF

使用终端将数百张 jpg 转换为 PDF

我知道这个命令convert *.jpg myPdf1.pdf可以将多个 JPEG 文件转换为一个 PDF。

但我想将多个 JPEG 转换为多个 PDF,例如:

myJPG1.jpg → myPDF1.pdf
myJPG2.jpg → myPDF2.pdf
myJPG3.jpg → myPDF3.pdf

有没有什么好的方法来处理这样的事情?

答案1

我对批处理文件的第一反应几乎总是find。如果您需要构建任何类型的过滤(您在这里不需要),它就很棒,但它仍然是我的最爱。除非您告诉它(使用-maxdepth 1或其他),否则它还会递归到子目录中:

find -name '*.jpg' -exec convert "{}" "{}.pdf" \;
rename 's/\.jpg\.pdf$/.pdf/' *.jpg.pdf

find/语句convert将输出大量.jpg.pdf文件。第二个语句会清理这些文件。


在这种简单的情况下,也许有一种更优雅的方法:

for file in *.jpg ; do convert "$file" "${file/%jpg/pdf}"; done

这不会递归,您不必费心清理文件名。


我差点忘了,ImageMagick 有一个数字输出,可能非常适合您的用例。下面将在“myPDF”末尾附加一个三位数标识符(000001、等):002

convert *.jpg myPDF%03d.pdf

显然,如果您要处理的条目超过一千个,请增加该数字。如果您不想用零填充,请删除前导零。

答案2

很遗憾,convert在将图像“打包”到 PDF 之前会更改图像质量。因此,为了将质量损失降到最低,最好将原始图像jpg.png也适用于) 转换为 PDF,您需要使用img2pdf

我使用这些命令:

随着时间的推移,我发现了一种更简单、更短的方法一个班轮解决方案也使用img2pdf不需要pdftk像原始答案中那样

  1. 制作 PDF

    img2pdf *.jp* --output combined.pdf

  2. (可选)对输出的 PDF 进行 OCR

    ocrmypdf combined.pdf combined_ocr.pdf


以下是原来的使用更多命令和更多所需工具来回答命令:


  1. 这样可以使pdf每个图像都生成一个文件jpg,而不会损失分辨率或质量:

    ls -1 ./*jpg | xargs -L1 -I {} img2pdf {} -o {}.pdf

  2. 在这里你将得到*.pdfs 作为*.jpg.pdf,因此将进行一些重命名

    mmv“*.jpg.pdf”“#1.pdf”

您需要安装 img2pdf 和 mmv

sudo apt install img2pdf mmv

相关内容