Открыть сервис

Ghostscript

Ghostscript — это набор программного обеспечения для интерпретации языков описания страниц PostScript и Portable Document Format (PDF), а также для их рендеринга, преобразования и манипуляции. Разрабатывается и поддерживается компанией Artifex Software, Inc. Ghostscript включает в себя интерпретатор PostScript, интерпретатор PDF, библиотеки для работы с графическими форматами, а также набор утилит командной строки. Программа распространяется в виде двух версий: проприетарной коммерческой (под лицензией Artifex) и свободной с открытым исходным кодом (под лицензией GNU Affero General Public License, AGPL). Ghostscript является ключевым компонентом многих систем, связанных с обработкой документов, печатью и преобразованием файлов.

История

Разработка Ghostscript была начата в 1986 году американским программистом Л. Питером Дойчем (L. Peter Deutsch) в рамках проекта, финансируемого компанией Adobe Systems. Изначально целью было создание свободной реализации языка PostScript, который на тот момент был проприетарным стандартом Adobe. Первая версия Ghostscript была выпущена в 1988 году и поддерживала только интерпретацию PostScript.

В 1990-х годах, после того как Adobe опубликовала спецификации формата PDF, в Ghostscript была добавлена поддержка этого формата. Примерно в то же время проект перешёл под управление компании Aladdin Enterprises, а затем — Artifex Software, основанной Дойчем и Раймондом Голдманом. В 2000-х годах Ghostscript стал одним из основных инструментов для преобразования PostScript и PDF в растровые изображения, а также для работы с ними в операционных системах семейства Unix и Linux.

В 2007 году лицензия Ghostscript была изменена с GNU General Public License (GPL) на GNU Affero General Public License (AGPL) для версий с открытым исходным кодом, что ужесточило требования к распространению программного обеспечения, использующего Ghostscript в веб-сервисах. С этого момента коммерческие пользователи, не желающие раскрывать свой код, вынуждены приобретать проприетарную лицензию у Artifex.

Архитектура и компоненты

Ghostscript состоит из нескольких ключевых компонентов, работающих в единой среде.

Интерпретатор PostScript

Ядро Ghostscript — интерпретатор языка PostScript (уровни 1, 2 и 3). Он читает исходный код на PostScript, выполняет команды и генерирует графические примитивы (линии, кривые, заливки, текст). Интерпретатор поддерживает все основные возможности PostScript, включая работу со шрифтами (Type 1, TrueType, OpenType), цветовыми пространствами (RGB, CMYK, DeviceGray, ICC-профили) и процедурными расширениями.

Интерпретатор PDF

Интерпретатор PDF в Ghostscript реализует спецификации Portable Document Format, начиная с версии 1.0 и заканчивая современными (включая PDF 2.0). Он способен читать, анализировать и рендерить PDF-файлы, поддерживая такие функции, как сжатие (FlateDecode, LZW, JPEG2000), прозрачность, аннотации, формы AcroForm и XFA (частично), а также цифровые подписи. Однако поддержка некоторых расширенных функций (например, сложных скриптов JavaScript или интерактивных 3D-объектов) может быть ограничена.

Библиотеки и драйверы вывода

Ghostscript включает библиотеки для обработки изображений (например, libtiff, libpng, libjpeg) и драйверы вывода, которые определяют формат конечного результата. Драйверы могут генерировать:

  • растровые изображения (PNG, JPEG, TIFF, BMP, PBM);
  • векторные форматы (SVG, EPS, PDF);
  • форматы для печати (PCL, PXL, PostScript);
  • вывод на экран (X11, Windows GDI, macOS Quartz).

Утилиты командной строки

Основная утилита — gs (или gswin32c/gswin64c в Windows). Она принимает на вход файлы PostScript, PDF или другие поддерживаемые форматы и выполняет с ними заданные операции. Типичные команды включают:

  • преобразование PDF в изображение: gs -dNOPAUSE -dBATCH -sDEVICE=png16m -r300 -o output.png input.pdf;
  • слияние нескольких PDF: gs -dNOPAUSE -dBATCH -sDEVICE=pdfwrite -sOutputFile=merged.pdf -f file1.pdf file2.pdf;
  • извлечение страниц: gs -dNOPAUSE -dBATCH -sDEVICE=pdfwrite -dFirstPage=3 -dLastPage=5 -sOutputFile=pages.pdf input.pdf.

Дополнительные утилиты: ps2pdf (преобразование PostScript в PDF), pdf2ps (PDF в PostScript), ps2epsi (PostScript в EPS с предварительным просмотром), pdf2dsc (создание DSC-файла для PDF).

Применение

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

Преобразование форматов

Основное применение Ghostscript — преобразование файлов между форматами PostScript, PDF и растровыми изображениями. Это необходимо в типографиях, издательствах, а также в веб-сервисах, где требуется отображать PDF-документы в браузере (например, генерация миниатюр). Ghostscript часто используется как бэкенд для программ-просмотрщиков PDF (например, MuPDF, Evince) и для серверных решений, таких как Apache PDFBox или ImageMagick, которые вызывают Ghostscript для рендеринга.

Печать и драйверы

В операционных системах семейства Unix/Linux Ghostscript является стандартным компонентом системы печати CUPS (Common Unix Printing System). Он выполняет роль фильтра, преобразующего PostScript или PDF в язык, понятный конкретному принтеру (PCL, PXL, ESC/P). В Windows Ghostscript может использоваться вместе с драйверами RedMon или GSview для эмуляции PostScript-принтера.

Веб-сервисы и автоматизация

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

Разработка и тестирование

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

Критика и ограничения

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

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

Для больших или сложных PDF-файлов (с множеством страниц, высоким разрешением, прозрачностью или сложными шрифтами) Ghostscript может работать медленно и потреблять значительные объёмы оперативной памяти. Это связано с тем, что интерпретатор PostScript является интерпретируемым (а не компилируемым) и выполняет код последовательно.

Качество рендеринга

Хотя Ghostscript обеспечивает высокую точность воспроизведения, в некоторых случаях (особенно при работе с прозрачностью, градиентами или шрифтами OpenType) качество может уступать проприетарным решениям, таким как Adobe Acrobat. Проблемы могут возникать при рендеринге сложных аннотаций или интерактивных элементов.

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

Ghostscript исторически был подвержен уязвимостям, связанным с выполнением кода PostScript. Поскольку PostScript является полноценным языком программирования, злоумышленники могут внедрять вредоносные команды в файлы. Компания Artifex регулярно выпускает исправления, но для безопасной работы рекомендуется использовать Ghostscript в изолированной среде (песочнице) или с ограниченными правами. В 2018 году была обнаружена критическая уязвимость CVE-2018-16509, позволявшая выполнять произвольный код через файлы PostScript.

Лицензионные ограничения

Версия Ghostscript под лицензией AGPL накладывает строгие требования: если программное обеспечение, использующее Ghostscript, предоставляется как веб-сервис (SaaS), то его исходный код должен быть раскрыт. Это делает Ghostscript непригодным для многих коммерческих проектов без покупки платной коммерческой лицензии.

Альтернативы

Существуют другие программы для работы с PostScript и PDF, которые могут использоваться вместо Ghostscript:

  • MuPDF — легковесный просмотрщик PDF и PostScript, разработанный той же компанией Artifex, но с более простым кодом и меньшим функционалом.
  • Poppler — библиотека для рендеринга PDF, используемая в таких программах, как Evince и pdftotext. Не поддерживает PostScript.
  • Xpdf — набор утилит для работы с PDF, включающий просмотрщик и конвертер.
  • Adobe Acrobat — проприетарное решение, обеспечивающее наилучшее качество рендеринга, но требующее лицензирования и не поддерживающее PostScript напрямую.
  • Cairo — библиотека для векторной графики, которая может использоваться для рендеринга PDF через бэкенд, но не является полноценным интерпретатором.

Интересные факты

  • Ghostscript является одним из старейших активно развивающихся проектов с открытым исходным кодом, наряду с Emacs и GCC.
  • Изначально Ghostscript распространялся под лицензией, запрещавшей коммерческое использование без письменного разрешения автора. Это привело к созданию отдельной «коммерческой» версии.
  • В 1990-х годах Ghostscript использовался для создания первой в мире программы, способной печатать на принтерах HP LaserJet без использования драйверов Adobe.
  • Некоторые дистрибутивы Linux (например, Debian) включают Ghostscript в базовую установку, так как он необходим для работы системы печати.

Источники

  • Официальная документация Ghostscript (Artifex Software)
  • Статья «Ghostscript» в английской Википедии
  • Материалы конференций по открытому программному обеспечению (FOSDEM, Linux Foundation)
  • Отчёты об уязвимостях (CVE) на сайте MITRE
  • Книга «PostScript Language Reference» (Adobe Systems, 3rd edition)

BFOmetr — база данных и аналитика по компаниям России.

На главную BFOmetr →