Пакетное изменение размера и сжатие файлов PDF

15

Мне нужен способ уменьшить и сжать пакеты файлов PDF. Я бы предпочел сделать это на Windows, но Linux будет хорошо, если это будет означать более плавный рабочий процесс.

Я знаю, что есть программы, такие как NitroPDF и Acrobat, которые позволяют вам сделать это, но я боюсь, что это должно быть сделано для каждого файла отдельно. Эти программы также недороги, и я бы предпочел не покупать их, чтобы использовать одну или две функции.

Справочная информация: я использую CamScanner для оцифровки чеков и счетов-фактур для входа в учетные записи (FreeAgent). Все PDF-файлы CamScanner имеют размер A4, а многостраничные часто превышают лимит в 2 МБ.

Стан
источник

Ответы:

15

Я предлагаю инструмент командной строки, который можно легко объединить с циклами на встроенных языках сценариев в Windows, Linux, OS X и т. Д.


ImageMagick поддерживает PDF-файлы и имеет resizeопцию с его инструментом преобразования . Я никогда не использовал это лично, но вы можете попробовать поиграть с этим.

Вы можете также использовать compressопцию (есть пример здесь ):

Повернуть PDF

$ convert -rotate 270 -density 300x300 -compress lzw in.pdf out.pdf

Это предполагает PDF-файл с поддержкой TIFF. Параметр плотности важен, потому что в противном случае ImageMagick преобразует изображение вниз (по некоторым причинам). Добавление опции сжатия помогает уменьшить общий размер PDF-файла без потери качества.

Для многостраничных PDF-файлов, вы можете использовать pdftk, а затем использовать mogrifyиз ImageMagick для преобразования каждой страницы на месте:

$ pdftk in.pdf burst
$ mogrify -rotate 270 -density 300x300 -compress lzw pg_*.pdf
$ pdftk pg*.pdf cat output out.pdf
$ rm pg*.pdf


Чтобы конвертировать PDF файлы с помощью ImageMagick, вам нужно установить GhostScript .


ImageMagick может конвертировать многостраничные PDF-файлы. Хотя mogrifyбудет конвертировать на месте, я рекомендую вам использовать, convertчтобы вы могли сохранить оригиналы в случае аварии.


Я провел некоторое тестирование вашего предоставленного образца PDF. Это работало довольно хорошо для меня:

convert -density 200 -compress jpeg -quality 20 test.pdf test2.pdf

Плотность по умолчанию в 72DPI. Установив его выше, мы можем получить более высокое разрешение и, следовательно, приемлемое качество. Он выглядел хорошо 150, и был немного меньше, но если вы хотите обслуживать ряд PDF-файлов, 200должно работать.

Сжатие JPEG должны либо автоматически выбрать уровень или значение по умолчанию для 92на шкале , 1чтобы 100с 100быть лучшими. Установив его 20, он выглядит почти так же хорошо, как и оригинал (немного нечеткий, а небольшой текст внизу немного сложен для чтения, но все равно изначально он был).

Эти варианты принести 1.7Mb образец вниз к 0.5Mb , сохраняя при этом его читаемым. Вы можете немного поэкспериментировать.

Если вы хотите меньший размер (как файла, так и изображения / PDF), вы можете использовать -resize #%, например -resize 75%. Однако в вашем примере PDF это делает мелкий шрифт внизу практически нечитаемым.

Если вам все еще не хватает места, особенно для многостраничных PDF-файлов, вы можете сжать их еще больше, добавив файлы в ZIP (или другой) архив. Это уменьшило размер файла до 0,43 МБ в этом тестовом PDF (снижение качества сжатия JPEG имеет гораздо более радикальный эффект). Вы также можете разбить файл PDF на страницы с помощью pdftk, как предложил @glallen в своем редактировании, или разбить архив и рекомбинировать на другом конце.

2MB - также довольно маленький лимит вложений, вы можете посмотреть на других почтовых провайдеров. Из памяти GMail предоставляет более 10 МБ на электронную почту.

Эти и другие опции полностью документированы на их сайте .

боб
источник
Это кажется отличным подходом, но я не думаю, что мои PDF-файлы поддерживаются TIFF. CamScanner сначала делает снимки в формате JPEG, а затем преобразует их в PDF для экспорта. Обработка этих файлов PDF, похоже, сокращает их, как указывает сообщение в блоге, независимо от сжатия. Преобразование из PDF в TIFF, а затем обратно в PDF, похоже, сохраняет качество, но увеличивает размер файла и портит размер и плотность страницы.
Стэн
@paganompu Как я понимаю, вы хотите уменьшить размер файла. Как насчет сжатия как JPEG? Как resizeполучилось? У вас есть (не чувствительный) файл сэмпла, с которым мы могли бы поиграть? Допустим ли понижающий отбор?
Боб
JPEG был бы в порядке, но мне нужно загружать многостраничные документы, и у меня может быть только одно вложение для каждой записи аккаунта. Даунсэмплинг серьезен: этот тестовый документ не читается после конвертации со сжатием без потерь.
Стэн
@paganompu Я немного поэкспериментировал и обновил ответ рабочей командой. Смотрите здесь для проверки вашего файла.
Боб
Эта команда работает как шарм. Похоже, что моя "пониженная выборка" была вызвана пропуском density... Клянусь, я могу читать и следовать инструкциям! Немного смущен теперь: S Спасибо, что нашли время помочь мне Боб
Стэн
19

Таким образом, convertImageMagick будет производить растеризованный PDF, и многие люди будут заинтересованы в сохранении векторной графики и текста без изменений, чтобы сжимались только встроенные изображения. Так что хорошей альтернативой сжатию является использование gsиз ghostscriptпримера использования пакета :

gs -sDEVICE=pdfwrite -dCompatibilityLevel=1.4 -dPDFSETTINGS=/ebook -dNOPAUSE -dQUIET -dBATCH -sOutputFile=out.pdf in.pdf

в приведенном выше параметре команды: -dPDFSETTINGS=/ebookважно. Может иметь 3 значения:

-dPDFSETTINGS=/screen   (screen-view-only quality, 72 dpi images)
-dPDFSETTINGS=/ebook    (low quality, 150 dpi images)
-dPDFSETTINGS=/printer  (high quality, 300 dpi images)
-dPDFSETTINGS=/prepress (high quality, color preserving, 300 dpi imgs)
-dPDFSETTINGS=/default  (almost identical to /screen)
aNeutrino
источник