Перекодировать только изображения PDF? (или ghostscript не работает на 8-битном RGB при оптимизации)

Мне нужно оптимизировать количество больших PDF-документов для размера файла, поэтому я попытался использоватьghostscriptвызывается так:

gs -sDEVICE=pdfwrite -dCompatibilityLevel=1.4 -dPDFSETTINGS=/screen -dNOPAUSE -dBATCH -sOutputFile=output-my-doc.pdf input-my-doc.pdf

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

Я обновил доgs версия 9.02, и я испытываю то же самое. Разобрав документ на отдельные страницы и выполнив команду выше на каждой странице, я смог подтвердить, какие страницы являются проблемными; на самом деле ошибка возникает, даже если я звоню простоgs input-my-doc-pageX.pdf - это запускает зрителя, и я мог видеть набор текста до тех пор, пока он не пришел к изображению, когда он упал.

Так что я могу подтвердить, что в моем случае,gs падает на определенных изображениях - и, наконец, я также могу предоставить минимальный рабочий (или, скорее, нерабочий) пример, который демонстрирует проблему (ниже). В частности, проблема заключается в 8-битных RGB-изображениях, определенных определенным образом.

& # XA0;

Теперь я не могу сказать, является ли это ошибкой, но так как мне нужно это сделать - я подумал, что, возможно, я мог бы "обмануть"ghostscriptпутем запуска PDF-файлов через приложение, которое в значительной степени оставит PDF-файлы нетронутыми, за исключением того, что перекодирует изображения в один формат (скажем, PNG); таким образомgs Оптимизатор может работать и над этими файлами без сбоев.

Какие варианты у меня есть, чтобы перекодировать только изображения данного PDF с помощью командной строки в Linux?

Большое спасибо заранее за любые ответы,
Ура!

& # XA0;

PS: тестовый случай в основномпример исходного кода в формате PDF в посте:Imagemagick: генерировать необработанные данные изображения для встраивания PDF-файлов?.

Это PDF (hello2.pdf) просто прекрасно открывается, скажем,evince:

hello2.pdf-evince-OK

... но поскольку таблица внешних ссылок повреждена, я исправляю ее:

$ pdftk hello2.pdf output hello2O.pdf
$ qpdf --check hello2O.pdf 
checking hello2O.pdf
PDF Version: 1.4
File is not encrypted
File is not linearized
No errors found

Восстановленный файлhello2O.pdf также открывается нормально вevince - однако, когда я пытаюсь запустить вышеgs Оптимизируя команду, она не работает:

$ gs -sDEVICE=pdfwrite -dCompatibilityLevel=1.4 -dPDFSETTINGS=/screen -dNOPAUSE -dBATCH -sOutputFile=optihello2O.pdf hello2O.pdf
GPL Ghostscript 9.02 (2011-03-30)
Copyright (C) 2010 Artifex Software, Inc.  All rights reserved.
This software comes with NO WARRANTY: see the file PUBLIC for details.
Processing pages 1 through 1.
Page 1
Loading NimbusSanL-Regu font from /usr/share/ghostscript/9.02/Resource/Font/NimbusSanL-Regu... 2756020 1410650 1869284 568021 3 done.
Error: /undefined in --run--
Operand stack:
   --dict:6/15(L)--   false   --dict:11/19(L)--   --dict:4/4(L)--   --nostringval--   FlateDecode   --dict:4/4(L)--   0
Execution stack:
   %interp_exit   .runexec2   --nostringval--   --nostringval--   --nostringval--   2   %stopped_push   --nostringval--   --nostringval--   --nostringval--   false   1   %stopped_push   1910   1   3   %oparray_pop   1909   1   3   %oparray_pop   1893   1   3   %oparray_pop   --nostringval--   --nostringval--   2   1   1   --nostringval--   %for_pos_int_continue   --nostringval--   --nostringval--   --nostringval--   --nostringval--   %array_continue   --nostringval--   false   1   %stopped_push   --nostringval--   %loop_continue   --nostringval--   576   --nostringval--   --nostringval--   --nostringval--   --nostringval--   --nostringval--   --nostringval--   %array_continue   --nostringval--   --nostringval--
Dictionary stack:
   --dict:1160/1684(ro)(G)--   --dict:1/20(G)--   --dict:82/200(L)--   --dict:82/200(L)--   --dict:108/127(ro)(G)--   --dict:295/300(ro)(G)--   --dict:23/30(L)--   --dict:6/8(L)--   --dict:25/40(L)--   --dict:7/17(L)--
Current allocation mode is local
GPL Ghostscript 9.02: Unrecoverable error, exit code 1

Ответы на вопрос(1)

Ваш ответ на вопрос