опция сжатия pdftk - PullRequest
       8

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

83 голосов
/ 14 марта 2011

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

pdftk file1.pdf output file2.pdf compress

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

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

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

Ответы [ 10 ]

112 голосов
/ 02 мая 2011

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

  • Неровной (с потерями):

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

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

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

qpdf --linearize input.pdf output.pdf
33 голосов
/ 26 марта 2012

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

pdf2ps large.pdf very_large.ps

ps2pdf very_large.ps small.pdf

попробуй.

21 голосов
/ 08 сентября 2014

Пытаясь сжимать 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
16 голосов
/ 17 февраля 2015

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

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

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

3 голосов
/ 07 ноября 2012

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

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

sudo apt-get install cups-pdf

После установки,Обязательно установите флажок Системные инструменты > Администрирование > Печать >, щелкните правой кнопкой мыши «PDF» и установите для него значение «enable»

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

2 голосов
/ 05 июля 2018

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

pdf2ps large.pdf - |ps2pdf - small.pdf

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

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

2 голосов
/ 08 мая 2018

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

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

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

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

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

0 голосов
/ 03 октября 2016

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

0 голосов
/ 11 апреля 2012

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

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