суббота, 29 мая 2010 г.

Объеденяем pdf-файлы

Вот возникла необходимость склеить несколько pdf-файлов в один.
После недолгих поисков наткнулся вот здесь на такую команду:
gs -dNOPAUSE -sDEVICE=pdfwrite -sOUTPUTFILE=combinedpdf.pdf -dBATCH 1.pdf 2.pdf 3.pdf
Ghostscript - пакет, позволяющий просматривать или печатать PostScript и pdf-файлы, конвертировать их в другие форматы, ну и конечно же позволяет сшить множество pdf-файлов в один.

Вот что означают ключи в указанном выше примере команды:
  • gs - вызов программы Ghostscript
  • -dBATCH - завершить работу Ghostscript после выполнения
  • -dNOPAUSE - производить операции без запросов пользователю
  • -q - не выводить сообщений
  • -sDEVICE=pdfwrite - вывод устройством pdfwrite
  • -sOutputFile=combinedpdf.pdf - имя результирующего файла
  •  1.pdf 2.pdf 3.pdf1.pdf 2.pdf 3.pdf - входные pdf-файлы
Нет ничего проще использования этой команды если необходимо объединить небольшое количество исходных файлов. Все меняется, если нужно объединить десятки, а то и сотни pdf.
Для объединения большого количества pdf-файлов было бы логично использовать механизм каналов в совокупности с какой-нибудь другой командой, ну например с командой ls, которая позволяет вывести отсортированным списком все имеющиеся в папке pdf-файлы.
Но ни одна из комбинаций команд с использованием механизма каналов у меня результата не дала.
Поизучав документацию к Ghostscript пришел к выводу, что такой номер, в случае с pdf-файлами, не пройдет.
А так хотелось.
И тут, совершенно случайно наткнулся на одном англоязычном ресурсе на комментарий, как раз по этому вопросу.
Суть комментария такова: нужно создать скрипт, и вызывать этот скрипт с указанием в качестве ключа команду ls. Ура!
Сразу же делаю как сказано в комментарии.
В папке /usr/local/bin/ создаю файл скрипта combinepdf следующего содержания:
#!/bin/bash
gs -dNOPAUSE -sDEVICE=pdfwrite -sOUTPUTFILE=combined.pdf -dBATCH $@

и делаю его исполняемым.
Все!
Теперь достаточно вызвать этот скрипт с командой ls, в качестве ключа и вуаля!
Все работает!

Пример команды:
combinepdf `ls -v -1 *.pdf`
Описание использованных ключей команды ls
  • ls - вывод содержимого каталога
  • -v - сортировка вывода
  • -1 - вывод по одному файлу в строке
Результат:
при помощи этого нехитрого скрипта появляется возможность объединения множества pdf-файлов в один, обеспечивая при этом необходимый порядок страниц. За что огромное спасибо Rick, оставившему очень полезный комментарий на англоязычном ресурсе

Комментариев нет:

Отправить комментарий