Ghostscript для объединения PDF-файлов сжимает результат
Я нашел эту аккуратную команду для объединения нескольких PDF в один, используя Ghostscript:
gs -dBATCH -dNOPAUSE -q -sDEVICE=pdfwrite -sOutputFile=out.pdf in1.pdf in2.pdf
результирующий размер меньше, чем объединенный размер 2 PDF-файлов.
выполнение команды с одним файлом в качестве входных данных по-прежнему приводит к выходному файлу меньшего размера.
есть ли опция на Ghostscript, чтобы просто скопировать страницы, как они появляются при слиянии без какого-либо сжатия?
если нет, возможно ли, что сжатие Ghostscript настолько хорошо, что это приведет к абсолютно никакой потере качества?
2 ответов:
вот дополнительные опции что вы можете пройти при использовании
pdfwriteкак устройства. Согласно этой странице, если вы ничего не передаете, то-dPDFSETTINGSна что-то близкое к/screen, хотя это не становится более определенным. Вы можете попробовать установить его в-dPDFSETTINGS=/prepress, который должен сжимать только вещи выше 300 dpi.gs -dBATCH -dNOPAUSE -q -sDEVICE=pdfwrite -dPDFSETTINGS=/prepress -sOutputFile=out.pdf in1.pdf in2.pdfДругой альтернативой является pdftk:
pdftk in1.pdf in2.pdf cat output out.pdf
некоторые из оптимизаций размера, которые вы наблюдали, могут быть связаны с очисткой Ghostscript от неиспользуемых объектов, его недавно приобретенными улучшениями оптимизации шрифтов (вы используете очень последнюю версию GS?!?) и, возможно, повторная/пониженная выборка изображений, которая могла произойти.
Ghostscript, если используется для PDF - > PDF преобразования, в основном работает так:
- читать во входном файле(ах) со всеми его объектами и конвертировать их в свой внутренний формат для графических представлений страниц.
- выполнить манипуляции просил в командной строке содержимое страницы во внутреннем формате.
- написать совершенно новый PDF.
это означает, что для большинства PDF - > PDF операции у вас будет другой порядок и нумерация для объектов PDF, и даже внутренний код объекта может измениться (даже если ваши глаза не обнаруживают никаких различий между входным и выходным PDF).
по умолчанию Ghostscript также будет сжимать любые потоки объектов, которые были несжаты в исходном файле (но это сжатие без потерь).
теперь для вашей очень упрощенной командной строки который не содержит никаких пожеланий по манипуляциям, Ghostscript предполагает вы хотите использовать
-dPDFSETTINGS=/default, задает этот параметр неявно и работает соответственно.теперь что это
/defaultPDFSETTINGS?! У вас есть два варианта узнать:
читать инструкцию. Большой стол в середине этого раздела обзор. Вы можете видеть, что это один
-dPDFSETTINGS=/defaultсам по себе является просто стенографией для нескольких десятков других более конкретных настроек, которые он представляет. Ссылка на приведенную документацию предназначена для текущего руководителя кода разработки и ваша фактически используемая версия может быть разные конечно.запросите (свой собственный) Ghostscript для подробного значения этого параметра. мои ответы на вопрос ' запрос Ghostscript для параметров/настроек устройства вывода по умолчанию...- и вопрос ' что такое словари PostScript и как к ним можно получить доступ (через Ghostscript)?- уточните немного больше об этом. Короче говоря, чтобы запросить Ghostscript для подробности его
/defaultPDFSETTINGS, выполните следующую команду:gs \ -q \ -dNODISPLAY \ -c ".distillersettings /default get {exch ==only ( ) print ===} forall quit"вы должны получить результат, очень похожий на этот:
/Optimize false /DoThumbnails false /PreserveEPSInfo true /ColorConversionStrategy /LeaveColorUnchanged /DownsampleMonoImages false /EmbedAllFonts true /CannotEmbedFontPolicy /Warning /PreserveOPIComments true /GrayACSImageDict << /HSamples [2 1 1 2] /VSamples [2 1 1 2] /QFactor 0.9 /Blend 1 >> /DownsampleColorImages false /PreserveOverprintSettings true /CreateJobTicket false /AutoRotatePages /PageByPage /NeverEmbed [/Courier /Courier-Bold /Courier-Oblique /Courier-BoldOblique /Helvetica /Helvetica-Bold /Helvetica-Oblique /Helvetica-BoldOblique /Times-Roman /Times-Bold /Times-Italic /Times-BoldItalic /Symbol /ZapfDingbats] /ColorACSImageDict << /HSamples [2 1 1 2] /VSamples [2 1 1 2] /QFactor 0.9 /Blend 1 >> /DownsampleGrayImages false /UCRandBGInfo /Preserveединственный момент, который выделяется из них: вы можете изменить
/AutoRotagePagesС/PageByPageдо/None. В командной строке вы бы поставили его как-dAutoRotatePages=/None.чтобы дать вам полный список параметров, которые конкретно скажут Ghostscript использовать как можно больше passthrough режим, как это возможно в введите PDF, добавив следующие параметры:
-dAntiAliasColorImage=false \ -dAntiAliasGrayImage=false \ -dAntiAliasMonoImage=false \ -dAutoFilterColorImages=false \ -dAutoFilterGrayImages=false \ -dDownsampleColorImages=false \ -dDownsampleGrayImages=false \ -dDownsampleMonoImages=false \ -dColorConversionStrategy=/LeaveColorUnchanged \ -dConvertCMYKImagesToRGB=false \ -dConvertImagesToIndexed=false \ -dUCRandBGInfo=/Preserve \ -dPreserveHalftoneInfo=true \ -dPreserveOPIComments=true \ -dPreserveOverprintSettings=true \таким образом, вы можете попробовать эту команду:
gs \ -o output.pdf \ -sDEVICE=pdfwrite \ -dAntiAliasColorImage=false \ -dAntiAliasGrayImage=false \ -dAntiAliasMonoImage=false \ -dAutoFilterColorImages=false \ -dAutoFilterGrayImages=false \ -dDownsampleColorImages=false \ -dDownsampleGrayImages=false \ -dDownsampleMonoImages=false \ -dColorConversionStrategy=/LeaveColorUnchanged \ -dConvertCMYKImagesToRGB=false \ -dConvertImagesToIndexed=false \ -dUCRandBGInfo=/Preserve \ -dPreserveHalftoneInfo=true \ -dPreserveOPIComments=true \ -dPreserveOverprintSettings=true \ input1.pdf \ input2.pdfнаконец-то, как уже намекал Крис Хаас: вы также можете использовать
pdftkесли вы специально не хочу никаких оптимизаций этот Ghostscript применяется по умолчанию.pdftkпросто не в состоянии делать такие вещи, и вы получите совсем немного скорости для его относительной тупости работы (но, вероятно, и гораздо больше размер файла выводится чем из Ghostscript).
Comments