Ghostscript: уменьшаем размер PDF файла

ghostscript and 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 раз, при этом текст не пострадал, файлы можно передавать корректорам и т.п.
На этом все.

Рейтинг
( 1 оценка, среднее 5 из 5 )
Понравилась статья? Поделиться с друзьями:
Добавить комментарий

:) :D :( :o 8O :? 8) :lol: :x :P :oops: :cry: :evil: :twisted: :roll: :wink: :!: :?: :idea: :arrow: :| :mrgreen:
This site is protected by reCAPTCHA and the Google Privacy Policy and Terms of Service apply.