параметр сжатия pdftk

Я использую pdftk для сжатия pdf с помощью следующей командной строки

pdftk file1.pdf output file2.pdf compress

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

существуют ли [опции]для изменения сжатия???

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

10 ответов


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

  • слабовато (с потерями):

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

    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

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

pdf2ps large.pdf very_large.ps

ps2pdf very_large.ps small.pdf

попробуйте.


попытка сжать PDF, который я сделал с 400ppi tiffs, в основном 8-бит, несколько 24-бит, с сжатием PackBits, используя tiff2pdf обжатый с Застежка-молнией / выкачайте. Одна проблема у меня была с каждым из этих методов: ни один из вышеперечисленных методов не сохранил закладки TOC, которые я кропотливо вручную создал в Acrobat Pro X. Даже не рекомендуется ebook настройка gs. Конечно, я мог бы просто открыть копию оригинала с неповрежденным TOC и сделать 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

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

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

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


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

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

sudo apt-get install cups-pdf

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

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


Я не видел большого уменьшения размера файла с помощью 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.


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

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

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

pdf2ps большие.pdf - / ps2pdf-small.формат PDF

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

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


Если вы хотите сжать PDF, который содержит много выбираемого текста, в Windows вы можете использовать Компрессор NicePDF - выберите опцию" Flate". Попробовав все (cpdf, pdftk, gs), он, наконец, помог мне сжать мои 1360 страниц PDF с 500 МБ до 10 МБ.


У меня была та же проблема, и я использовал эту функцию для сжатия отдельных страниц, в результате чего размер файла сжимается до 1/3 от исходного размера.

for (int i = 1; i <= theDoc.PageCount; i++)
{
       theDoc.PageNumber = i;
       theDoc.Flatten();
}