83

次のコマンドを使用してjpg、ディレクトリ内のすべてのファイルを単一の pdf ファイルに変換およびマージしました。

convert *.jpg file.pdf

ディレクトリ内のファイルには から1.jpgまでの番号が付けられてい123.jpgます。変換はうまくいきましたが、変換後にページがすべて混同されました。私は、pdf に、名前が付けられているのと同じ順序でから1.jpgまでのページを含めることを望みました。123.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。

4

8 に答える 8

138

lsまたは、マニュアルを読んで次を参照してください。

-v テキスト内の (バージョン) 番号の自然な並べ替え

したがって、単一のコマンドで必要なことを実行します。

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

楽しんでください ;) F.

于 2014-01-22T09:47:53.687 に答える
23

問題は、シェルがワイルドカードを純粋にアルファベット順に展開しているためであり、数字の長さが異なるため、順序が正しくないためです。

$ 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

これで、ファイルはワイルドカードによって正しい順序で照合され、convert コマンドの準備が整います。

$ echo *.jpg
001.jpg 002.jpg 003.jpg 004.jpg 005.jpg 006.jpg 007.jpg 008.jpg ...
于 2012-11-29T03:32:21.730 に答える
7

あなたが使用することができます

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

https://www.imagemagick.org/script/command-line-processing.php経由:

他の画像ファイルを参照するもう 1 つの方法は、ファイル名にフォーマット文字をシーン範囲とともに埋め込むことです。ファイル名を考えてみましょう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も参照してください。

于 2017-10-21T23:18:59.140 に答える
3

これが私のやり方です:
最初の行は、変換コマンドを使用してすべてのjpgファイルをpdfに変換します。
2行目は、すべてのpdfファイルをページごとのpdfとして1つにマージしています。これは 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"`
于 2014-10-28T14:11:53.260 に答える