Это не обязательно должен быть CMD, но я бы предпочел его. При этом он должен быть бесплатным.
Я пробовал много разных, но все они, похоже, оптимизируют некоторые битовые данные в PDF-файлах и даже не касаются сжатия изображений, что мне и нужно, поскольку это основной виновник размера в моих PDF-файлах, созданных из Документов Google.
Я не уверен, что именно вы имеете в виду под «оптимизатором сжатия»:
Вы можете оставить каждый отдельный объект PDF, который может иметь отношение к визуализируемым страницам, «как есть» и просто применить максимально возможное сжатие без потерь к потокам объектов, которые еще не сжаты или сжаты/закодированы с не-сжатием. настолько эффективный метод сжатия.
Вы можете принять, помимо параметров, перечисленных в «1.», некоторые другие изменения в файле PDF:
В этом может помочь достаточно сложная длинная командная строка Ghostscript. Он выполнит преобразование PDF в PDF:
gs \
-o smaller-downsampled+gray.pdf \
-sDEVICE=pdfwrite \
-dCompressPages=true \
-dCompressFonts=true \
-dDownsampleColorImages=true \
-dDownsampleGrayImages=true \
-dDownsampleMonoImages=true \
-dColorImageResolution=72 \
-dGrayImageResolution=72 \
-dMonoImageResolution=72 \
-dColorImageDownsampleThreshold=1.0 \
-dGrayImageDownsampleThreshold=1.0 \
-dMonoImageDownsampleThreshold=1.0 \
-dProcessColorModel=/DeviceGray \
-dColorConversionStrategy=/Gray \
-dColorConversionStrategyForImages=/Gray \
-dCompatibilityLevel=1.4 \
-dEmbedAllFonts=false \
-c ".setpdfwrite <</AlwaysEmbed [ ] /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] /ColorImageFilter /DCTEncode /GrayImageFilter /DCTEncode /MonoImageFilter /CCITTFaxEncode /OutputICCProfile (None)>> setdistillerparams" \
-f big.pdf
(Для Windows измените gs
на gswin32c.exe
или gswin64c.exe
и измените все маркеры продолжения строки \
на ^
...) Приведенная выше команда изменит следующее:
/DCTEncode
).В моей первоначальной команде примера была опечатка. Он содержал эти строки, которые неверны :
-sProcessColorModel=/DeviceGray \ -sColorConversionStrategy=/Gray \ -sColorConversionStrategyForImages=/Gray \
Есть два разных способа правильно выразить эти параметры :
Использование -d
для этих параметров. /
В этом случае для значений параметровдолжна быть косая черта
-dProcessColorModel=/DeviceGray \
-dColorConversionStrategy=/Gray \
-dColorConversionStrategyForImages=/Gray \
Использование -s
для этих параметров. В этом случае косая черта/
для значений параметров должна быть пропущена:
-sProcessColorModel=DeviceGray \
-sColorConversionStrategy=Gray \
-sColorConversionStrategyForImages=Gray \
(Однако нет общего правила, которое можно было бы вывести из этого примера для всех параметров Ghostscript, оно применяется только к определенному подмножеству параметров, где -s...
или -d...
может использоваться альтернативно таким образом.)
Так что я понял это совершенно неправильно. Извините за путаницу, которую это вызвало!
В любом случае, модифицированная команда теперь работает для связанных ОП big.pdf
. Это сбивает
Данные для исходного изображения внутри big.pdf
:
$ pdfimages -list big.pdf
page num type width height color comp bpc enc interp objID x-ppi y-ppi size ratio
-----------------------------------------------------------------------------------
1 0 image 1600 1071 rgb 3 8 image no 7 0 142 142 2502K 50%
Данные для нового изображения внутри smaller-downsampled+gray.pdf
:
$ pdfimages -list smaller-downsampled+gray.pdf
page num type width height color comp bpc enc interp objID x-ppi y-ppi size ratio
-----------------------------------------------------------------------------------
1 0 image 800 535 gray 1 8 jpeg no 12 0 71 71 48.5K 12%
^
. И, возможно, удалите пробелы в начале строк. (Я думал, что кто-то, явно запрашивающий инструмент командной строки, знает это.)/
- я говорил о замене \ в качестве маркеров продолжения строки! Я также НЕ рекламировал удаление пробелов в конце строк перед (новыми) ^
знаками (должен оставаться хотя бы 1 пробел!).gswin64.exe
для Windows, но я рекомендовалgswin64c.exe
(обратите внимание наc
перед.exe
?!?)
Франк Дернонкур
Мэнни Калавера