ghostscript

Ghostscript: уменьшаем размер PDF файла Когда нужно уменьшить размер PDF файла

Привет!
Продолжаю мини-цикл об обработке PDF файлов.
Наверное многие сталкивались с задачей – уменьшить размер PDF файла. (Не пролезает по почте, ограничение на размер в web-интерфейсе и т.п.)
Если есть подписка на Adobe Acrobat PRO и разовые задания, то с помощью него эта задача легко решается.
Но подписка стоит денег и если такие задания ежедневные, то проще их автоматизировать.
В данной заметке речь опять пойдет о Ghostscript.
Ниже будут примеры, для тестирования которых я использовал FreeBSD, в Linux они будут так же работать, в Windows придется пробовать (как минимум запускающий файл в Windows имеет другое название).
В Ghostscript для указания качества PDF файла в устройстве pdfwriter есть аргумент – -dPDFSETTINGS, который может содержать следующие значения:

  • /screen – Самое низкое качество
  • /ebook – Для чтения с устройств, как правило этого качества хватает для ознакомления с документом
  • /press – Качество достаточно для вывода на принтер
  • /prepress – Самое высокое качество

Мое описание данных профилей очень условное, точное описание в нижерасположенном файле:
Distiller Parameters

Либо на сайте производителя.

Пример использования для одного файла:

gs -sDEVICE=pdfwrite -dCompatibilityLevel=1.5 -dPDFSETTINGS=/ebook -dNOPAUSE -dQUIET -dBATCH -sOutputFile=smalfile.pdf file.pdf

Но если файлов для обработки много, такое решение не проще Adobe Acrobat)
Давайте создадим скрипт для пакетной обработки, на вход будем давать директорию с исходными файлами, на выход директорию для уменьшенных PDF файлов:

vi ~/pdfsmal.sh
#!/bin/sh
#Определим в переменную запуск Ghostscript со всеми нужными нам ключами, добавим ключ -qQUIET (для "тихого вывода")
pdf2pdf="gs -sDEVICE=pdfwrite -dCompatibilityLevel=1.5 -dPDFSETTINGS=/ebook -dNOPAUSE -dQUIET -dBATCH -sOutputFile="

# Сделаем проверку на наличие двух обязательных аргументов
if [ ! -n "$1" ] || [ ! -n "$2" ]
 then
    echo -e "Пожалуйста укажите входную директорию PDF и директорию для сохранения уменьшенного PDF файла \nПример: $0 /indir/ /outdir/"
        exit
fi

#т.к. ниже будет функция, определим в переменные входную и выходную директорию
input=${1}
output=${2}

# Объявим функцию преобразования
pdfsmall() {
echo "Уменьшаем PDF файлы:"
    for file in ${input}*.pdf; do
        #Создадим переменную для хранения пути и имени исходящего файла  
        filesmall=${output}`basename ${file}`
          
        # Запускаем конвертацию файлов     
        ${pdf2pdf}${filesmall} ${file}
        
        # Принтуем, что обработали
        echo "Файл сохранен:" ${filesmall}
    done
}

# Вызов функции преобразования
pdfsmall

Делаем скрипт исполняемым:

chmod +x ~/pdfsmal.sh

Попробуем запустить:

~/testpdf2pdf.sh /share/pdfs/ /share/pdfsmall/
Уменьшаем PDF файлы:
Файл сохранен: /share/pdfsmal/001.pdf
Файл сохранен: /share/pdfsmal/002.pdf
Файл сохранен: /share/pdfsmal/003.pdf
Файл сохранен: /share/pdfsmal/004.pdf
Файл сохранен: /share/pdfsmal/005.pdf
Файл сохранен: /share/pdfsmal/006.pdf
Файл сохранен: /share/pdfsmal/007.pdf
Файл сохранен: /share/pdfsmal/008.pdf
Файл сохранен: /share/pdfsmal/009.pdf
Файл сохранен: /share/pdfsmal/010.pdf
Файл сохранен: /share/pdfsmal/011.pdf
Файл сохранен: /share/pdfsmal/012.pdf

Посмотрим размер исходных файлов:

du -h -d1 /share/pdfs/
109M /share/pdfs/

Так же посмотрим на размер уменьшенных PDF файлов:

du -h -d1 /share/pdfsmall/
3,1M /share/pdfsmall/

Уменьшили PDF почти в 35 раз, при этом текст не пострадал, файлы можно передавать корректорам и т.п.
На этом все.

0 0 голосовать
Рейтинг статьи
Подписаться
Уведомление о
guest
0 Комментарий
Встроенные отзывы
Просмотр всех комментариев