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 →