Оптимизация PDF Acrobat vs. Ghostscript - PullRequest
4 голосов
/ 18 ноября 2011

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

Когда я открываю файл в Acrobat и запрашиваю ресурсы, он говорит, что шрифты в файле занимают 90% + пространства. Если я сохраню файл как postscript, а затем сохраню файл postscript в оптимизированном PDF, файл будет значительно меньше (более 80% меньше), а шрифты по-прежнему будут внедрены.

Я пытаюсь воссоздать эти результаты с помощью ghostscript. Я пробовал различные варианты опций с pswrite и pdfwrite, но что происходит, когда я делаю первоначальное преобразование из PDF в Postscript, текст преобразуется в изображение. Когда я конвертирую обратно в PDF, ссылки на шрифты исчезают, поэтому я получаю PDF-файл, который содержит текстовый образ, а не фактические шрифты.

Файл содержит 22 встроенных пользовательских шрифта Type1, которые у меня есть. Я добавил шрифты в путь поиска ghostscript и доказал, что ghostscript может найти их с помощью:

gs \
 -I/home/nauc01 
 -sFONTPATH=/home/nauc01/fonts/Type1 \
 -o 3783QP.pdf \
 -sDEVICE=pdfwrite \
 -g5950x8420 \
 -c "200 700 moveto" \
 -c "/3783QP findfont 60 scalefont setfont" \
 -c "(TESTING !!!!!!) show showpage"

Полученный файл имеет правильно встроенный шрифт.

Я также пытался использовать ghostscript для перехода из PDF в PDF, например:

gs \
 -sDEVICE=pdfwrite \
 -sNOPAUSE \
 -I/home/nauc01 \
 -dBATCH \
 -dCompatibilityLevel=1.4 \
 -dPDFSETTINGS=/printer \
 -CompressFonts=true \
 -dSubsetFonts=true \
 -sOutputFile=output.pdf \
  input.pdf

но вывод обычно больше, чем ввод, и я не могу просмотреть файл ни в чем другом, кроме ghostscript (программа чтения Adobe выдает «Метка объекта неправильно отформатирована»).

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

Есть идеи? Заранее спасибо.

Ответы [ 2 ]

2 голосов
/ 18 ноября 2011

Не используйте pswrite.Как вы обнаружили, это будет отображать текст.вместо этого используйте устройство ps2write, которое сохраняет шрифты и текст.

Вы не говорите, какую версию Ghostscript вы используете, но я бы порекомендовал вам использовать последнюю версию.

Одна точка;Ghostscript не «оптимизирует» PDF, как это делает Acrobat, а создает его заново.Исходный PDF полностью интерпретируется для создания последовательности операций, которые отмечают страницу, pdfwrite (и ps2write) затем создает новый файл, в котором есть только эти операции.

Если вы выберете поднабор шрифтов, то тольконеобходимые глифы будут включены.Если исходный PDF-файл содержит постороннюю информацию (например, Adobe Illustrator, как правило, содержит полную копию файла .ai), он будет отброшен.Это может привести к уменьшению размера файла, а может и нет.

Обратите внимание, что в настоящее время pdfwrite не поддерживает сжатую внешнюю ссылку и некоторые другие более поздние функции, поэтому некоторые файлы могут стать больше.

Я бы лично не прошел бы через ps2write, поскольку это просто добавляет еще один уровень обработки и отбрасывания информации.Я бы просто использовал pdfwrite для создания нового файла PDF.Если вы найдете файлы, для которых это не работает (с использованием текущего кода), вы должны подать отчет об ошибке на http://bugs.ghostscript.com, чтобы кто-то мог решить проблему.

0 голосов
/ 18 ноября 2011

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

К сожалению, самая последняя версия Multivalent больше не включает эти инструменты.Google для Multivalent20060102.jar, эта версия все еще включает их.Для запуска Compress:

java -classpath /path/to/Multivalent20060102.jar tool.pdf.Compress [options] <pdf file>
...