Настройка Ghostscript - ошибка преобразования любого jpg в pdf - PullRequest
0 голосов
/ 06 мая 2020

Я пытаюсь использовать Ghostscript v9.52 на машине Windows 10, но получаю пустой pdf и эту ошибку, когда пытаюсь преобразовать любой файл jpg в pdf:

Error: /undefined in Test-JPG.jpg
Operand stack:

Execution stack:
   %interp_exit   .runexec2   --nostringval--   --nostringval--   --nostringval--   2   %stopped_push   --nostringval--   --nostringval--   --nostringval--   false   1   %stopped_push   .runexec2   --nostringval--   --nostringval--   --nostringval--   2   %stopped_push   --nostringval--
Dictionary stack:
   --dict:738/1123(ro)(G)--   --dict:0/20(G)--   --dict:78/200(L)--
Current allocation mode is local
GPL Ghostscript 9.52: Unrecoverable error, exit code 1

Я пробовал следующие команды:

C:\Users\Work\Desktop>gswin64c -sDEVICE=pdfwrite -o myFile.pdf "C:\Program Files\gs\gs9.52\lib\viewjpeg.ps" -c Test-JPG.jpg viewJPEG
C:\Users\Work\Desktop>gswin64c -sDEVICE=pdfwrite -o out.pdf viewjpeg.ps -c "Test-JPG.jpg viewJPEG" -f 
C:\Users\Work\Desktop>gswin64c -dBATCH -dNOPAUSE -q -sDEVICE=pdfwrite -sOutputFile=output.pdf Test-JPG.jpg

То, что я пробовал до сих пор:

  • Пробовал использовать ghostscript для объединения двух файлов PDF - нет проблемы, поэтому Ghostscript в некоторой степени работает.
  • Пробовал разные файлы JPG - все выдает одну и ту же ошибку
  • Пробовал открывать файлы JPG в других Windows программах - проблем нет, поэтому не должно с самими файлами все в порядке.

Ближайший ответ, который я нашел иначе, - этот вопрос , однако ответ есть вторая команда выше, которая не работать на меня. Учитывая, что это происходит со всеми jpgs, которые я пробую, мне интересно, есть ли что-то, что я неправильно настроил при установке ghostscript?

1 Ответ

0 голосов
/ 06 мая 2020

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

Однако PostScript - это язык программирования, и есть вспомогательные программы PostScript, поставляемые с Ghostscript, которые будут читать некоторые форматы изображений.

Ваша первая командная строка запускает viewjpeg, затем ps выполняет переключатель -c, который заставляет командную строку считываться как программа PostScript до следующего -f. «Test-JPG.jpg viewJPEG» недействителен PostScript (в языке PostScript или программе ViewJPEG.ps нет оператора или функции под названием Test-JPG.jpg), поэтому он не работает.

Вторая командная строка, по сути, такая же, только заключена в "", поэтому она тоже не работает. Она также не предоставляет полный путь к viewjpeg.ps, поэтому, вероятно, не удается найти viewjpg.ps.

Ваша третья командная строка даже не использует viewjpeg.ps, поэтому она пытается прочитать содержимое JPEG как PostScript, что, что неудивительно, также не работает.

Если вы читаете viewjpeg.ps, это на самом деле есть пример использования в комментариях:

% Usage example:
%   (jpeg-6/testimg.jpg) viewJPEG

Обратите внимание на () вокруг имени файла, они отсутствуют в ваших командных строках. Если вы сделаете это:

gswin64c -sDEVICE=pdfwrite -o myFile.pdf "C:\Program Files\gs\gs9.52\lib\viewjpeg.ps" -c "(Test-JPG.jpg) viewJPEG" -f

Тогда он , вероятно, будет работать. Если все файлы находятся в нужном месте.

Однако, начиная с версии 9.50, поведение Ghostscript по умолчанию - SAFER, а не NOSAFER. Это означает, что программы PostScript (например, vi ewJPEG.ps) не разрешен доступ к произвольным файлам с диска.

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

Это объясняется в документации здесь прокрутите вниз до БЕЗОПАСНО, чтобы увидеть это.

...