Продолжаем мини-цикл посвященный преобразованию файлов формата PDF.
В прошлой заметке мы научились извлекать отдельные страницы из многостраничного документа PDF.
Давайте рассмотрим как можно с помощью Ghostscript объединять несколько PDF файлов в один.
Операция очень похожа на извлечение отдельных страниц, просто на ввод мы указываем список файлов, которые хотим объединить.
Простой пример:
gs -sDEVICE=pdfwrite -dNOPAUSE -dBATCH -dSAFER -sOutputFile=merge.pdf 01.pdf 02.pdf 03.pdf GPL Ghostscript 9.52 (2020-03-19) Copyright (C) 2020 Artifex Software, Inc. All rights reserved. This software is supplied under the GNU AGPLv3 and comes with NO WARRANTY: see the file COPYING for details. Processing pages 1 through 1. Page 1 Processing pages 1 through 1. Page 1 Processing pages 1 through 1. Page 1
Обратите внимание, что в вышеуказанном примере не указан режим -dPDFSETTINGS, поэтому выходной файл будет с настройкой по умолчанию: 72dpi в растровых изображениях, цветовая модель не меняется.
Давайте сделаем скрипт, который будет на вход получать директорию с отдельными PDF файлами и директорию с именем выходного файла, в этот раз на Bash:
vi ~mergepdf.sh
#!/bin/bash #Определим в переменную запуск Ghostscript со всеми нужными нам ключами, добавим ключ -qQUIET (для "тихого вывода") pdf2pdf="gs -sDEVICE=pdfwrite -dNOPAUSE -dQUIET -dBATCH -sOutputFile=" # Сделаем проверку на наличие двух обязательных аргументов if [ ! -n "$1" ] || [ ! -n "$2" ] then echo -e "Пожалуйста укажите входную директорию PDF и директорию с именем файла для сохранения многостраничного PDF файла \nПример: $0 /indir/ /outdir/file_name.pdf" exit fi for file in ${1}*.pdf; do #наполним массив arrfile+=${file}" " done for items in "${arrfile[@]}"; do echo "Объединяем PDF файлы:" ${items} ${pdf2pdf}${2} ${items} echo "Файл сделан:" ${2} done
Делаем файл исполняемым:
chmod +x ~mergepdf.sh
Запускаем:
~mergepdf.sh /share/pdf/ /share/mergepdf/merge.pdf Объединяем PDF файлы: /share/pdf/001.pdf /share/pdf/002.pdf /share/pdf/003.pdf /share/pdf/004.pdf /share/pdf/005.pdf /share/pdf/006.pdf /share/pdf/007.pdf /share/pdf/008.pdf /share/pdf/009.pdf /share/pdf/010.pdf /share/pdf/011.pdf /share/pdf/012.pdf Файл сделан: /share/mergepdf/merge.pdf
На этом все.