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

标签 bash pdftk imagemagick-convert

我有一个图片目录:

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 的行也会失败。 我已经尝试了一些事情,但到目前为止还没有成功,希望有人能在这里帮助我。 如果有人也有解决我上面列出的问题的想法,我也很乐意听到他们的意见。

最佳答案

convert 可以一次性完成:

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

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

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

将遍历第一个参数中所有给定的扩展名,而不考虑大小写,并写入 yourdir.pdf。它不会在空格处中断。

关于bash - 将图像目录转换为单个 PDF,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14923657/

相关文章:

bash - rvm install 命令到底有什么作用

ImageMagick 调整大小 - 设置横向和纵向图像的宽度

imagemagick - 尝试将200个jpg文件转换为带有ImageMagick的mp4。一遍又一遍地收到相同的错误

windows - pdftk update_info 命令发出我不明白的警告

macos - 在 wkhtmltopdf 和 pdftk 中使用任何技巧来减小文件大小?

image-processing - ImageMagick 将高大图像裁剪为具有相同宽度动态高度的 A4 PDF 页面

bash - ubuntu bash 脚本 : configure file missing?

linux - 如何使用 expect 从 SFTP 服务器捕获 sftp ls 命令的输出?

linux - xls2csv 的 Bash 脚本

pdf - 将 PDF 分成两部分