Перекодировать только изображения 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
:
... но поскольку таблица внешних ссылок повреждена, я исправляю ее:
$ 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