我有一个图像目录:
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将其合并到一个文件中。由于文件的命名,我不必担心订购。
由于我是新手,我确信可以做很多改进:
然而,目前我的主要问题是,在某些情况下,我的目录和图像文件的名称中包含空格。 for循环然后迭代文件名的子字符串,我想有转换的行也将失败。 我尝试了一些事情,但到目前为止还没有成功,希望有人能够在这里帮助我。 如果有人有想法解决我上面列出的问题,我也很高兴听到他们。
答案 0 :(得分:7)
convert
可以一次完成:
convert *.[jJ][pP][gG] output.pdf
或者回答您的其他几个问题并替换您的脚本:
#!/bin/bash
shopt -s nullglob nocaseglob
convert "$1"/*.{png,jpg,jpeg} "${1%/}.pdf"
将迭代第一个参数中的所有给定扩展,而不管大小写,并写入yourdir.pdf
。它不会在空格上打破。