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

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

pdftk file1.pdf output file2.pdf compress

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

Есть ли [опции] для изменения сжатия?

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

Ответ 1

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

  • Пиксельный (потеря):

    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

Ответ 2

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

pdf2ps large.pdf very_large.ps

ps2pdf very_large.ps small.pdf

попробуйте.

Ответ 3

Пытаясь сжать PDF, я сделал с 400ppi tiffs, в основном 8-бит, несколько 24-бит, с сжатием PackBits, используя tiff2pdf, сжатый с помощью Zip/Deflate. Одна из проблем, с которыми я столкнулся с каждым из этих методов: ни один из вышеперечисленных методов не сохранил закладки 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

Ответ 4

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

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

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

Ответ 5

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

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

sudo apt-get install cups-pdf

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

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

Ответ 6

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

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

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

Ответ 7

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

Ответ 8

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

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