Введение

PostScript (PS) и инкапсулированный PostScript (EPS) — это векторные форматы документов, используемые в печатных рабочих процессах, устаревших издательских системах и графических конвейерах. Aspose.Page FOSS для Python предоставляет PsDocument — один класс, который обрабатывает как .ps, так и .eps файлы — с методами экспорта их в PDF или растровые изображения непосредственно из кода Python.

Библиотека не требует установки Ghostscript, среды выполнения Adobe и нативных системных зависимостей. Она работает под Windows, Linux и macOS. Установите её с помощью pip и используйте сразу в любой среде Python 3.10+.


Загрузка PS и EPS файлов

PsDocument предоставляет два методa класса для загрузки документа. from_file() читает из пути к файлу; from_bytes() принимает необработанные байты из потока или загрузки.

from aspose.page.ps.document import PsDocument

# Load from file path
ps = PsDocument.from_file("document.ps")
eps = PsDocument.from_file("illustration.eps")

# Load from bytes (network stream, upload, etc.)
with open("document.ps", "rb") as f:
    data = f.read()
ps_from_bytes = PsDocument.from_bytes(data)

Свойство is_eps возвращает True, если документ является EPS-файлом, что удобно при обработке смешанной партии PS и EPS файлов по одному и тому же пути кода.


Экспорт в PDF

Вызовите to_pdf() на загруженном PsDocument, чтобы получить вывод в виде объекта bytes. Результат представляет собой корректный поток байтов PDF, который можно записать на диск, сохранить в базе данных или вернуть из HTTP конечной точки.

from pathlib import Path
from aspose.page.ps.document import PsDocument

ps = PsDocument.from_file("input.ps")
pdf_bytes = ps.to_pdf()
Path("output.pdf").write_bytes(pdf_bytes)

Объект параметров не требуется для экспорта PDF по умолчанию. Метод to_pdf() принимает необязательный параметр options для продвинутых сценариев использования.


Экспорт в растровые изображения

Чтобы отрендерить документ PS или EPS в растровое изображение, передайте экземпляр ImageSaveOptions в to_image(). Установите format в значение "png" или "jpeg" и dpi для управления разрешением вывода. Метод возвращает объект bytes, содержащий кодированное изображение.

from pathlib import Path
from aspose.page.ps.document import PsDocument
from aspose.page.ps.output import ImageSaveOptions

eps = PsDocument.from_file("illustration.eps")
opts = ImageSaveOptions(format="png", dpi=150)
png_bytes = eps.to_image(opts)
Path("output.png").write_bytes(png_bytes)

Для вывода в JPEG измените format="jpeg". Свойство dpi по умолчанию равно 96, если не задано.


Чтение метаданных EPS

PsDocument предоставляет свойство dsc, которое возвращает экземпляр DscMetadata, когда в файле присутствуют DSC-комментарии. DscMetadata обеспечивает структурированный доступ к координатам ограничивающего прямоугольника, размеру страницы, ориентации, заголовку и полям creator, извлечённым из заголовка EPS.

from aspose.page.ps.document import PsDocument

eps = PsDocument.from_file("illustration.eps")
dsc = eps.dsc
if dsc is not None:
    print("Title:", dsc.title)
    print("Bounding box:", dsc.bounding_box)
    print("HiRes bounding box:", dsc.hires_bounding_box)

Пакетное преобразование

Поскольку все методы конвертации возвращают bytes и принимают пути к файлам или необработанные байты в качестве входных данных, пакетная обработка проста в реализации с помощью стандартных циклов Python или concurrent.futures.

from pathlib import Path
from aspose.page.ps.document import PsDocument

input_dir = Path("ps-files")
output_dir = Path("pdf-output")
output_dir.mkdir(exist_ok=True)

for ps_file in input_dir.glob("*.ps"):
    doc = PsDocument.from_file(str(ps_file))
    out_path = output_dir / ps_file.with_suffix(".pdf").name
    out_path.write_bytes(doc.to_pdf())
    print("Converted:", ps_file.name)

То же самое правило применяется к файлам EPS, изменив шаблон glob на "*.eps".


Начало работы

Связанные ресурсы