【问题标题】:convert a directory of images into a single PDF将图像目录转换为单个 PDF
【发布时间】:2013-02-02 03:17:39
【问题描述】:

我有一个图片目录:

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

【问题讨论】:

    标签: bash pdftk imagemagick-convert


    【解决方案1】:

    convert可以一口气搞定:

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

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

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

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

    【讨论】:

    • 哇...这太尴尬了哈哈感谢您的快速回复,更感谢这个简单的解决方案;)
    • 如果您对学习体验感兴趣,whatswrongwithmyscript.com 会在您的原始脚本中指出十几件事来帮助处理空格。我很乐意之后再看一看。
    • 感谢您的链接!它肯定有助于发现我在原始脚本中犯的常见错误。还要感谢脚本的更新!它现在作为“dir2pdf”命令在我的本地 bin 中;D
    猜你喜欢
    • 2014-07-25
    • 2010-10-15
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-09-01
    • 2018-03-11
    • 1970-01-01
    相关资源
    最近更新 更多