Ghostscript — профессиональный программный интерпретатор языка PostScript и файлов PDF, предназначенный для рендеринга, конвертации, печати и автоматизированной обработки документов. Программа работает не как традиционный PDF-редактор с панелями, вкладками и визуальными инструментами, а как движок, получающий входной файл, выполняющий содержащиеся в нём графические инструкции и передающий результат выбранному устройству вывода.

Основным интерфейсом Ghostscript является командная строка. Пользователь указывает исходный документ, выбирает устройство вывода, задаёт разрешение, цветовую модель, диапазон страниц, параметры сжатия и имя создаваемого файла. Такой подход требует внимательного изучения синтаксиса, но предоставляет значительно больше возможностей для пакетной обработки, чем большинство графических приложений.

Скачать Ghostscript

Оценка 9.7 Рекомендуем
  • Редактирование PDF
  • Русский интерфейс
  • Просто новичкам
Скачать бесплатно на Windows
Лучшая альтернатива
Ghostscript
Оценка 8.5
  • Сложнее новичкам
  • Может требовать настройки
  • Интерфейс не для всех
Скачать Ghostscript
Загрузка начнётся после нажатия

Ghostscript применяют для решения конкретных задач:

  • преобразования PostScript и EPS в PDF;

  • повторной сборки и уменьшения размера PDF;

  • растеризации страниц в PNG, JPEG или TIFF;

  • подготовки документов к печати;

  • изменения цветовой модели;

  • формирования PDF/A и PDF/X;

  • создания изображений с заданным разрешением;

  • обработки отдельных страниц и диапазонов;

  • извлечения текста;

  • создания PDF с распознанным текстовым слоем;

  • проверки структуры и ресурсов документа;

  • автоматической обработки сотен или тысяч файлов;

  • интеграции PDF-преобразования в серверные приложения.

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

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

Как работает Ghostscript

PostScript представляет собой язык описания страниц. Такой файл содержит не готовую сетку пикселей, а последовательность команд: установить шрифт, нарисовать линию, заполнить контур, вывести текст, применить преобразование координат, вставить изображение и сформировать страницу.

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

После этого подключается устройство вывода — device. Оно определяет, во что будет преобразована обработанная страница:

Устройство Результат
pdfwrite новый PDF
ps2write PostScript
eps2write EPS
xpswrite XPS
txtwrite текстовый файл
png16m полноцветный PNG
pnggray PNG в оттенках серого
png16malpha PNG с альфа-каналом
jpeg цветной JPEG
jpeggray JPEG в оттенках серого
tiff24nc 24-битный RGB TIFF
tiffgray 8-битный серый TIFF
tiffg4 монохромный TIFF с Group 4
tiffsep цветоделённый TIFF
display вывод страницы на экран
mswinpr2 печать через Windows

Устройство выбирается параметром:

-sDEVICE=имя_устройства

Например:

gswin64c -sDEVICE=png16m -o page.png document.pdf

В этой команде Ghostscript читает document.pdf, интерпретирует содержимое его страниц, передаёт изображение устройству png16m и записывает результат в page.png.

Выбор устройства определяет не только расширение выходного файла, но и доступные параметры. Для JPEG можно задавать качество, для PNG — глубину цвета и прозрачность, для TIFF — способ компрессии, а для pdfwrite — совместимость PDF, обработку изображений, шрифтов, метаданных и цветовых пространств.

Установка Ghostscript в Windows

Установщик Ghostscript использует последовательный мастер. После запуска появляется приветственное окно Welcome to the GPL Ghostscript Setup Wizard. Для перехода дальше предназначена кнопка Next >.

На экране License Agreement отображается текст лицензии. Продолжение установки становится возможным после нажатия I Agree.

Следующее окно называется Choose Install Location. В нём находятся:

  • поле Destination Folder;

  • кнопка Browse... для выбора другого каталога;

  • кнопка < Back;

  • кнопка Install;

  • кнопка Cancel;

  • сведения о требуемом и доступном месте на диске.

Менять стандартный путь без необходимости не требуется. Главное — запомнить каталог bin, поскольку в нём находятся исполняемые файлы Ghostscript.

После нажатия Install мастер распаковывает исполняемые файлы, библиотеки, ресурсы, примеры и служебные сценарии. На экране установки отображается индикатор выполнения и кнопка Show details, открывающая список обрабатываемых файлов.

Завершается установка окном Completing the GPL Ghostscript Setup Wizard. Для закрытия мастера используется кнопка Finish.

В установленном каталоге находятся несколько важных папок:

Каталог Назначение
bin исполняемые файлы и динамические библиотеки
lib сценарии, служебные PostScript-файлы и настройки
Resource шрифтовые, цветовые и другие ресурсы
examples демонстрационные файлы
doc локальная документация, если она включена в сборку

Для обычной работы в 64-разрядной Windows используются следующие файлы:

  • gswin64c.exe — консольный вариант Ghostscript;

  • gswin64.exe — оконный вариант интерпретатора;

  • gsdll64.dll — динамическая библиотека для интеграции движка в другие приложения.

Буква c в имени gswin64c.exe означает console. Именно этот файл удобнее запускать из Command Prompt, PowerShell, Windows Terminal, пакетных файлов и программных сценариев.

gswin64.exe открывает собственное окно Ghostscript. Он подходит для интерактивного запуска, но хуже интегрируется с автоматизированными сценариями. Консольный вариант проще перенаправляет сообщения, возвращает код завершения и корректно работает в конвейерах.

Добавление Ghostscript в PATH

Без настройки PATH Ghostscript можно запускать полным путём:

"C:\Program Files\gs\папка_установки\bin\gswin64c.exe" -h

Для постоянной работы удобнее добавить каталог bin в системную или пользовательскую переменную Path.

В Windows необходимо открыть окно редактирования переменных среды, выбрать Path, нажать Edit, затем New и добавить путь к каталогу bin.

Добавляется именно каталог:

C:\Program Files\gs\папка_установки\bin

Не следует добавлять полный путь с именем gswin64c.exe. Переменная Path должна содержать папку, внутри которой система будет искать исполняемые файлы.

После сохранения изменений уже открытые окна PowerShell и Command Prompt лучше закрыть. Новый процесс командной оболочки получит обновлённое значение Path.

Проверка выполняется командой:

gswin64c -h

При правильной настройке Ghostscript выводит:

  • сведения о программе;

  • шаблон командной строки;

  • основные параметры;

  • поддерживаемые входные форматы;

  • устройство вывода по умолчанию;

  • список встроенных устройств;

  • пути поиска ресурсов.

Если появляется сообщение:

'gswin64c' is not recognized as an internal or external command

нужно проверить, что в Path добавлен каталог bin, путь не содержит опечатки, а командная оболочка была перезапущена.

Можно проверить обнаружение файла средствами Windows:

where.exe gswin64c

PowerShell также поддерживает:

Get-Command gswin64c

Обе команды должны вывести путь к установленному gswin64c.exe.

Интерфейс Ghostscript

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

Рабочей областью является терминал. Команда состоит из четырёх основных частей:

исполняемый_файл параметры устройство_вывода входной_файл

Типичная команда выглядит так:

gswin64c -dSAFER -dBATCH -dNOPAUSE -sDEVICE=pdfwrite -sOutputFile=result.pdf source.pdf

После запуска Ghostscript выводит название программы, сведения о лицензии и сообщения об обработке страниц. При работе с многостраничным документом в консоли обычно появляются строки вида:

Processing pages 1 through 12.
Page 1
Page 2
Page 3

Оконный вариант gswin64.exe отображает похожую информацию в собственном окне.

На скриншоте видны основные элементы справки:

  • строка Usage;

  • переключатель -dNOPAUSE;

  • параметр -g<width>x<height>;

  • параметр разрешения -r<res>;

  • выбор устройства через -sDEVICE=<devname>;

  • выбор выходного файла через -sOutputFile=<file>;

  • параметр -dBATCH;

  • список Available devices;

  • блок Search path.

В интерактивном режиме Ghostscript показывает приглашение:

GS>

В нём можно выполнять команды языка PostScript. Для завершения работы вводится:

quit

Интерактивный режим полезен для диагностики и экспериментов, но для конвертации документов лучше сразу передавать -dBATCH, -dNOPAUSE или сокращённый параметр -o.

Синтаксис командной строки

Ghostscript различает несколько типов параметров.

Параметры -d

Ключи с префиксом -d передают логические, числовые или PostScript-значения.

Пример логического параметра:

-dBATCH

Он эквивалентен включению значения true.

Явная форма выглядит так:

-dBATCH=true

Числовой параметр:

-dJPEGQ=90

PostScript-имя:

-dColorImageDownsampleType=/Bicubic

Символ / перед Bicubic важен: он указывает, что значение является именем PostScript, а не строкой.

Параметры -s

Префикс -s передаёт строку:

-sDEVICE=pdfwrite
-sOutputFile=result.pdf
-sColorConversionStrategy=RGB

Параметр -r

Разрешение задаётся в точках или пикселях на дюйм:

-r300

Для разных горизонтального и вертикального разрешений используется:

-r600x300

Параметр -o

Короткая запись:

-o result.pdf

заменяет:

-dBATCH -dNOPAUSE -sOutputFile=result.pdf

Поэтому команда:

gswin64c -sDEVICE=pdfwrite -o result.pdf source.ps

полностью пригодна для неинтерактивной конвертации.

Параметр -q

Ключ:

-q

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

Параметры -c и -f

-c сообщает Ghostscript, что следующие аргументы следует интерпретировать как PostScript-код:

-c "<</PageSize [595 842]>> setpagedevice"

-f завершает последовательность кода и возвращает программу к обработке файлов:

-f input.pdf

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

Кавычки в путях

Любой путь с пробелами заключается в кавычки:

gswin64c -sDEVICE=pdfwrite `
  -o "D:\Готовые документы\result.pdf" `
  "D:\Исходные документы\source.pdf"

В PowerShell символ обратного апострофа позволяет переносить команду на следующую строку. В Command Prompt для этого используется ^, а в Bash — обратная косая черта \.

Положение параметров

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

Корректный шаблон:

gswin64c `
  -dSAFER `
  -dBATCH `
  -dNOPAUSE `
  -sDEVICE=устройство `
  -sOutputFile="выходной_файл" `
  "входной_файл"

Ghostscript распознаёт PostScript, EPS и PDF автоматически. Указывать тип входного формата отдельным параметром не требуется.

Проверка установки и доступных возможностей

Главная диагностическая команда:

gswin64c -h

Она показывает устройства, включённые именно в установленную сборку. Это важно, поскольку набор дополнительных устройств может отличаться.

Наличие конкретного устройства можно проверить поиском по выводу:

gswin64c -h | Select-String "pdfwrite"

Для OCR-устройств:

gswin64c -h | Select-String "ocr|pdfocr"

Для PNG:

gswin64c -h | Select-String "png16m|pnggray|png16malpha"

Версия исполняемого файла проверяется так:

gswin64c -version

Для поиска ресурсов полезен вывод Search path. В нём перечисляются каталоги, где Ghostscript ищет:

  • файлы инициализации;

  • PostScript-сценарии;

  • таблицы шрифтов;

  • ICC-профили;

  • дополнительные ресурсы.

Если команда запускается, но не обнаруживает шрифт или служебный .ps-файл, проблема часто связана не с самим документом, а с неверным путём поиска.

Скриншот Ghostscript: gs inst 02

Просмотр PDF и PostScript

Ghostscript может вывести документ через устройство display.

В Windows:

gswin64c -sDEVICE=display "document.pdf"

Можно использовать более короткий вариант:

gswin64c "document.pdf"

Если устройство отображения выбрано по умолчанию, появится окно с визуализированной страницей. После каждой страницы Ghostscript ожидает нажатия Enter в консоли.

Для завершения после последней страницы можно указать:

gswin64c -dBATCH "document.pdf"

Параметр -dNOPAUSE отключает ожидание между страницами:

gswin64c -dBATCH -dNOPAUSE "document.pdf"

Такой просмотр нельзя считать полноценной заменой SumatraPDF, Adobe Acrobat Reader или другому графическому просмотрщику. Ghostscript не предоставляет удобной навигации по закладкам, поиска, комментариев, масштабирования с панели инструментов и управления вложениями.

Режим отображения нужен преимущественно для:

  • проверки рендеринга;

  • сравнения результата преобразования;

  • диагностики PostScript;

  • просмотра EPS;

  • тестирования шрифтов и цветов;

  • контроля того, что документ вообще интерпретируется.

Получение сведений о PDF

Для анализа PDF используется параметр:

-dPDFINFO

Пример:

gswin64c -q -dPDFINFO -dBATCH "document.pdf"

Ghostscript выводит сведения о страницах, шрифтах, изображениях, цветовых пространствах и других ресурсах. Анализ выполняется глубже простого просмотра объектов верхнего уровня: программа проходит формы, шаблоны, изображения, шрифты Type 3 и вложенные ресурсы.

Вывод удобно сохранить в текстовый файл:

gswin64c -q -dPDFINFO -dBATCH "document.pdf" 2> "pdf-report.txt"

В PowerShell можно перенаправить оба потока:

gswin64c -q -dPDFINFO -dBATCH "document.pdf" *> "pdf-report.txt"

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

Преобразование PostScript в PDF

Одна из основных задач Ghostscript — конвертация PostScript в PDF.

Самая короткая команда:

ps2pdf "source.ps" "result.pdf"

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

Прямой вызов выглядит так:

gswin64c `
  -dSAFER `
  -dBATCH `
  -dNOPAUSE `
  -sDEVICE=pdfwrite `
  -sOutputFile="result.pdf" `
  "source.ps"

Вариант с -o короче:

gswin64c -dSAFER -sDEVICE=pdfwrite -o "result.pdf" "source.ps"

Прямой вызов удобнее, когда требуется дополнительно управлять:

  • версией совместимости PDF;

  • форматом страницы;

  • поворотом;

  • цветовой моделью;

  • встраиванием шрифтов;

  • обработкой изображений;

  • метаданными;

  • параметрами PDF/A или PDF/X.

Совместимость задаётся так:

-dCompatibilityLevel=1.7

Полная команда:

gswin64c `
  -dSAFER `
  -sDEVICE=pdfwrite `
  -dCompatibilityLevel=1.7 `
  -o "result.pdf" `
  "source.ps"

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

Преобразование EPS в PDF

EPS предназначен для размещения одной иллюстрации внутри другого документа. Размер содержимого задаётся через BoundingBox.

Простейшая команда:

gswin64c -dSAFER -sDEVICE=pdfwrite -o "image.pdf" "image.eps"

Для использования фактической рамки EPS применяется:

-dEPSCrop

Пример:

gswin64c `
  -dSAFER `
  -dEPSCrop `
  -sDEVICE=pdfwrite `
  -o "image.pdf" `
  "image.eps"

Без -dEPSCrop результат может получить размер страницы по умолчанию, а сама иллюстрация окажется окружена большим пустым полем.

Если EPS содержит некорректный %%BoundingBox, Ghostscript может:

  • обрезать часть изображения;

  • создать слишком большую страницу;

  • вывести ошибку;

  • сместить содержимое.

Для диагностики рамки применяется устройство bbox:

gswin64c -dSAFER -dBATCH -dNOPAUSE -sDEVICE=bbox "image.eps"

В консоли появятся строки:

%%BoundingBox: ...
%%HiResBoundingBox: ...

HiResBoundingBox содержит более точные дробные координаты.

Повторное создание и сжатие PDF

Для сжатия Ghostscript используется устройство pdfwrite:

gswin64c `
  -dSAFER `
  -dBATCH `
  -dNOPAUSE `
  -sDEVICE=pdfwrite `
  -sOutputFile="compressed.pdf" `
  "source.pdf"

Даже без дополнительных параметров Ghostscript создаёт новый PDF. Он интерпретирует страницы исходного документа и заново формирует объекты выходного файла.

Это принципиальное отличие от архиватора или структурного оптимизатора. Результат может получить:

  • другую нумерацию объектов;

  • другую таблицу перекрёстных ссылок;

  • объединённые или разделённые ресурсы;

  • изменённые потоки содержимого;

  • заново встроенные шрифты;

  • перекодированные изображения;

  • другой набор метаданных.

Поэтому обработка через pdfwrite не гарантирует побайтового или структурного сохранения исходного PDF. Внешний вид обычно сохраняется, но внутреннее устройство меняется.

Предустановки PDFSETTINGS

Ghostscript поддерживает несколько профилей:

Профиль Типичное назначение
/screen минимальный размер для просмотра на экране
/ebook умеренное сжатие для электронного распространения
/printer печать с достаточно высоким качеством
/prepress допечатная подготовка и повышенное качество
/default стандартное поведение pdfwrite

Пример с /ebook:

gswin64c `
  -dSAFER `
  -dBATCH `
  -dNOPAUSE `
  -sDEVICE=pdfwrite `
  -dPDFSETTINGS=/ebook `
  -sOutputFile="compressed.pdf" `
  "source.pdf"

Профиль /screen обеспечивает наиболее агрессивное уменьшение:

gswin64c `
  -dSAFER `
  -sDEVICE=pdfwrite `
  -dPDFSETTINGS=/screen `
  -o "small.pdf" `
  "source.pdf"

Использовать /screen для всех документов не следует. Мелкий текст на отсканированных страницах, схемы, штрихкоды и тонкие линии могут заметно потерять качество.

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

Управление изображениями вручную

Предустановки удобны для быстрого результата, но более предсказуемое сжатие получается при явной настройке изображений:

gswin64c `
  -dSAFER `
  -dBATCH `
  -dNOPAUSE `
  -sDEVICE=pdfwrite `
  -dCompatibilityLevel=1.7 `
  -dDownsampleColorImages=true `
  -dColorImageDownsampleType=/Bicubic `
  -dColorImageResolution=150 `
  -dDownsampleGrayImages=true `
  -dGrayImageDownsampleType=/Bicubic `
  -dGrayImageResolution=150 `
  -dDownsampleMonoImages=true `
  -dMonoImageDownsampleType=/Subsample `
  -dMonoImageResolution=300 `
  -sOutputFile="compressed.pdf" `
  "source.pdf"

В этой команде:

  • цветные изображения уменьшаются до 150 dpi;

  • изображения в оттенках серого уменьшаются до 150 dpi;

  • монохромные изображения сохраняют 300 dpi;

  • для цветных и серых изображений используется бикубическое масштабирование;

  • для монохромных применяется более простой Subsample.

Для документов, которые будут увеличиваться или печататься, значения можно поднять:

-dColorImageResolution=220
-dGrayImageResolution=220
-dMonoImageResolution=600

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

Почему PDF может стать больше

Ghostscript не гарантирует уменьшение каждого файла. Размер может увеличиться, если:

  • исходный PDF уже хорошо оптимизирован;

  • изображения были закодированы эффективнее;

  • программа встроила отсутствовавшие шрифты;

  • сложные объекты были преобразованы в менее компактную форму;

  • маленькие повторно используемые элементы перестали ссылаться на общий ресурс;

  • изменилось цветовое пространство изображений;

  • применён профиль, ориентированный на качество;

  • исходный файл состоял из компактных векторных данных.

Нельзя оценивать результат только по размеру. После преобразования нужно проверить:

  • внешний вид;

  • поиск и копирование текста;

  • гиперссылки;

  • формы;

  • комментарии;

  • закладки;

  • вложения;

  • прозрачность;

  • цветопередачу;

  • цифровые подписи.

Цифровая подпись после пересоздания документа становится недействительной, поскольку содержимое PDF изменяется. Интерактивные и немаркирующие элементы также могут сохраниться не полностью.

Преобразование PDF в PNG

Для обычного цветного PNG используется png16m:

gswin64c `
  -dSAFER `
  -dBATCH `
  -dNOPAUSE `
  -sDEVICE=png16m `
  -r300 `
  -sOutputFile="page-%03d.png" `
  "document.pdf"

Шаблон %03d создаёт имена:

page-001.png
page-002.png
page-003.png

Число 3 задаёт минимальную ширину номера, а 0 включает заполнение нулями.

Для оттенков серого используется:

gswin64c `
  -dSAFER `
  -sDEVICE=pnggray `
  -r300 `
  -o "page-%03d.png" `
  "document.pdf"

Основные PNG-устройства:

Устройство Формат
png16m 24-битный RGB
pnggray 8-битный серый
pngmono однобитный чёрно-белый
png256 индексированная палитра
png16malpha 32-битный RGBA

Для прозрачного фона:

gswin64c `
  -dSAFER `
  -sDEVICE=png16malpha `
  -r300 `
  -o "page-%03d.png" `
  "document.pdf"

Прозрачный фон появляется только там, где страница действительно не была залита фоновым цветом. Если PDF сам рисует белый прямоугольник размером со страницу, этот прямоугольник останется непрозрачным.

Выбор разрешения

Разрешение Применение
72–96 dpi миниатюры и быстрый предпросмотр
120–150 dpi веб-публикация и экранное чтение
200 dpi OCR и документы среднего качества
300 dpi печать и качественное распознавание
600 dpi мелкий текст, чертежи, монохромные оригиналы

Удвоение разрешения по каждой оси увеличивает число пикселей примерно в четыре раза. Поэтому переход со 150 до 300 dpi существенно повышает расход памяти и размер файлов.

Сглаживание

Для текста и графики доступны:

-dTextAlphaBits=4
-dGraphicsAlphaBits=4

Пример:

gswin64c `
  -dSAFER `
  -sDEVICE=png16m `
  -r150 `
  -dTextAlphaBits=4 `
  -dGraphicsAlphaBits=4 `
  -o "page-%03d.png" `
  "document.pdf"

Сглаживание делает диагонали и контуры текста визуально мягче. Однако для OCR иногда лучше использовать повышенное внутреннее разрешение и последующее уменьшение, чем полагаться только на альфа-сглаживание.

Преобразование PDF в JPEG

Для цветного JPEG выбирается устройство jpeg:

gswin64c `
  -dSAFER `
  -sDEVICE=jpeg `
  -r200 `
  -dJPEGQ=90 `
  -o "page-%03d.jpg" `
  "document.pdf"

Параметр -dJPEGQ принимает значение от 0 до 100:

  • низкие значения дают сильное сжатие и заметные артефакты;

  • значения около 75 соответствуют стандартному компромиссу;

  • 85–92 подходят для качественного экранного изображения;

  • 95–100 создают крупные файлы и не превращают JPEG в формат без потерь.

Для серого JPEG:

gswin64c `
  -dSAFER `
  -sDEVICE=jpeggray `
  -r200 `
  -dJPEGQ=90 `
  -o "page-%03d.jpg" `
  "document.pdf"

JPEG лучше использовать для страниц, состоящих преимущественно из фотографий. Для текста, интерфейсных скриншотов, таблиц, схем и чертежей предпочтителен PNG. Потери JPEG создают ореолы вокруг букв и размывают тонкие линии даже при высоком параметре качества.

Создание TIFF

Ghostscript содержит несколько TIFF-устройств.

Полноцветный TIFF

gswin64c `
  -dSAFER `
  -sDEVICE=tiff24nc `
  -r300 `
  -o "page-%03d.tif" `
  "document.pdf"

tiff24nc создаёт 24-битный RGB TIFF.

TIFF в оттенках серого

gswin64c `
  -dSAFER `
  -sDEVICE=tiffgray `
  -r300 `
  -o "page-%03d.tif" `
  "document.pdf"

Чёрно-белый TIFF Group 4

gswin64c `
  -dSAFER `
  -sDEVICE=tiffg4 `
  -r300 `
  -o "page-%03d.tif" `
  "document.pdf"

tiffg4 подходит для чёрно-белых сканов, архивных копий и факсимильных документов. На фотографиях и полутоновой графике он даёт неприемлемый результат, поскольку хранит только два состояния пикселя.

Цветоделение

Устройство tiffsep создаёт составной CMYK-файл и отдельные файлы цветоделения:

Скриншот Ghostscript: Dll1I

gswin64c `
  -dSAFER `
  -sDEVICE=tiffsep `
  -r300 `
  -o "separation-%03d.tif" `
  "print-job.pdf"

Для базовых красок формируются файлы Cyan, Magenta, Yellow и Black. Если документ содержит плашечные цвета, Ghostscript может создать дополнительные сепарации с их именами.

TIFF требует выходного потока с поддержкой произвольного доступа. Запись такого результата непосредственно в стандартный вывод или обычный конвейер не поддерживается.

Обработка отдельных страниц

Для непрерывного диапазона используются -dFirstPage и -dLastPage.

Пример обработки страниц 5–12:

gswin64c `
  -dSAFER `
  -sDEVICE=png16m `
  -r200 `
  -dFirstPage=5 `
  -dLastPage=12 `
  -o "page-%03d.png" `
  "document.pdf"

Только первая страница:

gswin64c `
  -dSAFER `
  -sDEVICE=png16m `
  -dFirstPage=1 `
  -dLastPage=1 `
  -r150 `
  -o "preview.png" `
  "document.pdf"

Для сложного выбора применяется -sPageList.

Отдельные страницы:

-sPageList=1,3,7

Диапазон:

-sPageList=5-10

Несколько диапазонов:

-sPageList=1,4-8,15-

Все нечётные страницы:

-sPageList=odd

Все чётные страницы:

-sPageList=even

Нечётные страницы в определённом диапазоне:

-sPageList=odd:3-15

Полная команда:

gswin64c `
  -dSAFER `
  -sDEVICE=pdfwrite `
  -sPageList="1,3,5-8,12-" `
  -o "selected-pages.pdf" `
  "document.pdf"

PageList имеет приоритет над FirstPage и LastPage. Если указать оба способа одновременно, Ghostscript использует PageList.

Нумерация выходных изображений остаётся последовательной. При выборе чётных страниц шаблон page-%d.png создаст page-1.png, page-2.png, page-3.png, а не файлы с номерами исходных страниц 2, 4 и 6.

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

Использование MediaBox, CropBox, TrimBox, BleedBox и ArtBox

В PDF у страницы может быть несколько прямоугольных областей.

Область Назначение
MediaBox полный физический размер страницы
CropBox область отображения и обычной обрезки
BleedBox зона с вылетами под обрез
TrimBox конечный размер после подрезки
ArtBox границы содержательной части

По умолчанию Ghostscript ориентируется на MediaBox. Для использования другой области применяются параметры:

-dUseCropBox
-dUseBleedBox
-dUseTrimBox
-dUseArtBox

Пример сохранения только области CropBox:

gswin64c `
  -dSAFER `
  -sDEVICE=png16m `
  -dUseCropBox `
  -r200 `
  -o "cropped-%03d.png" `
  "document.pdf"

Для имитации готового печатного изделия после обрезки:

gswin64c `
  -dSAFER `
  -sDEVICE=pdfwrite `
  -dUseTrimBox `
  -o "trimmed.pdf" `
  "document.pdf"

BleedBox полезен при проверке вылетов, а ArtBox — когда требуется ограничить изображение содержательной областью.

Эти параметры не выполняют интеллектуальное обнаружение пустых полей. Ghostscript использует координаты, уже записанные в PDF. Если автор документа неправильно сформировал боксы, результат также будет неправильным.

Масштабирование под формат страницы

Для подгонки PDF к размеру выбранного носителя применяется:

-dPDFFitPage

Пример размещения страниц на A4:

gswin64c `
  -dSAFER `
  -sDEVICE=pdfwrite `
  -sPAPERSIZE=a4 `
  -dFIXEDMEDIA `
  -dPDFFitPage `
  -o "a4-document.pdf" `
  "source.pdf"

Параметры выполняют разные функции:

  • -sPAPERSIZE=a4 выбирает A4;

  • -dFIXEDMEDIA запрещает документу переопределять размер носителя;

  • -dPDFFitPage масштабирует исходную страницу, чтобы она поместилась на выбранном листе.

Для PostScript применяется -dPSFitPage:

gswin64c `
  -dSAFER `
  -sDEVICE=pdfwrite `
  -sPAPERSIZE=a4 `
  -dFIXEDMEDIA `
  -dPSFitPage `
  -o "a4-result.pdf" `
  "source.ps"

Произвольный размер задаётся в пунктах:

-dDEVICEWIDTHPOINTS=595
-dDEVICEHEIGHTPOINTS=842

Один пункт равен 1/72 дюйма. Размер 595 × 842 пункта приблизительно соответствует A4.

При подгонке Ghostscript сохраняет пропорции страницы и размещает её внутри целевой области. Если пропорции исходника и листа отличаются, по сторонам останутся поля. Для заполнения листа с обрезкой требуется отдельное управление масштабом и смещением через PostScript-параметры.

Изменение цветовой модели PDF

Ghostscript способен преобразовать документ в оттенки серого:

gswin64c `
  -dSAFER `
  -sDEVICE=pdfwrite `
  -sColorConversionStrategy=Gray `
  -dProcessColorModel=/DeviceGray `
  -o "grayscale.pdf" `
  "source.pdf"

Для RGB:

gswin64c `
  -dSAFER `
  -sDEVICE=pdfwrite `
  -sColorConversionStrategy=RGB `
  -dProcessColorModel=/DeviceRGB `
  -o "rgb.pdf" `
  "source.pdf"

Для CMYK:

gswin64c `
  -dSAFER `
  -sDEVICE=pdfwrite `
  -sColorConversionStrategy=CMYK `
  -dProcessColorModel=/DeviceCMYK `
  -o "cmyk.pdf" `
  "source.pdf"

Преобразование цвета — не простая смена служебной метки. Ghostscript пересчитывает цветовые значения объектов и изображений. Результат зависит от:

  • исходного цветового пространства;

  • встроенных ICC-профилей;

  • профиля устройства вывода;

  • rendering intent;

  • параметров сохранения чёрного;

  • наличия плашечных цветов;

  • прозрачности и наложения красок.

Для офисного документа перевод в Gray обычно достаточно предсказуем. Для полиграфического PDF преобразование RGB в CMYK необходимо выполнять с подходящим ICC-профилем и обязательной проверкой результата.

Автоматическая конвертация без согласованного профиля не гарантирует соответствия конкретной печатной машине или типу бумаги.

Работа со шрифтами

Ghostscript ищет шрифты среди встроенных ресурсов, системных каталогов и путей, указанных пользователем.

Дополнительная папка со шрифтами задаётся параметром:

-sFONTPATH="D:\Fonts"

Пример:

gswin64c `
  -dSAFER `
  -sFONTPATH="D:\Project Fonts" `
  -sDEVICE=pdfwrite `
  -o "result.pdf" `
  "source.ps"

Несколько каталогов в Windows разделяются точкой с запятой:

-sFONTPATH="D:\Fonts;E:\Archive\Fonts"

Каталог ресурсов можно добавить в путь поиска ключом -I:

-I"D:\Ghostscript Resources"

При отсутствии шрифта Ghostscript пытается подобрать замену. Это позволяет обработать документ, но внешний вид может измениться:

  • меняется ширина символов;

  • строки переносятся иначе;

  • текст выходит за границы блока;

  • различаются формы знаков;

  • нарушается позиционирование в таблицах.

Для производственного контроля PDF можно запретить обобщённую замену CID-шрифтов:

-dPDFNOCIDFALLBACK

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

Параметр -sSUBSTFONT принудительно заменяет неизвестные шрифты выбранным шрифтом, но его не следует без необходимости применять вместе с pdfwrite. Такая замена изменяет шрифтовую модель выходного документа и может привести к нежелательному встраиванию единственного заменяющего шрифта.

Извлечение текста через txtwrite

Для извлечения текста применяется устройство txtwrite:

gswin64c `
  -dSAFER `
  -sDEVICE=txtwrite `
  -o "output.txt" `
  "document.pdf"

Ghostscript анализирует текстовые операции PDF и записывает Unicode-текст. Форматирование страницы при этом сохраняется лишь приблизительно. Пробелы и переводы строк формируются на основе координат символов.

txtwrite хорошо работает, если PDF содержит настоящий текст. Оно не распознаёт буквы на обычном скане без текстового слоя.

Устройство пригодно для:

  • индексации PDF;

  • подготовки текста для поиска;

  • извлечения данных из отчётов;

  • анализа журналов;

  • первичной конвертации документа в TXT;

  • проверки наличия текстового слоя;

  • автоматизированной обработки большого массива файлов.

Ограничения:

  • колонки могут смешиваться;

  • таблицы не превращаются в структурированные ячейки;

  • колонтитулы попадают в общий текст;

  • нестандартная кодировка шрифта способна давать неправильные символы;

  • визуальный порядок не всегда совпадает с порядком операторов PDF;

  • текст, преобразованный в кривые, не извлекается.

Для быстрой проверки текстового слоя можно выполнить:

gswin64c -q -sDEVICE=txtwrite -o - "document.pdf"

Знак - отправляет результат в стандартный вывод, и текст появляется непосредственно в консоли.

OCR в Ghostscript

Ghostscript может использовать Tesseract для оптического распознавания. Наличие OCR зависит от состава сборки и проверяется через:

gswin64c -h

В списке устройств нужно искать:

ocr
hocr
pdfocr8
pdfocr24
pdfocr32

Извлечение распознанного текста

gswin64c `
  -dSAFER `
  -sDEVICE=ocr `
  -r300 `
  -sOCRLanguage="rus+eng" `
  -o "recognized.txt" `
  "scan.pdf"

ocr создаёт текст в UTF-8.

Для hOCR:

gswin64c `
  -dSAFER `
  -sDEVICE=hocr `
  -r300 `
  -sOCRLanguage="rus+eng" `
  -o "recognized.html" `
  "scan.pdf"

hOCR содержит текст и координаты распознанных элементов.

Создание PDF с текстовым слоем

Для цветного RGB-документа используется pdfocr24:

gswin64c `
  -dSAFER `
  -sDEVICE=pdfocr24 `
  -r300 `
  -sOCRLanguage="rus+eng" `
  -o "searchable.pdf" `
  "scan.pdf"

Другие варианты:

Устройство Цветность
pdfocr8 оттенки серого
pdfocr24 RGB
pdfocr32 CMYK

Эти устройства растрируют страницу, выполняют OCR и помещают изображение в PDF. Распознанный текст записывается поверх изображения в невидимом режиме, благодаря чему документ можно искать и копировать.

Такой PDF визуально остаётся сканом. Текст не превращается в обычные редактируемые абзацы.

Выбор языка

Язык задаётся параметром:

-sOCRLanguage=rus

Несколько языков объединяются знаком +:

-sOCRLanguage="rus+eng"

Tesseract ищет файлы traineddata. Путь можно передать через переменную среды TESSDATA_PREFIX.

В PowerShell:

$env:TESSDATA_PREFIX = "D:\tessdata"

После этого запускается Ghostscript.

UseOCR для pdfwrite

pdfwrite может применять OCR для формирования Unicode-карт шрифтов. Управление выполняется параметром -sUseOCR.

Доступны значения:

  • Never — не применять OCR;

  • AsNeeded — использовать при необходимости;

  • Always — анализировать текст постоянно.

Пример:

gswin64c `
  -dSAFER `
  -sDEVICE=pdfwrite `
  -sUseOCR=AsNeeded `
  -o "unicode-fixed.pdf" `
  "source.pdf"

Этот режим анализирует текстовые объекты, а не изображения страниц. Для сканированного PDF без текста следует использовать устройства pdfocr8, pdfocr24 или pdfocr32.

OCR значительно увеличивает время обработки. Скорость зависит от разрешения, количества страниц, языковых моделей, качества скана, наклона строк и сложности макета.

Создание PDF/A

Ghostscript создаёт архивный PDF через pdfwrite. Помимо команды требуется настроенный файл PDFA_def.ps, содержащий сведения о выходном ICC-профиле.

Пример для PDF/A-2:

gswin64c `
  -dPDFA=2 `
  -dBATCH `
  -dNOPAUSE `
  -dSAFER `
  -sDEVICE=pdfwrite `
  -sColorConversionStrategy=RGB `
  -dPDFACompatibilityPolicy=1 `
  -sOutputFile="archive.pdf" `
  "PDFA_def.ps" `
  "source.pdf"

Порядок файлов важен: сначала обрабатывается PDFA_def.ps, затем исходный документ.

В PDFA_def.ps должен быть указан действительный путь к ICC-профилю, используемому в OutputIntent. Простого добавления -dPDFA=2 недостаточно для гарантированно корректного архивного документа.

Параметр PDFACompatibilityPolicy определяет реакцию на несовместимые элементы:

Значение Поведение
0 сохранить элемент, даже если соответствие PDF/A будет нарушено
1 исключить несовместимый элемент и вывести предупреждение
2 остановить обработку с ошибкой

Для производственного процесса логичны значения 1 или 2. Значение 0 способно создать файл с метаданными PDF/A, который фактически не соответствует стандарту.

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

Печать документов

В Windows Ghostscript может использовать устройство mswinpr2:

gswin64c `
  -dSAFER `
  -dBATCH `
  -dNOPAUSE `
  -sDEVICE=mswinpr2 `
  "document.pdf"

При запуске без имени принтера может открыться стандартный диалог печати Windows.

Для отправки на конкретный принтер:

gswin64c `
  -dSAFER `
  -dBATCH `
  -dNOPAUSE `
  -sDEVICE=mswinpr2 `
  -sOutputFile="%printer%Office Printer" `
  "document.pdf"

В PowerShell знак % передаётся без удвоения. В некоторых пакетных сценариях Windows его приходится экранировать, поскольку командная оболочка использует % для переменных.

Ghostscript подходит для автоматической печати, когда нужно:

  • отправлять PDF из серверного процесса;

  • печатать без открытия просмотрщика;

  • предварительно изменять масштаб;

  • выбирать фиксированный формат бумаги;

  • преобразовывать цвет;

  • печатать диапазон страниц;

  • растрировать сложные документы перед выводом.

    Скриншот Ghostscript: gswin64.exe 22DD8894E258F67B76D2916B97279950 3

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

Пакетная обработка в PowerShell

Главное преимущество Ghostscript — возможность обрабатывать целые каталоги.

Сжатие всех PDF

$gs = "C:\Program Files\gs\папка_установки\bin\gswin64c.exe"
$sourceDir = "D:\PDF\Source"
$outputDir = "D:\PDF\Compressed"

New-Item -ItemType Directory -Path $outputDir -Force | Out-Null

Get-ChildItem -Path $sourceDir -Filter *.pdf -File | ForEach-Object {
    $outputFile = Join-Path $outputDir $_.Name

    & $gs `
        -dSAFER `
        -dBATCH `
        -dNOPAUSE `
        -sDEVICE=pdfwrite `
        -dPDFSETTINGS=/ebook `
        "-sOutputFile=$outputFile" `
        $_.FullName

    if ($LASTEXITCODE -ne 0) {
        Write-Error "Ошибка обработки: $($_.FullName)"
    }
}

Переменная $LASTEXITCODE содержит код завершения последнего консольного приложения. Нулевое значение означает успешное выполнение.

Растеризация каждого PDF в отдельную папку

$gs = "gswin64c"
$sourceDir = "D:\PDF\Source"
$outputRoot = "D:\PDF\Images"

Get-ChildItem -Path $sourceDir -Filter *.pdf -File | ForEach-Object {
    $documentDir = Join-Path $outputRoot $_.BaseName
    New-Item -ItemType Directory -Path $documentDir -Force | Out-Null

    $outputMask = Join-Path $documentDir "page-%03d.png"

    & $gs `
        -dSAFER `
        -dBATCH `
        -dNOPAUSE `
        -sDEVICE=png16m `
        -r200 `
        "-sOutputFile=$outputMask" `
        $_.FullName

    if ($LASTEXITCODE -ne 0) {
        Write-Warning "Не удалось обработать $($_.Name)"
    }
}

Ведение журнала

& $gs `
    -dSAFER `
    -sDEVICE=pdfwrite `
    "-sOutputFile=$outputFile" `
    $inputFile *> "ghostscript.log"

Для каждого документа лучше создавать отдельный журнал:

$logFile = Join-Path $outputDir "$($_.BaseName).log"

Лог позволяет определить:

  • на какой странице возникла ошибка;

  • какой шрифт не найден;

  • выполнялось ли восстановление повреждённой структуры;

  • был ли создан выходной файл;

  • какой тип PostScript-исключения возник.

Пакетный файл BAT

Простой BAT-сценарий для конвертации всех PDF:

@echo off
setlocal

set "GS=C:\Program Files\gs\папка_установки\bin\gswin64c.exe"
set "OUT=D:\PDF\Compressed"

if not exist "%OUT%" mkdir "%OUT%"

for %%F in ("D:\PDF\Source\*.pdf") do (
    "%GS%" ^
        -dSAFER ^
        -dBATCH ^
        -dNOPAUSE ^
        -sDEVICE=pdfwrite ^
        -dPDFSETTINGS=/ebook ^
        -sOutputFile="%OUT%\%%~nF.pdf" ^
        "%%~fF"

    if errorlevel 1 (
        echo Ошибка: %%~fF
    )
)

endlocal

Конструкции BAT:

  • %%F — переменная цикла;

  • %%~fF — полный путь;

  • %%~nF — имя без расширения;

  • ^ — перенос команды;

  • errorlevel — проверка кода возврата.

Кавычки вокруг путей обязательны, если в именах каталогов или документов есть пробелы.

Автоматизация в Bash

В Linux и macOS исполняемый файл называется gs.

Сжатие каталога:

#!/usr/bin/env bash

set -u

source_dir="/data/pdf/source"
output_dir="/data/pdf/compressed"

mkdir -p "$output_dir"

find "$source_dir" -maxdepth 1 -type f -iname '*.pdf' -print0 |
while IFS= read -r -d '' file; do
    name="$(basename "$file")"
    output="$output_dir/$name"

    if ! gs \
        -dSAFER \
        -dBATCH \
        -dNOPAUSE \
        -sDEVICE=pdfwrite \
        -dPDFSETTINGS=/ebook \
        -sOutputFile="$output" \
        "$file"
    then
        printf 'Ошибка обработки: %s\n' "$file" >&2
    fi
done

Использование -print0 и чтение с разделителем NUL защищает сценарий от пробелов и специальных символов в именах файлов.

Интеграция через API

Ghostscript можно запускать как отдельный процесс или подключать как библиотеку. Библиотечный API позволяет приложению:

  • создать экземпляр интерпретатора;

  • перенаправить стандартный вывод и ошибки;

  • передать параметры командной строки;

  • отправить PostScript-код;

  • получать данные устройства отображения;

  • прерывать длительную операцию;

  • завершить и удалить экземпляр.

Типичная последовательность вызовов:

  1. gsapi_new_instance;

  2. gsapi_set_stdio;

  3. gsapi_set_arg_encoding;

  4. gsapi_init_with_args;

  5. выполнение документа;

  6. gsapi_exit;

  7. gsapi_delete_instance.

gsapi_init_with_args принимает практически те же параметры, что и консольный Ghostscript. Это позволяет сначала отладить обработку в терминале, а затем перенести готовый набор аргументов в приложение.

Прямое подключение DLL уменьшает накладные расходы на запуск отдельного процесса, но требует более строгого управления памятью, потоками, кодами ошибок и временем жизни экземпляра. Для небольших сценариев проще и надёжнее запускать gswin64c.exe как дочерний процесс.

Безопасность

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

Ghostscript использует режим SAFER, ограничивающий доступ к файловой системе и опасным операциям. В автоматизированных командах его полезно указывать явно:

-dSAFER

Отключать ограничения параметром -dNOSAFER следует только в изолированной среде и для полностью доверенных файлов.

Для точного разрешения путей применяются:

--permit-file-read=путь
--permit-file-write=путь
--permit-file-control=путь
--permit-file-all=путь

Пример:

gswin64c `
  -dSAFER `
  --permit-file-read="D:\Input\*" `
  --permit-file-write="D:\Output\*" `
  -sDEVICE=pdfwrite `
  -o "D:\Output\result.pdf" `
  "D:\Input\source.pdf"

Сопоставление путей чувствительно к регистру даже в Windows. Абсолютный путь, относительный путь и обращение через символическую ссылку считаются разными формами.

Для серверной обработки следует:

  • запускать Ghostscript от отдельной учётной записи;

  • не давать процессу доступ к конфиденциальным каталогам;

  • ограничивать время выполнения;

  • ограничивать оперативную память;

  • ограничивать размер входного файла;

  • контролировать число одновременно запущенных процессов;

  • сохранять журналы ошибок;

  • проверять код завершения;

  • обрабатывать документы во временном каталоге;

  • регулярно обновлять установленную сборку;

  • не разрешать входному PostScript произвольно менять устройство вывода.

Даже корректный документ способен потребовать много ресурсов. Например, страница огромного физического размера при высоком DPI создаёт чрезвычайно большой растр. Поэтому лимиты необходимы не только для защиты от уязвимостей, но и от истощения памяти и диска.

Производительность

Скорость Ghostscript зависит от типа задачи.

Быстрее всего обычно выполняются:

  • конвертация простого векторного PostScript;

  • извлечение текста из корректного цифрового PDF;

  • обработка небольшого диапазона страниц;

  • повторная сборка офисного PDF без сложной прозрачности.

Больше времени требуют:

  • растеризация при 600 dpi;

  • OCR;

  • обработка больших изображений;

  • сложные маски прозрачности;

  • цветопреобразование через ICC;

  • страницы с большим числом мелких векторных объектов;

  • цветоделение;

  • повреждённые PDF, требующие восстановления;

  • документы с крупными встроенными шрифтами.

Размер растра рассчитывается по физическим размерам страницы и DPI. Лист A4 при 300 dpi содержит примерно 2480 × 3508 пикселей. RGB-буфер без учёта дополнительных структур занимает около 26 Мбайт. При 600 dpi ширина и высота удваиваются, а число пикселей и базовый объём памяти возрастают примерно в четыре раза.

Для многостраничных документов Ghostscript использует полосовую обработку и display list, чтобы не хранить всю страницу целиком в одном огромном буфере. Параметры управления banding позволяют изменять баланс между памятью, временными файлами и скоростью, но стандартные значения подходят большинству задач.

Практические способы ускорения:

  • не использовать разрешение выше необходимого;

  • обрабатывать только нужные страницы;

  • не запускать OCR там, где уже есть текст;

  • выбирать pnggray вместо png16m для серых документов;

  • не переводить изображение в CMYK без необходимости;

  • размещать временные файлы на быстром накопителе;

  • не запускать слишком много экземпляров параллельно;

  • тестировать параметры на типичном документе;

  • использовать -q, если объём консольного вывода мешает пакетной обработке.

Параллельный запуск нескольких процессов может ускорить обработку каталога, но каждый процесс потребляет собственную память. На больших документах ограничение числа рабочих процессов обычно даёт более стабильный результат, чем запуск по одному экземпляру на каждое ядро.

Типичные ошибки Ghostscript

/undefined

Пример:

Error: /undefined in ...

Интерпретатор встретил неизвестное имя или оператор. Причины:

  • повреждённый PostScript;

  • опечатка в пользовательском коде;

  • отсутствующий ресурс;

  • использование нестандартного оператора;

  • несовместимый старый сценарий.

/invalidfileaccess

Error: /invalidfileaccess in --file--

Режим безопасности запретил чтение или запись. Нужно проверить:

  • путь к входному файлу;

  • каталог выходного файла;

  • кавычки;

  • --permit-file-read;

  • --permit-file-write;

  • регистр символов;

  • права системной учётной записи.

/rangecheck

Оператор получил значение вне допустимого диапазона. Ошибка встречается при некорректных массивах, координатах, параметрах изображения или повреждённых данных.

/typecheck

Оператор получил объект неправильного типа. Например, вместо числа передана строка или вместо массива — имя.

/limitcheck

Документ превысил внутренний предел или потребовал чрезмерный объём ресурсов. Причиной может быть очень сложный контур, гигантское изображение, глубокая вложенность или некорректный PostScript.

/ioerror

Ошибка чтения или записи:

  • недостаточно места;

  • выходной файл заблокирован;

  • нет прав;

  • сетевой ресурс недоступен;

  • поток не поддерживает требуемые операции;

  • входной файл оборван.

Unrecoverable error

Ghostscript не смог продолжить после критической ошибки. Важнее всего изучить строки непосредственно перед этим сообщением: там находится имя исключения и стек выполнения.

Ошибки шрифтов

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

Предупреждения о PDF

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

Ограничения Ghostscript

Ghostscript обладает мощным движком обработки, но не решает все задачи PDF.

Программа не предоставляет удобных визуальных средств для:

  • редактирования отдельных слов;

  • перемещения изображений мышью;

    Скриншот Ghostscript: 2018 08 13 13 50 54

  • создания комментариев;

  • заполнения форм;

  • ручного управления закладками;

  • редактирования ссылок;

  • перестановки миниатюр страниц;

  • сравнения редакций;

  • подписания документа;

  • управления сертификатами;

  • исправления структуры тегированного PDF вручную.

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

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

Для операций, где требуется сохранить исходную структуру без перерисовки, лучше подходит структурный PDF-инструмент.

Сравнение с аналогами

Ghostscript и MuPDF

MuPDF предоставляет библиотеку, просмотрщики и командный набор mutool. Команда mutool draw рендерит документы, mutool convert выполняет преобразование, mutool clean переписывает PDF, mutool extract извлекает изображения и шрифты, а mutool show отображает внутренние объекты.

MuPDF удобен для быстрого рендеринга PDF, XPS и электронных книг. Его синтаксис часто короче, а mutool объединяет несколько операций в одном исполняемом файле.

Ghostscript сильнее ориентирован на PostScript, печатные устройства, Distiller-параметры, цветоделение и сложные производственные преобразования. Для обработки PS и EPS он является более естественным выбором.

Ghostscript и Poppler

Poppler — библиотека рендеринга PDF с набором отдельных утилит:

  • pdftoppm;

  • pdftocairo;

  • pdftotext;

  • pdfinfo;

  • pdfimages;

  • pdffonts;

  • pdfseparate;

  • pdfunite.

Poppler удобнее, когда нужна одна конкретная операция: извлечь текст, получить сведения о шрифтах, сохранить изображения или быстро растрировать PDF.

Ghostscript охватывает более широкий производственный цикл: PostScript, устройства печати, pdfwrite, PDF/A, PDF/X, цветовые модели, ICC и большое количество растровых драйверов.

Poppler не является полноценным интерпретатором PostScript, поэтому не заменяет Ghostscript в обработке .ps и .eps.

Ghostscript и qpdf

qpdf выполняет структурные преобразования PDF без интерпретации внешнего вида страниц. Он умеет:

  • разделять и объединять страницы;

  • копировать объекты между PDF;

  • менять шифрование;

  • создавать линейризованный PDF;

  • переписывать таблицы перекрёстных ссылок;

  • анализировать внутреннюю структуру;

  • сохранять содержимое без повторного рендеринга.

Если требуется объединить два PDF, удалить пароль при наличии разрешения, разделить файл или выполнить web-оптимизацию без изменения графики, qpdf обычно подходит лучше.

Ghostscript нужен, когда требуется именно интерпретировать содержимое:

  • растрировать;

  • изменить разрешение изображений;

  • преобразовать цвет;

  • создать PostScript;

  • сформировать новый PDF на основе графических операций;

  • обработать EPS;

  • подготовить документ к печати.

qpdf старается сохранить содержимое, а Ghostscript пересобирает его. Это не взаимозаменяемые, а дополняющие инструменты.

Ghostscript и ImageMagick

ImageMagick предназначен прежде всего для обработки растровых изображений. При открытии PDF или PostScript он часто использует Ghostscript как внешний delegate для рендеринга страниц.

ImageMagick удобнее для операций после растеризации:

  • изменение размеров;

  • кадрирование;

  • наложение изображений;

  • регулировка яркости;

  • создание коллажей;

  • преобразование между растровыми форматами.

Ghostscript лучше контролирует интерпретацию PDF и PostScript, страницы, боксы, шрифты, цветовые пространства и параметры pdfwrite.

Цепочка из Ghostscript и ImageMagick часто эффективнее попытки выполнить всё одной программой: Ghostscript точно рендерит документ, а ImageMagick обрабатывает полученные пиксели.

Ghostscript и Adobe Acrobat Pro

Adobe Acrobat Pro предоставляет графический интерфейс и подходит для ручной работы:

  • редактирования текста;

  • управления страницами;

  • создания форм;

  • комментариев;

  • подписей;

  • сравнения документов;

  • визуальной оптимизации;

  • проверки доступности.

Ghostscript не предлагает подобных интерактивных инструментов. Его преимущество — автоматизация, воспроизводимость команд и интеграция в серверные процессы.

Для единичного ручного редактирования Acrobat удобнее. Для ночной обработки нескольких тысяч PDF, создания PNG-превью или автоматической конвертации PostScript Ghostscript значительно практичнее.

Сводная таблица

Возможность Ghostscript MuPDF Poppler qpdf Adobe Acrobat Pro
Интерпретация PostScript отлично ограниченно нет нет частично
Растеризация PDF отлично отлично отлично нет есть
PDF в PNG/JPEG/TIFF отлично хорошо хорошо нет есть
Повторное создание PDF отлично хорошо ограниченно отлично на структурном уровне отлично
Сжатие изображений внутри PDF гибко ограниченно не основная задача без рендеринга через интерфейс
Структурное объединение страниц ограниченно есть есть отлично отлично
PDF/A и PDF/X есть ограниченно не основная задача не основная задача есть
Цветоделение и CMYK сильно ограниченно зависит от инструмента нет сильно
OCR через OCR-устройства отдельные сценарии нет встроенного полного цикла нет есть
Графический интерфейс практически отсутствует есть отдельные просмотрщики зависит от оболочки нет полноценный
Пакетная автоматизация отлично отлично отлично отлично ограниченнее
Работа с EPS отлично ограниченно нет нет есть
Сохранение внутренней структуры не гарантируется зависит от операции зависит от утилиты основное преимущество зависит от операции

MuPDF ориентирован на компактный движок и универсальные PDF-инструменты, Poppler — на набор специализированных утилит, qpdf — на сохранные структурные преобразования, Acrobat Pro — на интерактивное редактирование. Ghostscript занимает отдельную нишу интерпретатора PostScript и PDF с большим количеством устройств вывода и производственных параметров.

Преимущества Ghostscript

К основным достоинствам относятся:

  • полноценная интерпретация PostScript;

  • обработка PDF и EPS;

  • большое количество устройств вывода;

  • качественная растеризация;

  • точное управление DPI;

  • создание PNG, JPEG и TIFF;

  • формирование новых PDF;

  • гибкое сжатие изображений;

  • работа с диапазонами страниц;

  • поддержка CropBox, TrimBox, BleedBox и ArtBox;

  • преобразование RGB, CMYK и Gray;

  • управление ICC-профилями;

  • создание PDF/A и PDF/X;

  • работа с цветоделением;

  • извлечение текста;

  • подключение OCR;

  • пакетная обработка;

  • интеграция через библиотечный API;

  • работа в Windows, Linux и macOS;

  • удобство серверной автоматизации;

  • воспроизводимость операций.

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

Недостатки Ghostscript

Основные слабые стороны:

  • высокий порог входа;

  • отсутствие современного графического интерфейса;

  • большое количество параметров;

  • неочевидные различия между устройствами;

  • необходимость понимать DPI и цветовые пространства;

  • риск ухудшить качество неверными настройками;

  • изменение внутренней структуры PDF;

  • возможная потеря интерактивных элементов;

  • сложность диагностики PostScript-ошибок;

  • необходимость отдельно контролировать безопасность;

  • OCR зависит от состава сборки и языковых данных;

  • лицензирование требует внимательной оценки при встраивании в закрытые продукты.

Новичку сложно сразу определить, почему для одной задачи нужен pdfwrite, для другой png16m, а для третьей pdfocr24. Однако после подготовки нескольких проверенных шаблонов ежедневная работа становится простой.

Кому подойдёт Ghostscript

Программа особенно полезна:

  • системным администраторам;

  • разработчикам;

  • инженерам автоматизации;

  • специалистам электронного документооборота;

  • сотрудникам типографий;

  • специалистам допечатной подготовки;

  • администраторам печатных систем;

  • владельцам веб-сервисов конвертации;

  • архивистам;

  • пользователям, регулярно обрабатывающим большие каталоги PDF.

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

Для пользователя, которому нужно раз в месяц вручную исправить одну строку в PDF, программа будет избыточной. В таком случае удобнее визуальный PDF-редактор.

Итог

Ghostscript — один из наиболее функциональных инструментов для программной обработки PostScript, EPS и PDF. Он умеет создавать и пересобирать PDF, растрировать страницы, управлять разрешением, обрабатывать отдельные диапазоны, преобразовывать цветовые пространства, извлекать текст, подключать OCR и формировать документы для архивных или полиграфических процессов.

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

Ghostscript наиболее силён как интерпретатор и конверсионный движок. Он не заменяет визуальный редактор, qpdf или специализированную OCR-систему во всех задачах, но превосходит их там, где требуется управляемая растеризация, обработка PostScript, пакетная пересборка PDF, цветопреобразование и интеграция в автоматизированный рабочий процесс.