преобразовать каталог изображений в один 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

Итак, идея заключалась в том, чтобы преобразовать каждое изображение в файл PDF с помощью imagemagick и использовать pdftk для объединения его в один файл. Благодаря именованию файлов мне не нужно беспокоиться о порядке.

Поскольку я новичок в этом, я уверен, что можно сделать много уточнений:

  • перебирать только файлы изображений в каталоге (если есть какой-то Readme.txt,...)
  • включая расширения png, jpeg, ...
  • использование завершающего "/" не элегантно, я администратор
  • и т.п.

Однако в настоящее время моя главная проблема заключается в том, что в некоторых случаях мои каталоги и файлы изображений содержат пробелы в своих именах. Затем цикл for выполняет итерацию по подстрокам имени файла, и я предполагаю, что строка с convert также завершится ошибкой. Я пробовал некоторые вещи, но пока не преуспел, и надеюсь, что кто-то сможет мне помочь здесь. Если у кого-то есть идеи по решению проблем, которые я перечислил выше, я тоже был бы очень рад их услышать.


person nobody2100    schedule 17.02.2013    source источник


Ответы (1)


convert может сделать это за один раз:

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

Или, чтобы ответить на несколько других ваших вопросов и заменить ваш скрипт:

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

будет перебирать все заданные расширения в первом аргументе, независимо от регистра, и записывать в yourdir.pdf. На пробелы не разбивается.

person that other guy    schedule 17.02.2013
comment
вау... это смущает, лол Спасибо за быстрый ответ и, даже больше, за это простое решение ;) - person nobody2100; 17.02.2013
comment
Если вы заинтересованы в обучении, whatswrongwithmyscript.com укажет на дюжину вещей, которые нужно сделать в исходном сценарии, чтобы помогите разобраться с пробелами. Я был бы рад дать ему еще один взгляд после этого. - person that other guy; 17.02.2013
comment
спасибо за ссылку! это, безусловно, помогает выявить распространенные ошибки, которые я допустил в своем исходном сценарии. также спасибо за обновление сценария! теперь он в моей локальной корзине как команда dir2pdf ;D - person nobody2100; 02.03.2013