1

Я пытаюсь уменьшить размер файла PDF с помощью GhostScript. Как правило, это работает:

gswin32c -sDEVICE=pdfwrite -sOutputFile=out.pdf in.pdf

Я думаю, что это избавляет от закладок, аннотаций и т.д.

В некоторых PDF-файлах я получаю пустой PDF-файл. Я получаю следующий вывод:

GPL Ghostscript 9.04 (2011-08-05)
Copyright (C) 2011 Artifex Software, Inc.  All rights reserved.
This software comes with NO WARRANTY: see the file PUBLIC for details.
Error: /rangecheck in --run--
Operand stack:
   15   0   15   --nostringval--   15
Execution stack:
   %interp_exit   .runexec2   --nostringval--   --nostringval--   --nostringval-
-   2   %stopped_push   --nostringval--   --nostringval--   --nostringval--   fa
lse   1   %stopped_push   1926   1   3   %oparray_pop   1925   1   3   %oparray_
pop   1909   1   3   %oparray_pop   --nostringval--   --nostringval--   --nostri
ngval--   --nostringval--   --nostringval--   --nostringval--
Dictionary stack:
   --dict:1166/1684(ro)(G)--   --dict:1/20(G)--   --dict:82/200(L)--   --dict:82
/200(L)--   --dict:108/127(ro)(G)--   --dict:291/300(ro)(G)--   --dict:22/30(L)-
-
Current allocation mode is local
GPL Ghostscript 9.04: Unrecoverable error, exit code 1

Сообщение об ошибке не особенно полезно. Любые предложения, как решить эту проблему?

3 ответа3

3

Начните с использования устройства, отличного от pdfwrite. Вы можете запустить Ghostscript без каких-либо аргументов (используйте версию Windows gswin32), а затем перетащить на него свой файл. Откроется окно для отображения результата.

Если это работает, то вы, вероятно, нашли ошибку в pdfwrite. Если этого не произойдет, то это либо ошибка Ghostscript, либо ваш PDF-файл недействителен. Тот факт, что Acrobat открывает его, не перестает быть недействительным, Acorbat открывает много испорченных PDF-файлов ....

Сообщение об ошибке полезно для тех , кто говорит PostScript ;-) Для тех , кто нет, это означает , что «что - то пошло не так», но если вы не понимаете , что это PostScript о самой полезной ошибки вы можете ожидать. В этом случае это говорит вам, что операнд был вне допустимого диапазона для оператора.

Вы можете попробовать запустить с -dPDFDEBUG который скажет вам, какой объект в файле PDF вызвал проблему. Но если вы не очень хорошо знаете PDF, это, вероятно, вам тоже не поможет.

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

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

0

Кроме того, что упомянул KenS, имейте в виду, что аннотации XFA (формы PDF, созданные с помощью Adobe LifeCycle) не поддерживаются в Ghostscript, поэтому файл, содержащий только эти элементы, вероятно, приведет к пустому файлу при обработке gswin32c.

0

Используйте:

gswin64c -dQUIET -dBATCH -dNOPAUSE -dSAFER -dMaxSubsetPct = 100 -dPDFSETTINGS =/ebook -sDEVICE = pdfwrite -sOutputFile = outputfile.pdf inputfile.pdf

Вы можете заменить экран или принтер для электронной книги выше - это меняет разрешение изображений (72/150/300 точек на дюйм)

Удачи ;-)

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .