4

私は画像のディレクトリを持っています:

path/to/directory/
   image01.jpg
   image02.jpg
   ...

そしてそれを単一のPDFファイルに変換したい:

path/to/directory.pdf

これは私がこれまでに何とかコーディングしたものです:

#!/bin/bash

echo Directory $1
out=$(echo $1 | sed 's|/$|.pdf|')
echo Output $out

mkdir tmp

for i in $(ls $1)
do
    # MAC hates sed with "I" (ignore case) - thanks SO for the perl solution!
    # I want to match "jpg, JPG, Jpg, ..."
    echo $1$i $(echo "tmp/$i" | perl -C -e 'use utf8;' -pe 's/jpg$/pdf/i')
    convert $1$i $(echo "tmp/$i" | perl -C -e 'use utf8;' -pe 's/jpg$/pdf/i')
done

pdftk tmp/*.pdf cat output $out
rm -rf tmp

そのため、各画像をimagemagickを使用してpdfファイルに変換し、pdftkを使用して単一のファイルにマージするというアイデアがありました。ファイルの名前付けのおかげで、順序を気にする必要はありません。

私はこれの初心者なので、できることはたくさんあると確信しています。

  • ディレクトリ内の画像ファイルのみを繰り返し処理します(Readme.txtがある場合は...)
  • 拡張機能png、jpeg、..を含む
  • 末尾の「/」を使用するのはエレガントではありません

しかし、現在の私の主な問題は、ディレクトリと画像ファイルの名前にスペースが含まれている場合があることです。次に、forループはファイル名のサブ文字列を繰り返し処理し、convertの行も失敗すると思います。私はいくつかのことを試しましたが、今のところ成功していません。誰かがここで私を助けてくれることを願っています。私が上に挙げた問題に対処するためのアイデアを誰かが持っているなら、私もそれらを聞いてとてもうれしいです。

4

1 に答える 1

8

convertこれを一度に行うことができます:

convert *.[jJ][pP][gG] output.pdf

または、他のいくつかの質問に答えて、スクリプトを置き換えるには、次のようにします。

#!/bin/bash
shopt -s nullglob nocaseglob
convert "$1"/*.{png,jpg,jpeg} "${1%/}.pdf"

キャピタライゼーションに関係なく、最初の引数で指定されたすべての拡張子を繰り返し処理し、に書き込みyourdir.pdfます。スペースで壊れることはありません。

于 2013-02-17T17:13:26.310 に答える