Продолжаем мини-цикл посвященный преобразованию файлов формата 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
На этом все.