合并多个JPG进入Linux的单一的PDF(Merge multiple jpg into sing

2019-08-03 07:09发布

我用下面的命令转换和合并所有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。

Answer 1:

问题是,因为你的外壳扩展通配符在纯粹的字母顺序排列,并且因为数字的长度不同,顺序将是不正确的:

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

解决的办法是垫的要求,使他们正在运行的convert命令之前相同的长度为零的文件名:

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

现在,这些文件将被按照正确的顺序通配符,准备convert命令匹配:

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


Answer 2:

或者只是阅读ls手册,看看:

-v自然排序文本内(版本)号

所以,做什么,我们需要在单个命令。

convert `ls -v *.jpg` foobar.pdf

玩得开心;)F.



Answer 3:

这就是我要做的事:
第一条线将所有的JPG文件转换为PDF它使用convert命令。
第二行是合并所有PDF文件到一个单一的按页面PDF。 这是使用GS((PostScript和PDF语言翻译和预览))

for i in $(find . -maxdepth 1 -name "*.jpg" -print); do convert $i ${i//jpg/pdf}; done
gs -dNOPAUSE -sDEVICE=pdfwrite -sOUTPUTFILE=merged_file.pdf -dBATCH `find . -maxdepth 1 -name "*.pdf" -print"`


Answer 4:

你可以使用

convert '%d.jpg[1-132]' file.pdf

通过https://www.imagemagick.org/script/command-line-processing.php :

参照其他图像文件的另一种方法是通过嵌入在文件名中的格式化字符与场景范围。 考虑文件名image-%d.jpg[1-5] 命令

magick image-%d.jpg[1-5]使ImageMagick的尝试与这些文件名读取的图像:

image-1.jpg image-2.jpg image-3.jpg image-4.jpg image-5.jpg

又见https://www.imagemagick.org/script/convert.php



Answer 5:

以上所有的答案失败对我来说,当我想合并许多高分辨率JPEG图像(从扫描的书籍)。

ImageMagick的努力中的所有文件加载到内存,因此我用下面的两个步骤的方法:

find -iname "*.JPG" | xargs -I'{}' convert {} {}.pdf
pdfunite *.pdf merged_file.pdf

需要注意的是这种方法,你也可以使用GNU平行加快转换:

find -iname "*.JPG" | parallel -I'{}' convert {} {}.pdf


Answer 6:

混合最初的想法与他们的答复,我想这也许代码满意

jpgs2pdf.sh

#!/bin/bash

cd $1
FILES=$( find . -type f -name "*jpg" | cut -d/ -f 2)
mkdir temp > /dev/null
cd temp

for file in $FILES; do
 BASE=$(echo $file | sed 's/.jpg//g');
 convert ../$BASE.jpg $BASE.pdf;
done &&

pdftk `ls -v *pdf` cat output ../`basename $1`.pdf
cd ..
rm -rf temp


文章来源: Merge multiple jpg into single pdf in Linux