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