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

<p>я использую <strong>pdftk</strong>, чтобы сжать pdf с помощью следующей командной строки</p><pre><code>pdftk file1.pdf output file2.pdf compress </code></pre><p>это работает, когда вес моего файла уменьшился.</p><p>есть ли [варианты], чтобы изменить сжатие ???</p><p>или, может быть, другие решения для сжатия моего файла? это тяжело, потому что некоторые графики имеют <strong>много точек</strong>. есть ли способ, например, конвертировать эти графики в jpg и адаптировать сжатие?</p>

<p>у меня была та же проблема, и я нашел два разных решения (см. это <a href="http://ubuntuforums.org/archive/index.php/t-1133357.html">тема</a> для более подробной информации). оба значительно уменьшили размер моего несжатого pdf.</p><ul> <li> <p>pixelated (с потерями):</p> <pre><code>convert input.pdf -compress zip output.pdf </code></pre></li> <li> <p>непиксельные (без потерь, но могут отображаться немного по-другому):</p> <pre><code>gs -sdevice=pdfwrite -dcompatibilitylevel=1.4 -dpdfsettings=/screen -dnopause -dbatch -dquiet -soutputfile=output.pdf input.pdf </code></pre></li> </ul><p><strong> правка </strong>: я только что обнаружил другую опцию (для сжатия без потерь), которая позволяет избежать неприятной команды gs. <a href="http://qpdf.sourceforge.net/">qpdf</a> - это удобный инструмент, который конвертирует pdf-файлы (сжатие/распаковка, шифрование/дешифрование) и работает намного быстрее, чем команда gs:</p><pre><code>qpdf --linearize input.pdf output.pdf </code></pre>

<p>эта процедура работает довольно хорошо</p><pre><code>pdf2ps large.pdf very\_large.ps ps2pdf very\_large.ps small.pdf </code></pre><p>попробуй.</p>

<p>пытаясь сжать pdf, я сделал это с помощью 400ppi tiff, в основном 8-битных, несколько 24-битных, со сжатием packbits, используя <code>tiff2pdf</code>, сжатый с помощью zip/deflate. у меня возникла одна проблема с каждым из этих методов: ни один из вышеперечисленных методов не сохранил содержание оглавления, которое я кропотливо создал вручную в acrobat pro x. даже не рекомендованную настройку <code>ebook</code> для <code>gs</code>. конечно, я мог бы просто открыть копию оригинала с неповрежденным оглавлением и выполнить <code>replace pages</code>, но, к сожалению, ни один из этих методов не дал удовлетворительной работы с самого начала. либо они настолько уменьшили размер, что качество было недопустимо пиксельным, либо вообще не уменьшили размер, а в одном случае фактически увеличили его, несмотря на потерю качества.</p><p><code>pdftk compress</code>:</p><pre><code>no change in size bookmarks toc are gone </code></pre><p><code>gs screen</code>:</p><pre><code>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 </code></pre><p><code>gs printer</code>:</p><pre><code>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 </code></pre><p><code>gs ebook</code>:</p><pre><code>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 </code></pre><p><code>qpdf --linearize</code>:</p><pre><code>very fast, a few seconds no size change bookmarks toc are gone </code></pre><p><code>pdf2ps</code>:</p><pre><code>took very long time output\_pdf2ps.ps 74.8mb-->331.6mb </code></pre><p><code>ps2pdf</code>:</p><pre><code>pretty fast 74.8mb-->79mb very slightly degraded with sl. bluish background bookmarks toc are gone </code></pre>

<p>если размер файла все еще слишком велик, может помочь использование ps2pdf для уменьшения разрешения получаемого файла pdf:</p><pre><code>pdf2ps input.pdf tmp.ps ps2pdf -dpdfsettings=/screen -ddownsamplecolorimages=true -dcolorimageresolution=200 -dcolorimagedownsampletype=/bicubic tmp.ps output.pdf </code></pre><p>отрегулируйте значение параметра <em> - dcolorimageresolution </em>, чтобы получить результат, который соответствует вашим потребностям (значение описывает разрешение изображения в dpi). если ваш входной файл в градациях серого, замените <em> color </em> на <em> grey </em> или используйте обе опции в приведенной выше команде также могут помочь. дальнейшая тонкая настройка возможна путем изменения параметра <em> - dpdfsettings </em> на <em>/default </em> или <em>/принтер </em>. для объяснения всех возможных вариантов обратитесь к <a href="http://ghostscript.com/doc/7.07/ps2pdf.htm">руководство ps2pdf</a> .</p>

<p>попробовав gpdf как <a href="https://stackoverflow.com/users/356426/nullglob">nullglob</a> , я обнаружил, что получил те же результаты сжатия (файл ~ 900 мб до ~ 30 мб), просто используя принтер cups-pdf. это может быть проще/предпочтительнее, если вы уже просматриваете документ и вам нужно сжать только один или два документа.</p><p>в ubuntu 12.04 вы можете установить это</p><pre><code>sudo apt-get install cups-pdf </code></pre><p>после установки обязательно проверьте <em> системные инструменты </em>> <em> администрирование </em>> <em> печать </em>> щелкните правой кнопкой мыши "pdf" и установите для него значение "включить"</p><p>по умолчанию выходные данные сохраняются в папке с именем <em>pdf</em> в вашем домашнем каталоге.</p>

<p>достаточно <code>pdf2ps large.pdf small.pdf</code> вместо двух шагов</p><pre><code>pdf2ps large.pdf very\_large.ps ps2pdf very\_large.ps small.pdf </code></pre><p>тем не менее, <code>ps2pdf large.pdf small.pdf</code> является лучшим выбором.</p><ul> <li><code>ps2pdf</code> намного быстрее</li> <li>без указания дополнительных параметров <code>pdf2ps</code> иногда создает файл большего размера.</li> </ul>

<p>параметр pdf2ps в одну строку (от lee) фактически увеличил размер pdf. тем не менее, два шага один сделали лучше. и это может быть объединено в одном, используя перенаправление от & к стандартному вводу/выводу и каналам:</p><p>pdf2ps large.pdf - | ps2pdf - small.pdf</p><p>действительно уменьшил pdf, сгенерированный xsane, с 18 mo до 630 ko!</p><p>ссылки потеряны, но для данного примера это не проблема ... и это был самый простой способ достичь желаемого результата.</p>

<p>я не видел большого уменьшения размера файла при использовании qpdf. лучший способ, который я нашел, это когда pdftk готов, используйте ghostscript для преобразования pdf в postscript, а затем обратно в pdf. в php вы бы использовали exec:</p><pre><code>$ps = $save\_path.'/psfile.ps'; exec('ps2ps2 ' . $pdf . ' ' . $ps); unlink($pdf); exec('ps2pdf ' .$ps . ' ' . $pdf); unlink($ps); </code></pre><p>я использовал это несколько минут назад, чтобы выводить pdftk с 490k до 71k.</p>