it-swarm.com.ru

опция сжатия pdftk

Я использую pdftk, чтобы сжать PDF с помощью следующей командной строки

pdftk file1.pdf output file2.pdf compress

Это работает, когда вес моего файла уменьшился.

Есть ли [варианты], чтобы изменить сжатие ???

Или, может быть, другие решения для сжатия моего файла? Это тяжело, потому что некоторые графики имеют много точек. Есть ли способ, например, конвертировать эти графики в jpg и адаптировать сжатие?

83
RockScience

У меня была та же проблема, и я нашел два разных решения (см. Это тема для более подробной информации). Оба значительно уменьшили размер моего несжатого PDF.

  • Pixelated (с потерями):

    convert input.pdf -compress Zip output.pdf
    
  • Непиксельные (без потерь, но могут отображаться немного по-другому):

    gs -sDEVICE=pdfwrite -dCompatibilityLevel=1.4 -dPDFSETTINGS=/screen -dNOPAUSE -dBATCH  -dQUIET -sOutputFile=output.pdf input.pdf
    

Правка : я только что обнаружил другую опцию (для сжатия без потерь), которая позволяет избежать неприятной команды gs. qpdf - это удобный инструмент, который конвертирует PDF-файлы (сжатие/распаковка, шифрование/дешифрование) и работает намного быстрее, чем команда gs:

qpdf --linearize input.pdf output.pdf
111
nullglob

эта процедура работает довольно хорошо

pdf2ps large.pdf very_large.ps

ps2pdf very_large.ps small.pdf

попробуй.

33
jortizromo

Пытаясь сжать PDF, я сделал это с помощью 400ppi tiff, в основном 8-битных, несколько 24-битных, со сжатием PackBits, используя tiff2pdf, сжатый с помощью Zip/Deflate. У меня возникла одна проблема с каждым из этих методов: ни один из вышеперечисленных методов не сохранил содержание оглавления, которое я кропотливо создал вручную в Acrobat Pro X. Даже не рекомендованную настройку ebook для gs. Конечно, я мог бы просто открыть копию оригинала с неповрежденным оглавлением и выполнить Replace pages, но, к сожалению, ни один из этих методов не дал удовлетворительной работы с самого начала. Либо они настолько уменьшили размер, что качество было недопустимо пиксельным, либо вообще не уменьшили размер, а в одном случае фактически увеличили его, несмотря на потерю качества.

pdftk compress:

no change in size
bookmarks TOC are gone

gs screen:

takes a ridiculously long time and 100% CPU
errors:
    sfopen: gs_parse_file_name failed.                                 ? 
    | ./base/gsicc_manage.c:1651: gsicc_set_device_profile(): cannot find device profile
74.8MB-->10.2MB hideously pixellated
bookmarks TOC are gone

gs printer:

takes a ridiculously long time and 100% CPU
no errors
74.8MB-->66.1MB
light blue background on pages 1-4
bookmarks TOC are gone

gs ebook:

errors:
    sfopen: gs_parse_file_name failed.
      ./base/gsicc_manage.c:1050: gsicc_open_search(): Could not find default_rgb.ic 
    | ./base/gsicc_manage.c:1651: gsicc_set_device_profile(): cannot find device profile
74.8MB-->32.2MB
badly pixellated
bookmarks TOC are gone

qpdf --linearize:

very fast, a few seconds
no size change
bookmarks TOC are gone

pdf2ps:

took very long time
output_pdf2ps.ps 74.8MB-->331.6MB

ps2pdf:

pretty fast
74.8MB-->79MB
very slightly degraded with sl. bluish background
bookmarks TOC are gone
21
hmj6jmh

Если размер файла все еще слишком велик, может помочь использование ps2pdf для уменьшения разрешения получаемого файла PDF:

pdf2ps input.pdf tmp.ps
ps2pdf -dPDFSETTINGS=/screen -dDownsampleColorImages=true -dColorImageResolution=200 -dColorImageDownsampleType=/Bicubic tmp.ps output.pdf

Отрегулируйте значение параметра - dColorImageResolution , чтобы получить результат, который соответствует вашим потребностям (значение описывает разрешение изображения в DPI). Если ваш входной файл в градациях серого, замените Color на Grey или используйте Обе опции в приведенной выше команде также могут помочь. Дальнейшая тонкая настройка возможна путем изменения параметра - dPDFSETTINGS на /default или /принтер . Для объяснения всех возможных вариантов обратитесь к руководство ps2pdf .

16
Dominik

Попробовав gpdf как nullglob , я обнаружил, что получил те же результаты сжатия (файл ~ 900 МБ до ~ 30 МБ), просто используя принтер cups-pdf. Это может быть проще/предпочтительнее, если вы уже просматриваете документ и вам нужно сжать только один или два документа.

В Ubuntu 12.04 вы можете установить это

Sudo apt-get install cups-pdf

После установки обязательно проверьте Системные инструменты > Администрирование > Печать > щелкните правой кнопкой мыши "PDF" и установите для него значение "включить"

По умолчанию выходные данные сохраняются в папке с именем PDF в вашем домашнем каталоге.

3
ryanjdillon

достаточно pdf2ps large.pdf small.pdf вместо двух шагов

pdf2ps large.pdf very_large.ps 
ps2pdf very_large.ps small.pdf

Тем не менее, ps2pdf large.pdf small.pdf является лучшим выбором.

  • ps2pdf намного быстрее
  • без указания дополнительных параметров pdf2ps иногда создает файл большего размера.
2
Lee

Параметр pdf2ps в одну строку (от Lee) фактически увеличил размер pdf. Тем не менее, два шага один сделали лучше. И это может быть объединено в одном, используя перенаправление от & к стандартному вводу/выводу и каналам:

pdf2ps large.pdf - | ps2pdf - small.pdf

действительно уменьшил PDF, сгенерированный xsane, с 18 Mo до 630 ko!

Ссылки потеряны, но для данного примера это не проблема ... и это был самый простой способ достичь желаемого результата.

2
E. Curis

Я не видел большого уменьшения размера файла при использовании qpdf. Лучший способ, который я нашел, это когда pdftk готов, используйте ghostscript для преобразования pdf в postscript, а затем обратно в pdf. В PHP вы бы использовали exec:

$ps = $save_path.'/psfile.ps';
exec('ps2ps2 ' . $pdf . ' ' . $ps);
unlink($pdf);
exec('ps2pdf ' .$ps . ' ' . $pdf);
unlink($ps);

Я использовал это несколько минут назад, чтобы выводить pdftk с 490k до 71k.

1
Tom