bash – 将图像目录转换为单个PDF

我有一个图像目录:

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 *.[jJ][pP][gG] output.pdf

或者回答您的其他几个问题并替换您的脚本:

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

将迭代第一个参数中的所有给定扩展,无论大小写,并写入yourdir.pdf.它不会在空间上破坏.

相关文章

用的openwrt路由器,家里宽带申请了动态公网ip,为了方便把2...
#!/bin/bashcommand1&command2&wait从Shell脚本并行...
1.先查出MAMP下面集成的PHP版本cd/Applications/MAMP/bin/ph...
1、先输入locale-a,查看一下现在已安装的语言2、若不存在如...
BashPerlTclsyntaxdiff1.进制数表示Languagebinaryoctalhexa...
正常安装了k8s后,使用kubect工具后接的命令不能直接tab补全...