Перейти к содержимому
Поиск
Php Разработка

PHP: полный мануал с примерами, функциями и ООП

Практический мануал PHP: от переменных и читаемого кода до безопасных форм, интеграций, базы данных и ООП на примере магазина. Учебный маршрут, поиск функций, подробные примеры, разбор ошибок и исходники для скачивания.

Александр НекрасовИзменено:
Практический мануал PHP: от переменных и функций к объектной модели интернет-магазина
PHP 8.5.11468 глав6256 карточек справочника
Дерево руководства

Глава 438 · От первой операции до полного справочника

PostScript в PHP: документы, страницы, текст, графика и печать

Полный справочник ext/ps: создать документ, нарисовать страницу, встроить изображения и ссылки, получить печатный файл.

PS: программно собрать печатный документ

Расширение ps управляет pslib и создаёт PostScript последовательно: документ, страница, графическое состояние, текст/контуры/изображения, завершение. API исторически близок старому расширению PDF; ссылки и закладки проявляются после преобразования PS в PDF.

Сильная сторона pslib — типографика: кернинг, переносы и лигатуры помогают собирать коробочный текст. Цена этой гибкости — обязательный порядок вызовов и явное управление ресурсами.

Официальная страница: PostScript document creation.

Константы концов и соединений линий

Официальный набор разделён на line cap и line join. Эти значения передаются функциям настройки контура; они меняют вид углов и концов, но не толщину линии.

КонстантаКак читать в коде
ps_LINECAP_BUTTЛиния заканчивается точно в конечной точке.
ps_LINECAP_ROUNDКруглый конец выступает на половину толщины линии.
ps_LINECAP_SQUAREDКвадратный конец выступает на половину толщины линии.
ps_LINEJOIN_MITERОстрое соединение; ограничивается miter limit.
ps_LINEJOIN_ROUNDСкруглённое соединение сегментов.
ps_LINEJOIN_BEVELСкошенное соединение сегментов.

Официальная страница: Predefined Constants.

Установка расширения ps

Официальный мануал направляет к PECL-пакету ps. После сборки и включения расширения перезапускают соответствующий PHP SAPI и проверяют extension_loaded('ps'), затем создают минимальный документ в доступном для записи каталоге.

Официальная страница: Installation.

Требование: pslib 0.1.12 или новее

Официальный минимум — pslib >= 0.1.12. PHP-расширение, pslib, шрифты и декодеры изображений образуют единый runtime; проверка одной версии PHP не подтверждает готовность всего конвейера.

Официальная страница: Requirements.

Ресурс PostScript-документа

ps_new() возвращает ресурс документа. Затем его связывают с файлом или буфером, создают страницы, закрывают документ через ps_close() и освобождают через ps_delete(). Ресурс изображения, шаблона, узора, шрифта или градиента имеет собственный идентификатор и срок жизни.

Официальная страница: Resource Types.

Подготовка PS-конвейера

Минимальный исправный порядок
  1. Проверить расширение и каталог записи
  2. Создать ресурс и открыть файл
  3. Начать страницу, настроить шрифт и рисовать
  4. Завершить страницу и документ, затем освободить ресурс
  5. Проверить сигнатуру, размер и открытие независимым PS/PDF-инструментом

Официальная страница: Installing/Configuring.

Дерево всех функций ps

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

ОперацияОфициальное назначение
ps_add_bookmarkAdd bookmark to current page
ps_add_launchlinkAdds link which launches file
ps_add_locallinkAdds link to a page in the same document
ps_add_noteAdds note to current page
ps_add_pdflinkAdds link to a page in a second pdf document
ps_add_weblinkAdds link to a web location
ps_arcDraws an arc counterclockwise
ps_arcnDraws an arc clockwise
ps_begin_pageStart a new page
ps_begin_patternStart a new pattern
ps_begin_templateStart a new template
ps_circleDraws a circle
ps_clipClips drawing to current path
ps_closeCloses a PostScript document
ps_close_imageCloses image and frees memory
ps_closepathCloses path
ps_closepath_strokeCloses and strokes path
ps_continue_textContinue text in next line
ps_curvetoDraws a curve
ps_deleteDeletes all resources of a PostScript document
ps_end_pageEnd a page
ps_end_patternEnd a pattern
ps_end_templateEnd a template
ps_fillFills the current path
ps_fill_strokeFills and strokes the current path
ps_findfontLoads a font
ps_get_bufferFetches the full buffer containig the generated PS data
ps_get_parameterGets certain parameters
ps_get_valueGets certain values
ps_hyphenateHyphenates a word
ps_include_fileReads an external file with raw PostScript code
ps_linetoDraws a line
ps_makespotcolorCreate spot color
ps_movetoSets current point
ps_newCreates a new PostScript document object
ps_open_fileOpens a file for output
ps_open_imageReads an image for later placement
ps_open_image_fileOpens image from file
ps_open_memory_imageTakes an GD image and returns an image for placement in a PS document
ps_place_imagePlaces image on the page
ps_rectDraws a rectangle
ps_restoreRestore previously save context
ps_rotateSets rotation factor
ps_saveSave current context
ps_scaleSets scaling factor
ps_set_border_colorSets color of border for annotations
ps_set_border_dashSets length of dashes for border of annotations
ps_set_border_styleSets border style of annotations
ps_set_infoSets information fields of document
ps_set_parameterSets certain parameters
ps_set_text_posSets position for text output
ps_set_valueSets certain values
ps_setcolorSets current color
ps_setdashSets appearance of a dashed line
ps_setflatSets flatness
ps_setfontSets font to use for following output
ps_setgraySets gray value
ps_setlinecapSets appearance of line ends
ps_setlinejoinSets how contected lines are joined
ps_setlinewidthSets width of a line
ps_setmiterlimitSets the miter limit
ps_setoverprintmodeSets overprint mode
ps_setpolydashSets appearance of a dashed line
ps_shadingCreates a shading for later use
ps_shading_patternCreates a pattern based on a shading
ps_shfillFills an area with a shading
ps_showOutput text
ps_show_boxedOutput text in a box
ps_show_xyOutput text at given position
ps_show_xy2Output text at position
ps_show2Output a text at current position
ps_string_geometryGets geometry of a string
ps_stringwidthGets width of a string
ps_strokeDraws the current path
ps_symbolOutput a glyph
ps_symbol_nameGets name of a glyph
ps_symbol_widthGets width of a glyph
ps_translateSets translation

Официальная страница: PS Functions.

Лист, координаты и состояние рисования

PostScript похож на сценарий для печатной машины: команды последовательно меняют текущую точку, цвет, толщину линии и шрифт. Координаты начинаются снизу слева; 72 пункта соответствуют одному дюйму. A4 обычно задают примерно как 595 × 842 пункта.

Как строится страница
  1. Создать документ и связать его с файлом
  2. Начать страницу заданного размера
  3. Выбрать шрифт и графические параметры
  4. Нарисовать текст и контуры
  5. Завершить страницу, документ и освободить ресурс

Практика: печатный бланк заказа

Сформировать одностраничный PostScript-бланк и проверить файлПример для указанного окружения
<?php
declare(strict_types=1);

if (!extension_loaded('ps')) {
    throw new RuntimeException('Нужно PECL ps и библиотека pslib');
}

$directory = __DIR__ . '/exports';
if (!is_dir($directory) && !mkdir($directory, 0775, true) && !is_dir($directory)) {
    throw new RuntimeException('Не создан каталог exports');
}
$path = $directory . '/order-42.ps';
$ps = ps_new();
if ($ps === false || !ps_open_file($ps, $path)) {
    throw new RuntimeException('Не удалось открыть PostScript-файл для записи');
}

ps_set_info($ps, 'Creator', 'Order service');
ps_set_info($ps, 'Title', 'Order 42');
if (!ps_begin_page($ps, 595.0, 842.0)) { // A4 в пунктах
    throw new RuntimeException('Не начата страница A4');
}

$font = ps_findfont($ps, 'Helvetica', 'builtin', false);
if ($font <= 0 || !ps_setfont($ps, $font, 18.0)) {
    throw new RuntimeException('Не загружен Helvetica');
}

ps_show_xy($ps, 'Order #42', 48.0, 790.0);
ps_setlinewidth($ps, 1.5);
ps_rect($ps, 48.0, 690.0, 499.0, 70.0);
ps_stroke($ps);
ps_setfont($ps, $font, 12.0);
ps_show_xy($ps, 'Total: 12 500 RUB', 64.0, 720.0);

ps_end_page($ps);
ps_close($ps);  // записывает trailer и число страниц
ps_delete($ps); // освобождает ресурс

$head = file_get_contents($path, false, null, 0, 11);
if (!is_string($head) || !str_starts_with($head, '%!PS-Adobe')) {
    throw new RuntimeException('Файл создан, но не похож на PostScript');
}
echo 'order-42.ps', PHP_EOL;
echo 'format=PostScript pages=1 bytes>0', PHP_EOL;

Это цельный жизненный цикл, а не разрозненный вызов: ресурс → файл → страница → шрифт → текст и контур → trailer → независимая проверка сигнатуры. Runtime требует pslib и здесь пока не заявлен.
Что должно получиться в совместимом окружении: order-42.ps
format=PostScript pages=1 bytes>0

Почему получается пустой или испорченный файл

ПроблемаДиагностика
0 байтПроверить результат ps_open_file(), права каталога и журнал PHP до отправки заголовков.
Шрифт не найденПроверить SearchPath, AFM/PFB и encoding; не скрывать warning внутри бинарного ответа.
Текст кракозябрамиПроверить доступные glyphs и кодировку выбранного шрифта; builtin Helvetica не покрывает весь Unicode.
Вторая страница выглядит иначеСостояние страницы сохраняется не полностью; шрифт, цвет и толщину задают осознанно для каждой страницы.
Файл скачался, но не открылсяПроверить сигнатуру, trailer, размер и открыть независимым PS/PDF-инструментом.

Предупреждение PHP, случайно выведенное перед бинарным телом, портит документ. В production ошибки пишут в журнал, а файл отдают только после успешной проверки.

Проблема из практикиКак она закрыта в руководстве
Текст в PostScript принимают за raw-команду управления принтером, хотя это разные протоколы и задачи.Практический бланк показывает видимый текст страницы и отдельно предупреждает о необходимости документированного raw-транспорта принтера.
Warning до бинарного ответа, ошибка каталога или шрифта приводит к пустому либо повреждённому файлу.Сценарий создаёт каталог, проверяет каждый этап жизненного цикла и сигнатуру файла, а диагностику направляет в журнал.

Как превратить отдельные вызовы в рабочий сервис

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

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

Функции и методы этой темы

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

ps_add_bookmarkДобавить закладку в текущем PostScript-документе.

PECL ps >= 1.1.0 · ps; pslib

ps_add_bookmark(resource $psdoc, string $text, int $parent = 0, int $open = 0): int

Добавить закладку в текущем PostScript-документе.

Официальная сигнатура. ps_add_bookmark(resource $psdoc, string $text, int $parent = 0, int $open = 0): int.

Доступность. Точная строка официального versions.xml: PECL ps >= 1.1.0.

ПараметрЧто приходит и зачем
resource $psdocОткрытый документ PS, созданный ps_new() и связанный с файлом через ps_open_file().
Точная формулировка PHP Manual

Resource identifier of the postscript file as returned by ps_new .

string $textТекст, который попадёт в документ или будет измерен.
Точная формулировка PHP Manual

The text used for displaying the bookmark.

int $parent = 0Идентификатор родительской закладки; 0 создаёт закладку верхнего уровня.
Точная формулировка PHP Manual

A bookmark previously created by this function which is used as the parent of the new bookmark.

int $open = 0Флаг поведения текущего объекта; передавайте bool либо документированное 0/1.
Точная формулировка PHP Manual

If open is unequal to zero the bookmark will be shown open by the pdf viewer.

Возврат. Тип int. Официальный текст: Return Values The returned value is a reference for the bookmark. It is only used if the bookmark shall be used as a parent. The value is greater zero if the function succeeds. In case of an error zero will be returned.

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

Минимальная операция: ps_add_bookmarkПример для указанного окружения
<?php
declare(strict_types=1);

if (!extension_loaded('ps')) {
    throw new RuntimeException('Нужно расширение ps');
}

$outputDir = __DIR__ . '/exports';
if (!is_dir($outputDir) && !mkdir($outputDir, 0775, true) && !is_dir($outputDir)) {
    throw new RuntimeException('Не создан каталог exports');
}
$outputPath = $outputDir . '/ps-add-bookmark-minimal.ps';
$ps = ps_new();
if ($ps === false) { throw new RuntimeException('PS-ресурс не создан'); }
if (!ps_open_file($ps, $outputPath)) {
    ps_delete($ps);
    throw new RuntimeException('PostScript-файл не открыт');
}
ps_begin_page($ps, 595.0, 842.0);
// PostScript-файл и страница уже открыты в этом самодостаточном примере.
$fontId = ps_findfont($ps, 'Helvetica', 'builtin', false);
if ($fontId <= 0) { throw new RuntimeException('Шрифт не найден'); }
ps_setfont($ps, $fontId, 12.0);
$result = ps_add_bookmark($ps, 'Order #42', 0, 0);
if ($result === false || $result === 0) { throw new RuntimeException('Идентификатор/значение не получено'); }
ps_end_page($ps);
ps_close($ps);
ps_delete($ps);
if (!is_file($outputPath) || filesize($outputPath) === 0) {
    throw new RuntimeException('PostScript-файл не создан');
}
echo basename($outputPath), ' bytes=', filesize($outputPath), PHP_EOL;

Для ps_add_bookmark показаны обязательное состояние и проверяемый эффект; официальный тип возврата — int. Пример сам создаёт ресурс, открывает файл и страницу, а затем завершает документ. Нативный runtime требует PECL ps и pslib; здесь заявлена только синтаксическая проверка.
Что должно получиться в совместимом окружении: Интерактивная область появится после преобразования PostScript в PDF. ps-add-bookmark-minimal.ps bytes=<положительное число>.

В составе документа: ps_add_bookmarkПример для указанного окружения
<?php
declare(strict_types=1);

if (!extension_loaded('ps')) {
    throw new RuntimeException('Нужно расширение ps');
}

$outputDir = __DIR__ . '/exports';
if (!is_dir($outputDir) && !mkdir($outputDir, 0775, true) && !is_dir($outputDir)) {
    throw new RuntimeException('Не создан каталог exports');
}
$outputPath = $outputDir . '/ps-add-bookmark-workflow.ps';
$ps = ps_new();
if ($ps === false) { throw new RuntimeException('PS-ресурс не создан'); }
if (!ps_open_file($ps, $outputPath)) {
    ps_delete($ps);
    throw new RuntimeException('PostScript-файл не открыт');
}
ps_begin_page($ps, 595.0, 842.0);
// PostScript-файл и страница уже открыты в этом самодостаточном примере.
$fontId = ps_findfont($ps, 'Helvetica', 'builtin', false);
if ($fontId <= 0) { throw new RuntimeException('Шрифт не найден'); }
ps_setfont($ps, $fontId, 14.0);
$ordersBookmark = ps_add_bookmark($ps, 'Заказы', 0, 1);
if ($ordersBookmark <= 0) { throw new RuntimeException('Родительская закладка не создана'); }
$result = ps_add_bookmark($ps, 'Delivery act #73', $ordersBookmark, 1);
if ($result === false || $result === 0) { throw new RuntimeException('Идентификатор/значение не получено'); }
ps_set_info($ps, 'Subject', 'Результат операции проверен');
ps_end_page($ps);
ps_close($ps);
ps_delete($ps);
if (!is_file($outputPath) || filesize($outputPath) === 0) {
    throw new RuntimeException('PostScript-файл не создан');
}
echo basename($outputPath), ' bytes=', filesize($outputPath), PHP_EOL;

Для ps_add_bookmark показаны обязательное состояние и проверяемый эффект; официальный тип возврата — int. Во втором варианте изменена задача/геометрия, а результат проверяют по готовому PS, не по синтетическому echo. Нативный runtime требует PECL ps и pslib; здесь заявлена только синтаксическая проверка.
Что должно получиться в совместимом окружении: Интерактивная область появится после преобразования PostScript в PDF. Результат связан с итоговым документом. ps-add-bookmark-workflow.ps bytes=<положительное число>.

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

Полный официальный текст карточки на английском

Purpose: Add bookmark to current page

Description Adds a bookmark for the current page. Bookmarks usually appear in PDF-Viewers left of the page in a hierarchical tree. Clicking on a bookmark will jump to the given page. [ps.note.visible]

Return: Return Values The returned value is a reference for the bookmark. It is only used if the bookmark shall be used as a parent. The value is greater zero if the function succeeds. In case of an error zero will be returned.

Связанные операции: ps_add_launchlink, ps_add_pdflink, ps_add_weblink.

ps_add_noteДобавить заметку в текущем PostScript-документе.

PECL ps >= 1.1.0 · ps; pslib

ps_add_note(resource $psdoc, float $llx, float $lly, float $urx, float $ury, string $contents, string $title, string $icon, int $open): bool

Добавить заметку в текущем PostScript-документе.

Официальная сигнатура. ps_add_note(resource $psdoc, float $llx, float $lly, float $urx, float $ury, string $contents, string $title, string $icon, int $open): bool.

Доступность. Точная строка официального versions.xml: PECL ps >= 1.1.0.

ПараметрЧто приходит и зачем
resource $psdocОткрытый документ PS, созданный ps_new() и связанный с файлом через ps_open_file().
Точная формулировка PHP Manual

Resource identifier of the postscript file as returned by ps_new .

float $llxКоордината X в пунктах PostScript; начало системы координат по умолчанию находится слева снизу.
Точная формулировка PHP Manual

The x-coordinate of the lower left corner.

float $llyКоордината Y в пунктах PostScript; значение растёт снизу вверх до преобразования системы координат.
Точная формулировка PHP Manual

The y-coordinate of the lower left corner.

float $urxКоордината X в пунктах PostScript; начало системы координат по умолчанию находится слева снизу.
Точная формулировка PHP Manual

The x-coordinate of the upper right corner.

float $uryКоордината Y в пунктах PostScript; значение растёт снизу вверх до преобразования системы координат.
Точная формулировка PHP Manual

The y-coordinate of the upper right corner.

string $contentsПараметр $contents типа string именно для операции ps_add_note.
Точная формулировка PHP Manual

The text of the note.

string $titleЗаголовок заметки, документа или другого объекта текущей операции.
Точная формулировка PHP Manual

The title of the note as displayed in the header of the note.

string $iconИмя значка PDF-заметки, поддерживаемое pslib/целевым PDF-процессором.
Точная формулировка PHP Manual

The icon shown if the note is folded. This parameter can be set to comment , insert , note , paragraph , newparagraph , key , or help .

int $openФлаг поведения текущего объекта; передавайте bool либо документированное 0/1.
Точная формулировка PHP Manual

If open is unequal to zero the note will be shown unfolded after opening the document with a pdf viewer.

Возврат. Тип bool. Официальный текст: Return Values Returns true on success.

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

Минимальная операция: ps_add_noteПример для указанного окружения
<?php
declare(strict_types=1);

if (!extension_loaded('ps')) {
    throw new RuntimeException('Нужно расширение ps');
}

$outputDir = __DIR__ . '/exports';
if (!is_dir($outputDir) && !mkdir($outputDir, 0775, true) && !is_dir($outputDir)) {
    throw new RuntimeException('Не создан каталог exports');
}
$outputPath = $outputDir . '/ps-add-note-minimal.ps';
$ps = ps_new();
if ($ps === false) { throw new RuntimeException('PS-ресурс не создан'); }
if (!ps_open_file($ps, $outputPath)) {
    ps_delete($ps);
    throw new RuntimeException('PostScript-файл не открыт');
}
ps_begin_page($ps, 595.0, 842.0);
// PostScript-файл и страница уже открыты в этом самодостаточном примере.
$fontId = ps_findfont($ps, 'Helvetica', 'builtin', false);
if ($fontId <= 0) { throw new RuntimeException('Шрифт не найден'); }
ps_setfont($ps, $fontId, 12.0);
$result = ps_add_note($ps, 48.0, 690.0, 240.0, 720.0, 'Проверьте сумму', 'Заказ 42', 'note', 0);
if ($result !== true) { throw new RuntimeException('Операция отклонена'); }
ps_end_page($ps);
ps_close($ps);
ps_delete($ps);
if (!is_file($outputPath) || filesize($outputPath) === 0) {
    throw new RuntimeException('PostScript-файл не создан');
}
echo basename($outputPath), ' bytes=', filesize($outputPath), PHP_EOL;

Для ps_add_note показаны обязательное состояние и проверяемый эффект; официальный тип возврата — bool. Пример сам создаёт ресурс, открывает файл и страницу, а затем завершает документ. Нативный runtime требует PECL ps и pslib; здесь заявлена только синтаксическая проверка.
Что должно получиться в совместимом окружении: Интерактивная область появится после преобразования PostScript в PDF. ps-add-note-minimal.ps bytes=<положительное число>.

В составе документа: ps_add_noteПример для указанного окружения
<?php
declare(strict_types=1);

if (!extension_loaded('ps')) {
    throw new RuntimeException('Нужно расширение ps');
}

$outputDir = __DIR__ . '/exports';
if (!is_dir($outputDir) && !mkdir($outputDir, 0775, true) && !is_dir($outputDir)) {
    throw new RuntimeException('Не создан каталог exports');
}
$outputPath = $outputDir . '/ps-add-note-workflow.ps';
$ps = ps_new();
if ($ps === false) { throw new RuntimeException('PS-ресурс не создан'); }
if (!ps_open_file($ps, $outputPath)) {
    ps_delete($ps);
    throw new RuntimeException('PostScript-файл не открыт');
}
ps_begin_page($ps, 595.0, 842.0);
// PostScript-файл и страница уже открыты в этом самодостаточном примере.
$fontId = ps_findfont($ps, 'Helvetica', 'builtin', false);
if ($fontId <= 0) { throw new RuntimeException('Шрифт не найден'); }
ps_setfont($ps, $fontId, 14.0);
$result = ps_add_note($ps, 64.0, 620.0, 310.0, 655.0, 'Подпишите акт', 'Доставка 73', 'comment', 1);
if ($result !== true) { throw new RuntimeException('Операция отклонена'); }
ps_setgray_stroke($ps, 0.4);
ps_rect($ps, 64.0, 620.0, 246.0, 35.0);
ps_stroke($ps);
ps_end_page($ps);
ps_close($ps);
ps_delete($ps);
if (!is_file($outputPath) || filesize($outputPath) === 0) {
    throw new RuntimeException('PostScript-файл не создан');
}
echo basename($outputPath), ' bytes=', filesize($outputPath), PHP_EOL;

Для ps_add_note показаны обязательное состояние и проверяемый эффект; официальный тип возврата — bool. Во втором варианте изменена задача/геометрия, а результат проверяют по готовому PS, не по синтетическому echo. Нативный runtime требует PECL ps и pslib; здесь заявлена только синтаксическая проверка.
Что должно получиться в совместимом окружении: Интерактивная область появится после преобразования PostScript в PDF. Граница интерактивной области отмечена на странице. ps-add-note-workflow.ps bytes=<положительное число>.

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

Полный официальный текст карточки на английском

Purpose: Adds note to current page

Description Adds a note at a certain position on the page. Notes are like little rectangular sheets with text on it, which can be placed anywhere on a page. They are shown either folded or unfolded. If folded, the specified icon is used as a placeholder. [ps.note.visible]

Return: Return Values Returns true on success.

Связанные операции: ps_add_pdflink, ps_add_launchlink, ps_add_locallink, ps_add_weblink.

ps_arcДобавить к текущему контуру дугу против часовой стрелки между двумя углами.

PECL ps >= 1.1.0 · ps; pslib

ps_arc(resource $psdoc, float $x, float $y, float $radius, float $alpha, float $beta): bool

Добавить к текущему контуру дугу против часовой стрелки между двумя углами.

Официальная сигнатура. ps_arc(resource $psdoc, float $x, float $y, float $radius, float $alpha, float $beta): bool.

Доступность. Точная строка официального versions.xml: PECL ps >= 1.1.0.

ПараметрЧто приходит и зачем
resource $psdocОткрытый документ PS, созданный ps_new() и связанный с файлом через ps_open_file().
Точная формулировка PHP Manual

Resource identifier of the postscript file as returned by ps_new .

float $xКоордината X в пунктах PostScript; начало системы координат по умолчанию находится слева снизу.
Точная формулировка PHP Manual

The x-coordinate of the circle's middle point.

float $yКоордината Y в пунктах PostScript; значение растёт снизу вверх до преобразования системы координат.
Точная формулировка PHP Manual

The y-coordinate of the circle's middle point.

float $radiusРазмер/шаг в единицах текущей операции; для геометрии PostScript обычно используются пункты.
Точная формулировка PHP Manual

The radius of the circle

float $alphaУгол в градусах; знак и направление задаются системой координат PostScript.
Точная формулировка PHP Manual

The start angle given in degrees.

float $betaУгол в градусах; знак и направление задаются системой координат PostScript.
Точная формулировка PHP Manual

The end angle given in degrees.

Возврат. Тип bool. Официальный текст: Return Values Returns true on success.

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

Минимальная операция: ps_arcПример для указанного окружения
<?php
declare(strict_types=1);

if (!extension_loaded('ps')) {
    throw new RuntimeException('Нужно расширение ps');
}

$outputDir = __DIR__ . '/exports';
if (!is_dir($outputDir) && !mkdir($outputDir, 0775, true) && !is_dir($outputDir)) {
    throw new RuntimeException('Не создан каталог exports');
}
$outputPath = $outputDir . '/ps-arc-minimal.ps';
$ps = ps_new();
if ($ps === false) { throw new RuntimeException('PS-ресурс не создан'); }
if (!ps_open_file($ps, $outputPath)) {
    ps_delete($ps);
    throw new RuntimeException('PostScript-файл не открыт');
}
ps_begin_page($ps, 595.0, 842.0);
// PostScript-файл и страница уже открыты в этом самодостаточном примере.
$fontId = ps_findfont($ps, 'Helvetica', 'builtin', false);
if ($fontId <= 0) { throw new RuntimeException('Шрифт не найден'); }
ps_setfont($ps, $fontId, 12.0);
ps_moveto($ps, 72.0, 700.0);
$result = ps_arc($ps, 100.0, 120.0, 36.0, 0.0, 180.0);
if ($result !== true) { throw new RuntimeException('Операция отклонена'); }
ps_stroke($ps);
ps_end_page($ps);
ps_close($ps);
ps_delete($ps);
if (!is_file($outputPath) || filesize($outputPath) === 0) {
    throw new RuntimeException('PostScript-файл не создан');
}
echo basename($outputPath), ' bytes=', filesize($outputPath), PHP_EOL;

Для ps_arc показаны обязательное состояние и проверяемый эффект; официальный тип возврата — bool. Пример сам создаёт ресурс, открывает файл и страницу, а затем завершает документ. Нативный runtime требует PECL ps и pslib; здесь заявлена только синтаксическая проверка.
Что должно получиться в совместимом окружении: На странице появляется соответствующий контур; он станет видимым после ps_stroke() или ps_fill(). ps-arc-minimal.ps bytes=<положительное число>.

В составе документа: ps_arcПример для указанного окружения
<?php
declare(strict_types=1);

if (!extension_loaded('ps')) {
    throw new RuntimeException('Нужно расширение ps');
}

$outputDir = __DIR__ . '/exports';
if (!is_dir($outputDir) && !mkdir($outputDir, 0775, true) && !is_dir($outputDir)) {
    throw new RuntimeException('Не создан каталог exports');
}
$outputPath = $outputDir . '/ps-arc-workflow.ps';
$ps = ps_new();
if ($ps === false) { throw new RuntimeException('PS-ресурс не создан'); }
if (!ps_open_file($ps, $outputPath)) {
    ps_delete($ps);
    throw new RuntimeException('PostScript-файл не открыт');
}
ps_begin_page($ps, 595.0, 842.0);
// PostScript-файл и страница уже открыты в этом самодостаточном примере.
$fontId = ps_findfont($ps, 'Helvetica', 'builtin', false);
if ($fontId <= 0) { throw new RuntimeException('Шрифт не найден'); }
ps_setfont($ps, $fontId, 14.0);
ps_moveto($ps, 72.0, 700.0);
$result = ps_arc($ps, 160.0, 240.0, 48.0, 45.0, 315.0);
if ($result !== true) { throw new RuntimeException('Операция отклонена'); }
ps_stroke($ps);
ps_show_xy($ps, 'Контрольный контур', 72.0, 670.0);
ps_end_page($ps);
ps_close($ps);
ps_delete($ps);
if (!is_file($outputPath) || filesize($outputPath) === 0) {
    throw new RuntimeException('PostScript-файл не создан');
}
echo basename($outputPath), ' bytes=', filesize($outputPath), PHP_EOL;

Для ps_arc показаны обязательное состояние и проверяемый эффект; официальный тип возврата — bool. Во втором варианте изменена задача/геометрия, а результат проверяют по готовому PS, не по синтетическому echo. Нативный runtime требует PECL ps и pslib; здесь заявлена только синтаксическая проверка.
Что должно получиться в совместимом окружении: На странице появляется соответствующий контур; он станет видимым после ps_stroke() или ps_fill(). Рядом с контуром напечатана контрольная подпись. ps-arc-workflow.ps bytes=<положительное число>.

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

Полный официальный текст карточки на английском

Purpose: Draws an arc counterclockwise

Description Draws a portion of a circle with at middle point at ( x , y ). The arc starts at an angle of alpha and ends at an angle of beta . It is drawn counterclockwise (use ps_arcn to draw clockwise). The subpath added to the current path starts on the arc at angle alpha and ends on the arc at angle beta .

Return: Return Values Returns true on success.

Связанные операции: ps_arcn.

ps_arcnДобавить к текущему контуру дугу по часовой стрелке между двумя углами.

PECL ps >= 1.1.0 · ps; pslib

ps_arcn(resource $psdoc, float $x, float $y, float $radius, float $alpha, float $beta): bool

Добавить к текущему контуру дугу по часовой стрелке между двумя углами.

Официальная сигнатура. ps_arcn(resource $psdoc, float $x, float $y, float $radius, float $alpha, float $beta): bool.

Доступность. Точная строка официального versions.xml: PECL ps >= 1.1.0.

ПараметрЧто приходит и зачем
resource $psdocОткрытый документ PS, созданный ps_new() и связанный с файлом через ps_open_file().
Точная формулировка PHP Manual

Resource identifier of the postscript file as returned by ps_new .

float $xКоордината X в пунктах PostScript; начало системы координат по умолчанию находится слева снизу.
Точная формулировка PHP Manual

The x-coordinate of the circle's middle point.

float $yКоордината Y в пунктах PostScript; значение растёт снизу вверх до преобразования системы координат.
Точная формулировка PHP Manual

The y-coordinate of the circle's middle point.

float $radiusРазмер/шаг в единицах текущей операции; для геометрии PostScript обычно используются пункты.
Точная формулировка PHP Manual

The radius of the circle

float $alphaУгол в градусах; знак и направление задаются системой координат PostScript.
Точная формулировка PHP Manual

The starting angle given in degrees.

float $betaУгол в градусах; знак и направление задаются системой координат PostScript.
Точная формулировка PHP Manual

The end angle given in degrees.

Возврат. Тип bool. Официальный текст: Return Values Returns true on success.

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

Минимальная операция: ps_arcnПример для указанного окружения
<?php
declare(strict_types=1);

if (!extension_loaded('ps')) {
    throw new RuntimeException('Нужно расширение ps');
}

$outputDir = __DIR__ . '/exports';
if (!is_dir($outputDir) && !mkdir($outputDir, 0775, true) && !is_dir($outputDir)) {
    throw new RuntimeException('Не создан каталог exports');
}
$outputPath = $outputDir . '/ps-arcn-minimal.ps';
$ps = ps_new();
if ($ps === false) { throw new RuntimeException('PS-ресурс не создан'); }
if (!ps_open_file($ps, $outputPath)) {
    ps_delete($ps);
    throw new RuntimeException('PostScript-файл не открыт');
}
ps_begin_page($ps, 595.0, 842.0);
// PostScript-файл и страница уже открыты в этом самодостаточном примере.
$fontId = ps_findfont($ps, 'Helvetica', 'builtin', false);
if ($fontId <= 0) { throw new RuntimeException('Шрифт не найден'); }
ps_setfont($ps, $fontId, 12.0);
ps_moveto($ps, 72.0, 700.0);
$result = ps_arcn($ps, 100.0, 120.0, 36.0, 0.0, 180.0);
if ($result !== true) { throw new RuntimeException('Операция отклонена'); }
ps_stroke($ps);
ps_end_page($ps);
ps_close($ps);
ps_delete($ps);
if (!is_file($outputPath) || filesize($outputPath) === 0) {
    throw new RuntimeException('PostScript-файл не создан');
}
echo basename($outputPath), ' bytes=', filesize($outputPath), PHP_EOL;

Для ps_arcn показаны обязательное состояние и проверяемый эффект; официальный тип возврата — bool. Пример сам создаёт ресурс, открывает файл и страницу, а затем завершает документ. Нативный runtime требует PECL ps и pslib; здесь заявлена только синтаксическая проверка.
Что должно получиться в совместимом окружении: На странице появляется соответствующий контур; он станет видимым после ps_stroke() или ps_fill(). ps-arcn-minimal.ps bytes=<положительное число>.

В составе документа: ps_arcnПример для указанного окружения
<?php
declare(strict_types=1);

if (!extension_loaded('ps')) {
    throw new RuntimeException('Нужно расширение ps');
}

$outputDir = __DIR__ . '/exports';
if (!is_dir($outputDir) && !mkdir($outputDir, 0775, true) && !is_dir($outputDir)) {
    throw new RuntimeException('Не создан каталог exports');
}
$outputPath = $outputDir . '/ps-arcn-workflow.ps';
$ps = ps_new();
if ($ps === false) { throw new RuntimeException('PS-ресурс не создан'); }
if (!ps_open_file($ps, $outputPath)) {
    ps_delete($ps);
    throw new RuntimeException('PostScript-файл не открыт');
}
ps_begin_page($ps, 595.0, 842.0);
// PostScript-файл и страница уже открыты в этом самодостаточном примере.
$fontId = ps_findfont($ps, 'Helvetica', 'builtin', false);
if ($fontId <= 0) { throw new RuntimeException('Шрифт не найден'); }
ps_setfont($ps, $fontId, 14.0);
ps_moveto($ps, 72.0, 700.0);
$result = ps_arcn($ps, 160.0, 240.0, 48.0, 45.0, 315.0);
if ($result !== true) { throw new RuntimeException('Операция отклонена'); }
ps_stroke($ps);
ps_show_xy($ps, 'Контрольный контур', 72.0, 670.0);
ps_end_page($ps);
ps_close($ps);
ps_delete($ps);
if (!is_file($outputPath) || filesize($outputPath) === 0) {
    throw new RuntimeException('PostScript-файл не создан');
}
echo basename($outputPath), ' bytes=', filesize($outputPath), PHP_EOL;

Для ps_arcn показаны обязательное состояние и проверяемый эффект; официальный тип возврата — bool. Во втором варианте изменена задача/геометрия, а результат проверяют по готовому PS, не по синтетическому echo. Нативный runtime требует PECL ps и pslib; здесь заявлена только синтаксическая проверка.
Что должно получиться в совместимом окружении: На странице появляется соответствующий контур; он станет видимым после ps_stroke() или ps_fill(). Рядом с контуром напечатана контрольная подпись. ps-arcn-workflow.ps bytes=<положительное число>.

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

Полный официальный текст карточки на английском

Purpose: Draws an arc clockwise

Description Draws a portion of a circle with at middle point at ( x , y ). The arc starts at an angle of alpha and ends at an angle of beta . It is drawn clockwise (use ps_arc to draw counterclockwise). The subpath added to the current path starts on the arc at angle beta and ends on the arc at angle alpha .

Return: Return Values Returns true on success.

Связанные операции: ps_arc.

ps_begin_pageНачать страницу в текущем PostScript-документе.

PECL ps >= 1.1.0 · ps; pslib

ps_begin_page(resource $psdoc, float $width, float $height): bool

Начать страницу в текущем PostScript-документе.

Официальная сигнатура. ps_begin_page(resource $psdoc, float $width, float $height): bool.

Доступность. Точная строка официального versions.xml: PECL ps >= 1.1.0.

ПараметрЧто приходит и зачем
resource $psdocОткрытый документ PS, созданный ps_new() и связанный с файлом через ps_open_file().
Точная формулировка PHP Manual

Resource identifier of the postscript file as returned by ps_new .

float $widthРазмер/шаг в единицах текущей операции; для геометрии PostScript обычно используются пункты.
Точная формулировка PHP Manual

The width of the page in pixel, e.g. 596 for A4 format.

float $heightРазмер/шаг в единицах текущей операции; для геометрии PostScript обычно используются пункты.
Точная формулировка PHP Manual

The height of the page in pixel, e.g. 842 for A4 format.

Возврат. Тип bool. Официальный текст: Return Values Returns true on success.

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

Минимальная операция: ps_begin_pageПример для указанного окружения
<?php
declare(strict_types=1);

if (!extension_loaded('ps')) {
    throw new RuntimeException('Нужно расширение ps');
}

$outputDir = __DIR__ . '/exports';
if (!is_dir($outputDir) && !mkdir($outputDir, 0775, true) && !is_dir($outputDir)) {
    throw new RuntimeException('Не создан каталог exports');
}
$ps = ps_new();
if ($ps === false) { throw new RuntimeException('PS-ресурс не создан'); }
if (!ps_open_file($ps, __DIR__ . '/exports/order-42.ps')) { throw new RuntimeException('Файл не открыт'); }
$result = ps_begin_page($ps, 595.0, 842.0);
ps_end_page($ps);
ps_close($ps);
ps_delete($ps);
echo 'lifecycle=ok', PHP_EOL;

Для ps_begin_page показаны обязательное состояние и проверяемый эффект; официальный тип возврата — bool. Пример сам создаёт ресурс, открывает файл и страницу, а затем завершает документ. Нативный runtime требует PECL ps и pslib; здесь заявлена только синтаксическая проверка.
Что должно получиться в совместимом окружении: lifecycle=ok

В составе документа: ps_begin_pageПример для указанного окружения
<?php
declare(strict_types=1);

if (!extension_loaded('ps')) {
    throw new RuntimeException('Нужно расширение ps');
}

$outputDir = __DIR__ . '/exports';
if (!is_dir($outputDir) && !mkdir($outputDir, 0775, true) && !is_dir($outputDir)) {
    throw new RuntimeException('Не создан каталог exports');
}
$ps = ps_new();
if ($ps === false) { throw new RuntimeException('PS-ресурс не создан'); }
if (!ps_open_file($ps, __DIR__ . '/exports/delivery-73.ps')) { throw new RuntimeException('Файл не открыт'); }
$result = ps_begin_page($ps, 420.0, 297.0);
$fontId = ps_findfont($ps, 'Helvetica', 'builtin', false);
ps_setfont($ps, $fontId, 18.0);
ps_show_xy($ps, 'Первая страница', 64.0, 760.0);
ps_end_page($ps);
ps_close($ps);
ps_delete($ps);
echo 'lifecycle=ok', PHP_EOL;

Для ps_begin_page показаны обязательное состояние и проверяемый эффект; официальный тип возврата — bool. Во втором варианте изменена задача/геометрия, а результат проверяют по готовому PS, не по синтетическому echo. Нативный runtime требует PECL ps и pslib; здесь заявлена только синтаксическая проверка.
Что должно получиться в совместимом окружении: lifecycle=ok В практическом варианте жизненный цикл включает видимый объект страницы.

Отказ и граница проверки. успех подтверждает только строгое true. Соблюдайте порядок resource → output → page → page end → document close → delete и не продолжайте после отказа предыдущего шага.

Полный официальный текст карточки на английском

Purpose: Start a new page

Description Starts a new page. Although the parameters width and height imply a different page size for each page, this is not possible in PostScript. The first call of ps_begin_page will set the page size for the whole document. Consecutive calls will have no effect, except for creating a new page. The situation is different if you intent to convert the PostScript document into PDF. This function places pdfmarks into the document which can set the size for each page indiviually. The resulting PDF document will have different page sizes. Though PostScript does not know different page sizes, pslib places a bounding box for each page into the document. This size is evaluated by some PostScript viewers and will have precedence over the BoundingBox in the Header of the document. This can lead to unexpected results when you set a BoundingBox whose lower left corner is not (0, 0), because the bounding box of the page will always have a lower left corner (0, 0) and overwrites the global setting. Each page is encapsulated into save/restore. This means, that most of the settings made on one page will not be retained on the next page. If there is up to the first call of ps_begin_page no call of ps_findfont , then the header of the PostScript document will be output and the bounding box will be set to the size of the first page. The lower left corner of the bounding box is set to (0, 0). If ps_findfont was called before, then the header has been output already, and the document will not have a valid bounding box. In order to prevent this, one should call ps_set_info to set the info field BoundingBox and possibly Orientation before any ps_findfont or ps_begin_page calls. Up to version 0.2.6 of pslib, this function will always overwrite the BoundingBox and Orientation, if it has been set before with ps_set_info and ps_findfont has not been called before.

Return: Return Values Returns true on success.

Связанные операции: ps_end_page, ps_findfont, ps_set_info.

ps_begin_patternНачать узор в текущем PostScript-документе.

PECL ps >= 1.2.0 · ps; pslib

ps_begin_pattern(resource $psdoc, float $width, float $height, float $xstep, float $ystep, int $painttype): int|false

Начать узор в текущем PostScript-документе.

Официальная сигнатура. ps_begin_pattern(resource $psdoc, float $width, float $height, float $xstep, float $ystep, int $painttype): int|false.

Доступность. Точная строка официального versions.xml: PECL ps >= 1.2.0.

ПараметрЧто приходит и зачем
resource $psdocОткрытый документ PS, созданный ps_new() и связанный с файлом через ps_open_file().
Точная формулировка PHP Manual

Resource identifier of the postscript file as returned by ps_new .

float $widthРазмер/шаг в единицах текущей операции; для геометрии PostScript обычно используются пункты.
Точная формулировка PHP Manual

The width of the pattern in pixel.

float $heightРазмер/шаг в единицах текущей операции; для геометрии PostScript обычно используются пункты.
Точная формулировка PHP Manual

The height of the pattern in pixel.

float $xstepРазмер/шаг в единицах текущей операции; для геометрии PostScript обычно используются пункты.
Точная формулировка PHP Manual

The distance in pixel of placements of the pattern in horizontal direction.

float $ystepРазмер/шаг в единицах текущей операции; для геометрии PostScript обычно используются пункты.
Точная формулировка PHP Manual

The distance in pixel of placements of the pattern in vertical direction.

int $painttypeРежим окрашивания PostScript-узора согласно pslib.
Точная формулировка PHP Manual

Must be 1 or 2.

Возврат. Тип int|false. Официальный текст: Return Values The identifier of the pattern [return.falseforfailure].

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

Минимальная операция: ps_begin_patternПример для указанного окружения
<?php
declare(strict_types=1);

if (!extension_loaded('ps')) {
    throw new RuntimeException('Нужно расширение ps');
}

$outputDir = __DIR__ . '/exports';
if (!is_dir($outputDir) && !mkdir($outputDir, 0775, true) && !is_dir($outputDir)) {
    throw new RuntimeException('Не создан каталог exports');
}
$outputPath = $outputDir . '/ps-begin-pattern-minimal.ps';
$ps = ps_new();
if ($ps === false) { throw new RuntimeException('PS-ресурс не создан'); }
if (!ps_open_file($ps, $outputPath)) {
    ps_delete($ps);
    throw new RuntimeException('PostScript-файл не открыт');
}
ps_begin_page($ps, 595.0, 842.0);
// PostScript-файл и страница уже открыты в этом самодостаточном примере.
$fontId = ps_findfont($ps, 'Helvetica', 'builtin', false);
if ($fontId <= 0) { throw new RuntimeException('Шрифт не найден'); }
ps_setfont($ps, $fontId, 12.0);
$result = ps_begin_pattern($ps, 595.0, 842.0, 20.0, 20.0, 1);
if ($result === false || $result === 0) { throw new RuntimeException('Идентификатор/значение не получено'); }
ps_end_pattern($ps);
ps_end_page($ps);
ps_close($ps);
ps_delete($ps);
if (!is_file($outputPath) || filesize($outputPath) === 0) {
    throw new RuntimeException('PostScript-файл не создан');
}
echo basename($outputPath), ' bytes=', filesize($outputPath), PHP_EOL;

Для ps_begin_pattern показаны обязательное состояние и проверяемый эффект; официальный тип возврата — int|false. Пример сам создаёт ресурс, открывает файл и страницу, а затем завершает документ. Нативный runtime требует PECL ps и pslib; здесь заявлена только синтаксическая проверка.
Что должно получиться в совместимом окружении: Изменение видно в итоговом PostScript после завершения страницы и документа. ps-begin-pattern-minimal.ps bytes=<положительное число>.

В составе документа: ps_begin_patternПример для указанного окружения
<?php
declare(strict_types=1);

if (!extension_loaded('ps')) {
    throw new RuntimeException('Нужно расширение ps');
}

$outputDir = __DIR__ . '/exports';
if (!is_dir($outputDir) && !mkdir($outputDir, 0775, true) && !is_dir($outputDir)) {
    throw new RuntimeException('Не создан каталог exports');
}
$outputPath = $outputDir . '/ps-begin-pattern-workflow.ps';
$ps = ps_new();
if ($ps === false) { throw new RuntimeException('PS-ресурс не создан'); }
if (!ps_open_file($ps, $outputPath)) {
    ps_delete($ps);
    throw new RuntimeException('PostScript-файл не открыт');
}
ps_begin_page($ps, 595.0, 842.0);
// PostScript-файл и страница уже открыты в этом самодостаточном примере.
$fontId = ps_findfont($ps, 'Helvetica', 'builtin', false);
if ($fontId <= 0) { throw new RuntimeException('Шрифт не найден'); }
ps_setfont($ps, $fontId, 14.0);
$result = ps_begin_pattern($ps, 420.0, 297.0, 28.0, 28.0, 2);
if ($result === false || $result === 0) { throw new RuntimeException('Идентификатор/значение не получено'); }
ps_circle($ps, 10.0, 10.0, 4.0);
ps_fill($ps);
ps_end_pattern($ps);
ps_end_page($ps);
ps_close($ps);
ps_delete($ps);
if (!is_file($outputPath) || filesize($outputPath) === 0) {
    throw new RuntimeException('PostScript-файл не создан');
}
echo basename($outputPath), ' bytes=', filesize($outputPath), PHP_EOL;

Для ps_begin_pattern показаны обязательное состояние и проверяемый эффект; официальный тип возврата — int|false. Во втором варианте изменена задача/геометрия, а результат проверяют по готовому PS, не по синтетическому echo. Нативный runtime требует PECL ps и pslib; здесь заявлена только синтаксическая проверка.
Что должно получиться в совместимом окружении: Изменение видно в итоговом PostScript после завершения страницы и документа. Начатый узор заполнен элементом и корректно завершён. ps-begin-pattern-workflow.ps bytes=<положительное число>.

Отказ и граница проверки. false — документированный сигнал отказа. Начатый шаблон/узор нужно завершить, полученный id проверить и применить до закрытия страницы.

Полный официальный текст карточки на английском

Purpose: Start a new pattern

Description Starts a new pattern. A pattern is like a page containing e.g. a drawing which can be used for filling areas. It is used like a color by calling ps_setcolor and setting the color space to pattern .

Return: Return Values The identifier of the pattern [return.falseforfailure].

Связанные операции: ps_end_pattern, ps_setcolor, ps_shading_pattern.

ps_begin_templateНачать шаблон в текущем PostScript-документе.

PECL ps >= 1.2.0 · ps; pslib

ps_begin_template(resource $psdoc, float $width, float $height): int

Начать шаблон в текущем PostScript-документе.

Официальная сигнатура. ps_begin_template(resource $psdoc, float $width, float $height): int.

Доступность. Точная строка официального versions.xml: PECL ps >= 1.2.0.

ПараметрЧто приходит и зачем
resource $psdocОткрытый документ PS, созданный ps_new() и связанный с файлом через ps_open_file().
Точная формулировка PHP Manual

Resource identifier of the postscript file as returned by ps_new .

float $widthРазмер/шаг в единицах текущей операции; для геометрии PostScript обычно используются пункты.
Точная формулировка PHP Manual

The width of the template in pixel.

float $heightРазмер/шаг в единицах текущей операции; для геометрии PostScript обычно используются пункты.
Точная формулировка PHP Manual

The height of the template in pixel.

Возврат. Тип int. Официальный текст: Return Values Returns true on success.

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

Минимальная операция: ps_begin_templateПример для указанного окружения
<?php
declare(strict_types=1);

if (!extension_loaded('ps')) {
    throw new RuntimeException('Нужно расширение ps');
}

$outputDir = __DIR__ . '/exports';
if (!is_dir($outputDir) && !mkdir($outputDir, 0775, true) && !is_dir($outputDir)) {
    throw new RuntimeException('Не создан каталог exports');
}
$outputPath = $outputDir . '/ps-begin-template-minimal.ps';
$ps = ps_new();
if ($ps === false) { throw new RuntimeException('PS-ресурс не создан'); }
if (!ps_open_file($ps, $outputPath)) {
    ps_delete($ps);
    throw new RuntimeException('PostScript-файл не открыт');
}
ps_begin_page($ps, 595.0, 842.0);
// PostScript-файл и страница уже открыты в этом самодостаточном примере.
$fontId = ps_findfont($ps, 'Helvetica', 'builtin', false);
if ($fontId <= 0) { throw new RuntimeException('Шрифт не найден'); }
ps_setfont($ps, $fontId, 12.0);
$result = ps_begin_template($ps, 595.0, 842.0);
if ($result === false || $result === 0) { throw new RuntimeException('Идентификатор/значение не получено'); }
ps_end_template($ps);
ps_end_page($ps);
ps_close($ps);
ps_delete($ps);
if (!is_file($outputPath) || filesize($outputPath) === 0) {
    throw new RuntimeException('PostScript-файл не создан');
}
echo basename($outputPath), ' bytes=', filesize($outputPath), PHP_EOL;

Для ps_begin_template показаны обязательное состояние и проверяемый эффект; официальный тип возврата — int. Пример сам создаёт ресурс, открывает файл и страницу, а затем завершает документ. Нативный runtime требует PECL ps и pslib; здесь заявлена только синтаксическая проверка.
Что должно получиться в совместимом окружении: Изменение видно в итоговом PostScript после завершения страницы и документа. ps-begin-template-minimal.ps bytes=<положительное число>.

В составе документа: ps_begin_templateПример для указанного окружения
<?php
declare(strict_types=1);

if (!extension_loaded('ps')) {
    throw new RuntimeException('Нужно расширение ps');
}

$outputDir = __DIR__ . '/exports';
if (!is_dir($outputDir) && !mkdir($outputDir, 0775, true) && !is_dir($outputDir)) {
    throw new RuntimeException('Не создан каталог exports');
}
$outputPath = $outputDir . '/ps-begin-template-workflow.ps';
$ps = ps_new();
if ($ps === false) { throw new RuntimeException('PS-ресурс не создан'); }
if (!ps_open_file($ps, $outputPath)) {
    ps_delete($ps);
    throw new RuntimeException('PostScript-файл не открыт');
}
ps_begin_page($ps, 595.0, 842.0);
// PostScript-файл и страница уже открыты в этом самодостаточном примере.
$fontId = ps_findfont($ps, 'Helvetica', 'builtin', false);
if ($fontId <= 0) { throw new RuntimeException('Шрифт не найден'); }
ps_setfont($ps, $fontId, 14.0);
$result = ps_begin_template($ps, 420.0, 297.0);
if ($result === false || $result === 0) { throw new RuntimeException('Идентификатор/значение не получено'); }
ps_show_xy($ps, 'Шаблон', 2.0, 12.0);
ps_end_template($ps);
ps_end_page($ps);
ps_close($ps);
ps_delete($ps);
if (!is_file($outputPath) || filesize($outputPath) === 0) {
    throw new RuntimeException('PostScript-файл не создан');
}
echo basename($outputPath), ' bytes=', filesize($outputPath), PHP_EOL;

Для ps_begin_template показаны обязательное состояние и проверяемый эффект; официальный тип возврата — int. Во втором варианте изменена задача/геометрия, а результат проверяют по готовому PS, не по синтетическому echo. Нативный runtime требует PECL ps и pslib; здесь заявлена только синтаксическая проверка.
Что должно получиться в совместимом окружении: Изменение видно в итоговом PostScript после завершения страницы и документа. Начатый шаблон получил содержимое и корректно завершён. ps-begin-template-workflow.ps bytes=<положительное число>.

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

Полный официальный текст карточки на английском

Purpose: Start a new template

Description Starts a new template. A template is called a form in the postscript language. It is created similar to a pattern but used like an image. Templates are often used for drawings which are placed several times through out the document, e.g. like a company logo. All drawing functions may be used within a template. The template will not be drawn until it is placed by ps_place_image .

Return: Return Values Returns true on success.

Связанные операции: ps_end_template.

ps_circleНарисовать окружность в текущем PostScript-документе.

PECL ps >= 1.1.0 · ps; pslib

ps_circle(resource $psdoc, float $x, float $y, float $radius): bool

Нарисовать окружность в текущем PostScript-документе.

Официальная сигнатура. ps_circle(resource $psdoc, float $x, float $y, float $radius): bool.

Доступность. Точная строка официального versions.xml: PECL ps >= 1.1.0.

ПараметрЧто приходит и зачем
resource $psdocОткрытый документ PS, созданный ps_new() и связанный с файлом через ps_open_file().
Точная формулировка PHP Manual

Resource identifier of the postscript file as returned by ps_new .

float $xКоордината X в пунктах PostScript; начало системы координат по умолчанию находится слева снизу.
Точная формулировка PHP Manual

The x-coordinate of the circle's middle point.

float $yКоордината Y в пунктах PostScript; значение растёт снизу вверх до преобразования системы координат.
Точная формулировка PHP Manual

The y-coordinate of the circle's middle point.

float $radiusРазмер/шаг в единицах текущей операции; для геометрии PostScript обычно используются пункты.
Точная формулировка PHP Manual

The radius of the circle

Возврат. Тип bool. Официальный текст: Return Values Returns true on success.

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

Минимальная операция: ps_circleПример для указанного окружения
<?php
declare(strict_types=1);

if (!extension_loaded('ps')) {
    throw new RuntimeException('Нужно расширение ps');
}

$outputDir = __DIR__ . '/exports';
if (!is_dir($outputDir) && !mkdir($outputDir, 0775, true) && !is_dir($outputDir)) {
    throw new RuntimeException('Не создан каталог exports');
}
$outputPath = $outputDir . '/ps-circle-minimal.ps';
$ps = ps_new();
if ($ps === false) { throw new RuntimeException('PS-ресурс не создан'); }
if (!ps_open_file($ps, $outputPath)) {
    ps_delete($ps);
    throw new RuntimeException('PostScript-файл не открыт');
}
ps_begin_page($ps, 595.0, 842.0);
// PostScript-файл и страница уже открыты в этом самодостаточном примере.
$fontId = ps_findfont($ps, 'Helvetica', 'builtin', false);
if ($fontId <= 0) { throw new RuntimeException('Шрифт не найден'); }
ps_setfont($ps, $fontId, 12.0);
ps_moveto($ps, 72.0, 700.0);
$result = ps_circle($ps, 100.0, 120.0, 36.0);
if ($result !== true) { throw new RuntimeException('Операция отклонена'); }
ps_stroke($ps);
ps_end_page($ps);
ps_close($ps);
ps_delete($ps);
if (!is_file($outputPath) || filesize($outputPath) === 0) {
    throw new RuntimeException('PostScript-файл не создан');
}
echo basename($outputPath), ' bytes=', filesize($outputPath), PHP_EOL;

Для ps_circle показаны обязательное состояние и проверяемый эффект; официальный тип возврата — bool. Пример сам создаёт ресурс, открывает файл и страницу, а затем завершает документ. Нативный runtime требует PECL ps и pslib; здесь заявлена только синтаксическая проверка.
Что должно получиться в совместимом окружении: На странице появляется соответствующий контур; он станет видимым после ps_stroke() или ps_fill(). ps-circle-minimal.ps bytes=<положительное число>.

В составе документа: ps_circleПример для указанного окружения
<?php
declare(strict_types=1);

if (!extension_loaded('ps')) {
    throw new RuntimeException('Нужно расширение ps');
}

$outputDir = __DIR__ . '/exports';
if (!is_dir($outputDir) && !mkdir($outputDir, 0775, true) && !is_dir($outputDir)) {
    throw new RuntimeException('Не создан каталог exports');
}
$outputPath = $outputDir . '/ps-circle-workflow.ps';
$ps = ps_new();
if ($ps === false) { throw new RuntimeException('PS-ресурс не создан'); }
if (!ps_open_file($ps, $outputPath)) {
    ps_delete($ps);
    throw new RuntimeException('PostScript-файл не открыт');
}
ps_begin_page($ps, 595.0, 842.0);
// PostScript-файл и страница уже открыты в этом самодостаточном примере.
$fontId = ps_findfont($ps, 'Helvetica', 'builtin', false);
if ($fontId <= 0) { throw new RuntimeException('Шрифт не найден'); }
ps_setfont($ps, $fontId, 14.0);
ps_moveto($ps, 72.0, 700.0);
$result = ps_circle($ps, 160.0, 240.0, 48.0);
if ($result !== true) { throw new RuntimeException('Операция отклонена'); }
ps_stroke($ps);
ps_show_xy($ps, 'Контрольный контур', 72.0, 670.0);
ps_end_page($ps);
ps_close($ps);
ps_delete($ps);
if (!is_file($outputPath) || filesize($outputPath) === 0) {
    throw new RuntimeException('PostScript-файл не создан');
}
echo basename($outputPath), ' bytes=', filesize($outputPath), PHP_EOL;

Для ps_circle показаны обязательное состояние и проверяемый эффект; официальный тип возврата — bool. Во втором варианте изменена задача/геометрия, а результат проверяют по готовому PS, не по синтетическому echo. Нативный runtime требует PECL ps и pslib; здесь заявлена только синтаксическая проверка.
Что должно получиться в совместимом окружении: На странице появляется соответствующий контур; он станет видимым после ps_stroke() или ps_fill(). Рядом с контуром напечатана контрольная подпись. ps-circle-workflow.ps bytes=<положительное число>.

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

Полный официальный текст карточки на английском

Purpose: Draws a circle

Description Draws a circle with its middle point at ( x , y ). The circle starts and ends at position ( x + radius , y ). If this function is called outside a path it will start a new path. If it is called within a path it will add the circle as a subpath. If the last drawing operation does not end in point ( x + radius , y ) then there will be a gap in the path.

Return: Return Values Returns true on success.

Связанные операции: ps_arc, ps_arcn.

ps_clipОграничить область рисования в текущем PostScript-документе.

PECL ps >= 1.1.0 · ps; pslib

ps_clip(resource $psdoc): bool

Ограничить область рисования в текущем PostScript-документе.

Официальная сигнатура. ps_clip(resource $psdoc): bool.

Доступность. Точная строка официального versions.xml: PECL ps >= 1.1.0.

ПараметрЧто приходит и зачем
resource $psdocОткрытый документ PS, созданный ps_new() и связанный с файлом через ps_open_file().
Точная формулировка PHP Manual

Resource identifier of the postscript file as returned by ps_new .

Возврат. Тип bool. Официальный текст: Return Values Returns true on success.

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

Минимальная операция: ps_clipПример для указанного окружения
<?php
declare(strict_types=1);

if (!extension_loaded('ps')) {
    throw new RuntimeException('Нужно расширение ps');
}

$outputDir = __DIR__ . '/exports';
if (!is_dir($outputDir) && !mkdir($outputDir, 0775, true) && !is_dir($outputDir)) {
    throw new RuntimeException('Не создан каталог exports');
}
$outputPath = $outputDir . '/ps-clip-minimal.ps';
$ps = ps_new();
if ($ps === false) { throw new RuntimeException('PS-ресурс не создан'); }
if (!ps_open_file($ps, $outputPath)) {
    ps_delete($ps);
    throw new RuntimeException('PostScript-файл не открыт');
}
ps_begin_page($ps, 595.0, 842.0);
// PostScript-файл и страница уже открыты в этом самодостаточном примере.
$fontId = ps_findfont($ps, 'Helvetica', 'builtin', false);
if ($fontId <= 0) { throw new RuntimeException('Шрифт не найден'); }
ps_setfont($ps, $fontId, 12.0);
ps_rect($ps, 72.0, 500.0, 300.0, 160.0);
$result = ps_clip($ps);
if ($result !== true) { throw new RuntimeException('Операция отклонена'); }
ps_end_page($ps);
ps_close($ps);
ps_delete($ps);
if (!is_file($outputPath) || filesize($outputPath) === 0) {
    throw new RuntimeException('PostScript-файл не создан');
}
echo basename($outputPath), ' bytes=', filesize($outputPath), PHP_EOL;

Для ps_clip показаны обязательное состояние и проверяемый эффект; официальный тип возврата — bool. Пример сам создаёт ресурс, открывает файл и страницу, а затем завершает документ. Нативный runtime требует PECL ps и pslib; здесь заявлена только синтаксическая проверка.
Что должно получиться в совместимом окружении: Последующее рисование ограничено заданным прямоугольным контуром. ps-clip-minimal.ps bytes=<положительное число>.

В составе документа: ps_clipПример для указанного окружения
<?php
declare(strict_types=1);

if (!extension_loaded('ps')) {
    throw new RuntimeException('Нужно расширение ps');
}

$outputDir = __DIR__ . '/exports';
if (!is_dir($outputDir) && !mkdir($outputDir, 0775, true) && !is_dir($outputDir)) {
    throw new RuntimeException('Не создан каталог exports');
}
$outputPath = $outputDir . '/ps-clip-workflow.ps';
$ps = ps_new();
if ($ps === false) { throw new RuntimeException('PS-ресурс не создан'); }
if (!ps_open_file($ps, $outputPath)) {
    ps_delete($ps);
    throw new RuntimeException('PostScript-файл не открыт');
}
ps_begin_page($ps, 595.0, 842.0);
// PostScript-файл и страница уже открыты в этом самодостаточном примере.
$fontId = ps_findfont($ps, 'Helvetica', 'builtin', false);
if ($fontId <= 0) { throw new RuntimeException('Шрифт не найден'); }
ps_setfont($ps, $fontId, 14.0);
ps_rect($ps, 72.0, 500.0, 300.0, 160.0);
$result = ps_clip($ps);
if ($result !== true) { throw new RuntimeException('Операция отклонена'); }
ps_setgray_stroke($ps, 0.25);
ps_rect($ps, 68.0, 496.0, 248.0, 98.0);
ps_stroke($ps);
ps_end_page($ps);
ps_close($ps);
ps_delete($ps);
if (!is_file($outputPath) || filesize($outputPath) === 0) {
    throw new RuntimeException('PostScript-файл не создан');
}
echo basename($outputPath), ' bytes=', filesize($outputPath), PHP_EOL;

Для ps_clip показаны обязательное состояние и проверяемый эффект; официальный тип возврата — bool. Во втором варианте изменена задача/геометрия, а результат проверяют по готовому PS, не по синтетическому echo. Нативный runtime требует PECL ps и pslib; здесь заявлена только синтаксическая проверка.
Что должно получиться в совместимом окружении: Последующее рисование ограничено заданным прямоугольным контуром. Поверх результата добавлена контрольная рамка. ps-clip-workflow.ps bytes=<положительное число>.

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

Полный официальный текст карточки на английском

Purpose: Clips drawing to current path

Description Takes the current path and uses it to define the border of a clipping area. Everything drawn outside of that area will not be visible.

Return: Return Values Returns true on success.

Связанные операции: ps_closepath.

ps_closeЗакрыть в текущем PostScript-документе.

PECL ps >= 1.1.0 · ps; pslib

ps_close(resource $psdoc): bool

Закрыть в текущем PostScript-документе.

Официальная сигнатура. ps_close(resource $psdoc): bool.

Доступность. Точная строка официального versions.xml: PECL ps >= 1.1.0.

ПараметрЧто приходит и зачем
resource $psdocОткрытый документ PS, созданный ps_new() и связанный с файлом через ps_open_file().
Точная формулировка PHP Manual

Resource identifier of the postscript file as returned by ps_new .

Возврат. Тип bool. Официальный текст: Return Values Returns true on success.

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

Минимальная операция: ps_closeПример для указанного окружения
<?php
declare(strict_types=1);

if (!extension_loaded('ps')) {
    throw new RuntimeException('Нужно расширение ps');
}

$outputDir = __DIR__ . '/exports';
if (!is_dir($outputDir) && !mkdir($outputDir, 0775, true) && !is_dir($outputDir)) {
    throw new RuntimeException('Не создан каталог exports');
}
$ps = ps_new();
if ($ps === false) { throw new RuntimeException('PS-ресурс не создан'); }
if (!ps_open_file($ps, __DIR__ . '/exports/order-42.ps')) { throw new RuntimeException('Файл не открыт'); }
ps_begin_page($ps, 595.0, 842.0);
ps_end_page($ps);
$result = ps_close($ps);
ps_delete($ps);
echo 'lifecycle=ok', PHP_EOL;

Для ps_close показаны обязательное состояние и проверяемый эффект; официальный тип возврата — bool. Пример сам создаёт ресурс, открывает файл и страницу, а затем завершает документ. Нативный runtime требует PECL ps и pslib; здесь заявлена только синтаксическая проверка.
Что должно получиться в совместимом окружении: lifecycle=ok

В составе документа: ps_closeПример для указанного окружения
<?php
declare(strict_types=1);

if (!extension_loaded('ps')) {
    throw new RuntimeException('Нужно расширение ps');
}

$outputDir = __DIR__ . '/exports';
if (!is_dir($outputDir) && !mkdir($outputDir, 0775, true) && !is_dir($outputDir)) {
    throw new RuntimeException('Не создан каталог exports');
}
$ps = ps_new();
if ($ps === false) { throw new RuntimeException('PS-ресурс не создан'); }
if (!ps_open_file($ps, __DIR__ . '/exports/delivery-73.ps')) { throw new RuntimeException('Файл не открыт'); }
ps_begin_page($ps, 595.0, 842.0);
ps_circle($ps, 120.0, 720.0, 32.0);
ps_stroke($ps);
ps_end_page($ps);
$result = ps_close($ps);
ps_delete($ps);
echo 'lifecycle=ok', PHP_EOL;

Для ps_close показаны обязательное состояние и проверяемый эффект; официальный тип возврата — bool. Во втором варианте изменена задача/геометрия, а результат проверяют по готовому PS, не по синтетическому echo. Нативный runtime требует PECL ps и pslib; здесь заявлена только синтаксическая проверка.
Что должно получиться в совместимом окружении: lifecycle=ok В практическом варианте жизненный цикл включает видимый объект страницы.

Отказ и граница проверки. успех подтверждает только строгое true. Соблюдайте порядок resource → output → page → page end → document close → delete и не продолжайте после отказа предыдущего шага.

Полный официальный текст карточки на английском

Purpose: Closes a PostScript document

Description Closes the PostScript document. This function writes the trailer of the PostScript document. It also writes the bookmark tree. ps_close does not free any resources, which is done by ps_delete . This function is also called by ps_delete if it has not been called before.

Return: Return Values Returns true on success.

Связанные операции: ps_open_file, ps_delete.

ps_close_imageЗакрыть изображение в текущем PostScript-документе.

PECL ps >= 1.1.0 · ps; pslib

ps_close_image(resource $psdoc, int $imageid): void|false

Закрыть изображение в текущем PostScript-документе.

Официальная сигнатура. ps_close_image(resource $psdoc, int $imageid): void|false.

Доступность. Точная строка официального versions.xml: PECL ps >= 1.1.0.

ПараметрЧто приходит и зачем
resource $psdocОткрытый документ PS, созданный ps_new() и связанный с файлом через ps_open_file().
Точная формулировка PHP Manual

Resource identifier of the postscript file as returned by ps_new .

int $imageidПоложительный идентификатор изображения, возвращённый одной из ps_open_image*().
Точная формулировка PHP Manual

Resource identifier of the image as returned by ps_open_image or ps_open_image_file .

Возврат. Тип void|false. Официальный текст: Return Values Returns null on success[return.falseforfailure].

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

Минимальная операция: ps_close_imageПример для указанного окружения
<?php
declare(strict_types=1);

if (!extension_loaded('ps')) {
    throw new RuntimeException('Нужно расширение ps');
}

$outputDir = __DIR__ . '/exports';
if (!is_dir($outputDir) && !mkdir($outputDir, 0775, true) && !is_dir($outputDir)) {
    throw new RuntimeException('Не создан каталог exports');
}
$outputPath = $outputDir . '/ps-close-image-minimal.ps';
$ps = ps_new();
if ($ps === false) { throw new RuntimeException('PS-ресурс не создан'); }
if (!ps_open_file($ps, $outputPath)) {
    ps_delete($ps);
    throw new RuntimeException('PostScript-файл не открыт');
}
ps_begin_page($ps, 595.0, 842.0);
// PostScript-файл и страница уже открыты в этом самодостаточном примере.
$fontId = ps_findfont($ps, 'Helvetica', 'builtin', false);
if ($fontId <= 0) { throw new RuntimeException('Шрифт не найден'); }
ps_setfont($ps, $fontId, 12.0);
$imageFixture = __DIR__ . '/fixtures/logo.png';
if (!is_file($imageFixture)) { throw new RuntimeException('Нужен fixture logo.png'); }
$imageId = ps_open_image_file($ps, 'png', $imageFixture);
if ($imageId <= 0) { throw new RuntimeException('Изображение не открыто'); }
$result = ps_close_image($ps, $imageId);
if ($result === false) { throw new RuntimeException('Операция отклонена'); }
ps_end_page($ps);
ps_close($ps);
ps_delete($ps);
if (!is_file($outputPath) || filesize($outputPath) === 0) {
    throw new RuntimeException('PostScript-файл не создан');
}
echo basename($outputPath), ' bytes=', filesize($outputPath), PHP_EOL;

Для ps_close_image показаны обязательное состояние и проверяемый эффект; официальный тип возврата — void|false. Пример сам создаёт ресурс, открывает файл и страницу, а затем завершает документ. Нативный runtime требует PECL ps и pslib; здесь заявлена только синтаксическая проверка.
Что должно получиться в совместимом окружении: Изменение видно в итоговом PostScript после завершения страницы и документа. ps-close-image-minimal.ps bytes=<положительное число>.

В составе документа: ps_close_imageПример для указанного окружения
<?php
declare(strict_types=1);

if (!extension_loaded('ps')) {
    throw new RuntimeException('Нужно расширение ps');
}

$outputDir = __DIR__ . '/exports';
if (!is_dir($outputDir) && !mkdir($outputDir, 0775, true) && !is_dir($outputDir)) {
    throw new RuntimeException('Не создан каталог exports');
}
$outputPath = $outputDir . '/ps-close-image-workflow.ps';
$ps = ps_new();
if ($ps === false) { throw new RuntimeException('PS-ресурс не создан'); }
if (!ps_open_file($ps, $outputPath)) {
    ps_delete($ps);
    throw new RuntimeException('PostScript-файл не открыт');
}
ps_begin_page($ps, 595.0, 842.0);
// PostScript-файл и страница уже открыты в этом самодостаточном примере.
$fontId = ps_findfont($ps, 'Helvetica', 'builtin', false);
if ($fontId <= 0) { throw new RuntimeException('Шрифт не найден'); }
ps_setfont($ps, $fontId, 14.0);
$imageFixture = __DIR__ . '/fixtures/logo.png';
if (!is_file($imageFixture)) { throw new RuntimeException('Нужен fixture logo.png'); }
$imageId = ps_open_image_file($ps, 'png', $imageFixture);
if ($imageId <= 0) { throw new RuntimeException('Изображение не открыто'); }
$result = ps_close_image($ps, $imageId);
if ($result === false) { throw new RuntimeException('Операция отклонена'); }
ps_show_xy($ps, 'Изображение освобождено', 72.0, 540.0);
ps_end_page($ps);
ps_close($ps);
ps_delete($ps);
if (!is_file($outputPath) || filesize($outputPath) === 0) {
    throw new RuntimeException('PostScript-файл не создан');
}
echo basename($outputPath), ' bytes=', filesize($outputPath), PHP_EOL;

Для ps_close_image показаны обязательное состояние и проверяемый эффект; официальный тип возврата — void|false. Во втором варианте изменена задача/геометрия, а результат проверяют по готовому PS, не по синтетическому echo. Нативный runtime требует PECL ps и pslib; здесь заявлена только синтаксическая проверка.
Что должно получиться в совместимом окружении: Изменение видно в итоговом PostScript после завершения страницы и документа. На странице отмечено завершение работы с изображением. ps-close-image-workflow.ps bytes=<положительное число>.

Отказ и граница проверки. false — документированный сигнал отказа. Проверьте fixture, формат, размеры/компоненты, положительный image id; после размещения закройте именно этот идентификатор.

Полный официальный текст карточки на английском

Purpose: Closes image and frees memory

Description Closes an image and frees its resources. Once an image is closed it cannot be used anymore.

Return: Return Values Returns null on success[return.falseforfailure].

Связанные операции: ps_open_image, ps_open_image_file.

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

PECL ps >= 1.1.0 · ps; pslib

ps_closepath(resource $psdoc): bool

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

Официальная сигнатура. ps_closepath(resource $psdoc): bool.

Доступность. Точная строка официального versions.xml: PECL ps >= 1.1.0.

ПараметрЧто приходит и зачем
resource $psdocОткрытый документ PS, созданный ps_new() и связанный с файлом через ps_open_file().
Точная формулировка PHP Manual

Resource identifier of the postscript file as returned by ps_new .

Возврат. Тип bool. Официальный текст: Return Values Returns true on success.

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

Минимальная операция: ps_closepathПример для указанного окружения
<?php
declare(strict_types=1);

if (!extension_loaded('ps')) {
    throw new RuntimeException('Нужно расширение ps');
}

$outputDir = __DIR__ . '/exports';
if (!is_dir($outputDir) && !mkdir($outputDir, 0775, true) && !is_dir($outputDir)) {
    throw new RuntimeException('Не создан каталог exports');
}
$outputPath = $outputDir . '/ps-closepath-minimal.ps';
$ps = ps_new();
if ($ps === false) { throw new RuntimeException('PS-ресурс не создан'); }
if (!ps_open_file($ps, $outputPath)) {
    ps_delete($ps);
    throw new RuntimeException('PostScript-файл не открыт');
}
ps_begin_page($ps, 595.0, 842.0);
// PostScript-файл и страница уже открыты в этом самодостаточном примере.
$fontId = ps_findfont($ps, 'Helvetica', 'builtin', false);
if ($fontId <= 0) { throw new RuntimeException('Шрифт не найден'); }
ps_setfont($ps, $fontId, 12.0);
ps_moveto($ps, 72.0, 700.0);
$result = ps_closepath($ps);
if ($result !== true) { throw new RuntimeException('Операция отклонена'); }
ps_stroke($ps);
ps_end_page($ps);
ps_close($ps);
ps_delete($ps);
if (!is_file($outputPath) || filesize($outputPath) === 0) {
    throw new RuntimeException('PostScript-файл не создан');
}
echo basename($outputPath), ' bytes=', filesize($outputPath), PHP_EOL;

Для ps_closepath показаны обязательное состояние и проверяемый эффект; официальный тип возврата — bool. Пример сам создаёт ресурс, открывает файл и страницу, а затем завершает документ. Нативный runtime требует PECL ps и pslib; здесь заявлена только синтаксическая проверка.
Что должно получиться в совместимом окружении: На странице появляется соответствующий контур; он станет видимым после ps_stroke() или ps_fill(). ps-closepath-minimal.ps bytes=<положительное число>.

В составе документа: ps_closepathПример для указанного окружения
<?php
declare(strict_types=1);

if (!extension_loaded('ps')) {
    throw new RuntimeException('Нужно расширение ps');
}

$outputDir = __DIR__ . '/exports';
if (!is_dir($outputDir) && !mkdir($outputDir, 0775, true) && !is_dir($outputDir)) {
    throw new RuntimeException('Не создан каталог exports');
}
$outputPath = $outputDir . '/ps-closepath-workflow.ps';
$ps = ps_new();
if ($ps === false) { throw new RuntimeException('PS-ресурс не создан'); }
if (!ps_open_file($ps, $outputPath)) {
    ps_delete($ps);
    throw new RuntimeException('PostScript-файл не открыт');
}
ps_begin_page($ps, 595.0, 842.0);
// PostScript-файл и страница уже открыты в этом самодостаточном примере.
$fontId = ps_findfont($ps, 'Helvetica', 'builtin', false);
if ($fontId <= 0) { throw new RuntimeException('Шрифт не найден'); }
ps_setfont($ps, $fontId, 14.0);
ps_moveto($ps, 72.0, 700.0);
$result = ps_closepath($ps);
if ($result !== true) { throw new RuntimeException('Операция отклонена'); }
ps_stroke($ps);
ps_show_xy($ps, 'Контрольный контур', 72.0, 670.0);
ps_end_page($ps);
ps_close($ps);
ps_delete($ps);
if (!is_file($outputPath) || filesize($outputPath) === 0) {
    throw new RuntimeException('PostScript-файл не создан');
}
echo basename($outputPath), ' bytes=', filesize($outputPath), PHP_EOL;

Для ps_closepath показаны обязательное состояние и проверяемый эффект; официальный тип возврата — bool. Во втором варианте изменена задача/геометрия, а результат проверяют по готовому PS, не по синтетическому echo. Нативный runtime требует PECL ps и pslib; здесь заявлена только синтаксическая проверка.
Что должно получиться в совместимом окружении: На странице появляется соответствующий контур; он станет видимым после ps_stroke() или ps_fill(). Рядом с контуром напечатана контрольная подпись. ps-closepath-workflow.ps bytes=<положительное число>.

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

Полный официальный текст карточки на английском

Purpose: Closes path

Description Connects the last point with the first point of a path. The resulting path can be used for stroking, filling, clipping, etc..

Return: Return Values Returns true on success.

Связанные операции: ps_clip, ps_closepath_stroke.

ps_closepath_strokeЗамкнуть текущий контур и сразу обвести получившуюся фигуру.

PECL ps >= 1.1.0 · ps; pslib

ps_closepath_stroke(resource $psdoc): bool

Замкнуть текущий контур и сразу обвести получившуюся фигуру.

Официальная сигнатура. ps_closepath_stroke(resource $psdoc): bool.

Доступность. Точная строка официального versions.xml: PECL ps >= 1.1.0.

ПараметрЧто приходит и зачем
resource $psdocОткрытый документ PS, созданный ps_new() и связанный с файлом через ps_open_file().
Точная формулировка PHP Manual

Resource identifier of the postscript file as returned by ps_new .

Возврат. Тип bool. Официальный текст: Return Values Returns true on success.

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

Минимальная операция: ps_closepath_strokeПример для указанного окружения
<?php
declare(strict_types=1);

if (!extension_loaded('ps')) {
    throw new RuntimeException('Нужно расширение ps');
}

$outputDir = __DIR__ . '/exports';
if (!is_dir($outputDir) && !mkdir($outputDir, 0775, true) && !is_dir($outputDir)) {
    throw new RuntimeException('Не создан каталог exports');
}
$outputPath = $outputDir . '/ps-closepath-stroke-minimal.ps';
$ps = ps_new();
if ($ps === false) { throw new RuntimeException('PS-ресурс не создан'); }
if (!ps_open_file($ps, $outputPath)) {
    ps_delete($ps);
    throw new RuntimeException('PostScript-файл не открыт');
}
ps_begin_page($ps, 595.0, 842.0);
// PostScript-файл и страница уже открыты в этом самодостаточном примере.
$fontId = ps_findfont($ps, 'Helvetica', 'builtin', false);
if ($fontId <= 0) { throw new RuntimeException('Шрифт не найден'); }
ps_setfont($ps, $fontId, 12.0);
ps_rect($ps, 72.0, 500.0, 240.0, 90.0);
$result = ps_closepath_stroke($ps);
if ($result !== true) { throw new RuntimeException('Операция отклонена'); }
ps_end_page($ps);
ps_close($ps);
ps_delete($ps);
if (!is_file($outputPath) || filesize($outputPath) === 0) {
    throw new RuntimeException('PostScript-файл не создан');
}
echo basename($outputPath), ' bytes=', filesize($outputPath), PHP_EOL;

Для ps_closepath_stroke показаны обязательное состояние и проверяемый эффект; официальный тип возврата — bool. Пример сам создаёт ресурс, открывает файл и страницу, а затем завершает документ. Нативный runtime требует PECL ps и pslib; здесь заявлена только синтаксическая проверка.
Что должно получиться в совместимом окружении: Прямоугольный контур залит и/или обведён согласно выбранной операции. ps-closepath-stroke-minimal.ps bytes=<положительное число>.

В составе документа: ps_closepath_strokeПример для указанного окружения
<?php
declare(strict_types=1);

if (!extension_loaded('ps')) {
    throw new RuntimeException('Нужно расширение ps');
}

$outputDir = __DIR__ . '/exports';
if (!is_dir($outputDir) && !mkdir($outputDir, 0775, true) && !is_dir($outputDir)) {
    throw new RuntimeException('Не создан каталог exports');
}
$outputPath = $outputDir . '/ps-closepath-stroke-workflow.ps';
$ps = ps_new();
if ($ps === false) { throw new RuntimeException('PS-ресурс не создан'); }
if (!ps_open_file($ps, $outputPath)) {
    ps_delete($ps);
    throw new RuntimeException('PostScript-файл не открыт');
}
ps_begin_page($ps, 595.0, 842.0);
// PostScript-файл и страница уже открыты в этом самодостаточном примере.
$fontId = ps_findfont($ps, 'Helvetica', 'builtin', false);
if ($fontId <= 0) { throw new RuntimeException('Шрифт не найден'); }
ps_setfont($ps, $fontId, 14.0);
ps_rect($ps, 72.0, 500.0, 240.0, 90.0);
$result = ps_closepath_stroke($ps);
if ($result !== true) { throw new RuntimeException('Операция отклонена'); }
ps_setgray_stroke($ps, 0.25);
ps_rect($ps, 68.0, 496.0, 248.0, 98.0);
ps_stroke($ps);
ps_end_page($ps);
ps_close($ps);
ps_delete($ps);
if (!is_file($outputPath) || filesize($outputPath) === 0) {
    throw new RuntimeException('PostScript-файл не создан');
}
echo basename($outputPath), ' bytes=', filesize($outputPath), PHP_EOL;

Для ps_closepath_stroke показаны обязательное состояние и проверяемый эффект; официальный тип возврата — bool. Во втором варианте изменена задача/геометрия, а результат проверяют по готовому PS, не по синтетическому echo. Нативный runtime требует PECL ps и pslib; здесь заявлена только синтаксическая проверка.
Что должно получиться в совместимом окружении: Прямоугольный контур залит и/или обведён согласно выбранной операции. Поверх результата добавлена контрольная рамка. ps-closepath-stroke-workflow.ps bytes=<положительное число>.

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

Полный официальный текст карточки на английском

Purpose: Closes and strokes path

Description Connects the last point with first point of a path and draws the resulting closed line.

Return: Return Values Returns true on success.

Связанные операции: ps_closepath.

ps_continue_textПродолжить text в текущем PostScript-документе.

PECL ps >= 1.1.0 · ps; pslib

ps_continue_text(resource $psdoc, string $text): bool

Продолжить text в текущем PostScript-документе.

Официальная сигнатура. ps_continue_text(resource $psdoc, string $text): bool.

Доступность. Точная строка официального versions.xml: PECL ps >= 1.1.0.

ПараметрЧто приходит и зачем
resource $psdocОткрытый документ PS, созданный ps_new() и связанный с файлом через ps_open_file().
Точная формулировка PHP Manual

Resource identifier of the postscript file as returned by ps_new .

string $textТекст, который попадёт в документ или будет измерен.
Точная формулировка PHP Manual

The text to output.

Возврат. Тип bool. Официальный текст: Return Values Returns true on success.

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

Минимальная операция: ps_continue_textПример для указанного окружения
<?php
declare(strict_types=1);

if (!extension_loaded('ps')) {
    throw new RuntimeException('Нужно расширение ps');
}

$outputDir = __DIR__ . '/exports';
if (!is_dir($outputDir) && !mkdir($outputDir, 0775, true) && !is_dir($outputDir)) {
    throw new RuntimeException('Не создан каталог exports');
}
$outputPath = $outputDir . '/ps-continue-text-minimal.ps';
$ps = ps_new();
if ($ps === false) { throw new RuntimeException('PS-ресурс не создан'); }
if (!ps_open_file($ps, $outputPath)) {
    ps_delete($ps);
    throw new RuntimeException('PostScript-файл не открыт');
}
ps_begin_page($ps, 595.0, 842.0);
// PostScript-файл и страница уже открыты в этом самодостаточном примере.
$fontId = ps_findfont($ps, 'Helvetica', 'builtin', false);
if ($fontId <= 0) { throw new RuntimeException('Шрифт не найден'); }
ps_setfont($ps, $fontId, 12.0);
ps_set_text_pos($ps, 72.0, 760.0);
$result = ps_continue_text($ps, 'Order #42');
if ($result !== true) { throw new RuntimeException('Операция отклонена'); }
ps_end_page($ps);
ps_close($ps);
ps_delete($ps);
if (!is_file($outputPath) || filesize($outputPath) === 0) {
    throw new RuntimeException('PostScript-файл не создан');
}
echo basename($outputPath), ' bytes=', filesize($outputPath), PHP_EOL;

Для ps_continue_text показаны обязательное состояние и проверяемый эффект; официальный тип возврата — bool. Пример сам создаёт ресурс, открывает файл и страницу, а затем завершает документ. Нативный runtime требует PECL ps и pslib; здесь заявлена только синтаксическая проверка.
Что должно получиться в совместимом окружении: На странице появляется заданный текст или символ выбранным шрифтом. ps-continue-text-minimal.ps bytes=<положительное число>.

В составе документа: ps_continue_textПример для указанного окружения
<?php
declare(strict_types=1);

if (!extension_loaded('ps')) {
    throw new RuntimeException('Нужно расширение ps');
}

$outputDir = __DIR__ . '/exports';
if (!is_dir($outputDir) && !mkdir($outputDir, 0775, true) && !is_dir($outputDir)) {
    throw new RuntimeException('Не создан каталог exports');
}
$outputPath = $outputDir . '/ps-continue-text-workflow.ps';
$ps = ps_new();
if ($ps === false) { throw new RuntimeException('PS-ресурс не создан'); }
if (!ps_open_file($ps, $outputPath)) {
    ps_delete($ps);
    throw new RuntimeException('PostScript-файл не открыт');
}
ps_begin_page($ps, 595.0, 842.0);
// PostScript-файл и страница уже открыты в этом самодостаточном примере.
$fontId = ps_findfont($ps, 'Helvetica', 'builtin', false);
if ($fontId <= 0) { throw new RuntimeException('Шрифт не найден'); }
ps_setfont($ps, $fontId, 14.0);
ps_set_text_pos($ps, 72.0, 760.0);
$result = ps_continue_text($ps, 'Delivery act #73');
if ($result !== true) { throw new RuntimeException('Операция отклонена'); }
ps_setgray_stroke($ps, 0.6);
ps_moveto($ps, 72.0, 680.0);
ps_lineto($ps, 360.0, 680.0);
ps_stroke($ps);
ps_end_page($ps);
ps_close($ps);
ps_delete($ps);
if (!is_file($outputPath) || filesize($outputPath) === 0) {
    throw new RuntimeException('PostScript-файл не создан');
}
echo basename($outputPath), ' bytes=', filesize($outputPath), PHP_EOL;

Для ps_continue_text показаны обязательное состояние и проверяемый эффект; официальный тип возврата — bool. Во втором варианте изменена задача/геометрия, а результат проверяют по готовому PS, не по синтетическому echo. Нативный runtime требует PECL ps и pslib; здесь заявлена только синтаксическая проверка.
Что должно получиться в совместимом окружении: На странице появляется заданный текст или символ выбранным шрифтом. Контрольная линия показывает базовую область текста. ps-continue-text-workflow.ps bytes=<положительное число>.

Отказ и граница проверки. успех подтверждает только строгое true. Проверьте SearchPath, шрифт/encoding, активную страницу и наличие glyph; предупреждения направляйте в журнал, а не в бинарный ответ.

Полный официальный текст карточки на английском

Purpose: Continue text in next line

Description Output a text one line below the last line. The line spacing is taken from the value "leading" which must be set with ps_set_value . The actual position of the text is determined by the values "textx" and "texty" which can be requested with ps_get_value

Return: Return Values Returns true on success.

Связанные операции: ps_show, ps_show_xy, ps_show_boxed.

ps_curvetoПровести кривую Безье в текущем PostScript-документе.

PECL ps >= 1.1.0 · ps; pslib

ps_curveto(resource $psdoc, float $x1, float $y1, float $x2, float $y2, float $x3, float $y3): bool

Провести кривую Безье в текущем PostScript-документе.

Официальная сигнатура. ps_curveto(resource $psdoc, float $x1, float $y1, float $x2, float $y2, float $x3, float $y3): bool.

Доступность. Точная строка официального versions.xml: PECL ps >= 1.1.0.

ПараметрЧто приходит и зачем
resource $psdocОткрытый документ PS, созданный ps_new() и связанный с файлом через ps_open_file().
Точная формулировка PHP Manual

Resource identifier of the postscript file as returned by ps_new .

float $x1Координата X в пунктах PostScript; начало системы координат по умолчанию находится слева снизу.
Точная формулировка PHP Manual

x-coordinate of first control point.

float $y1Координата Y в пунктах PostScript; значение растёт снизу вверх до преобразования системы координат.
Точная формулировка PHP Manual

y-coordinate of first control point.

float $x2Координата X в пунктах PostScript; начало системы координат по умолчанию находится слева снизу.
Точная формулировка PHP Manual

x-coordinate of second control point.

float $y2Координата Y в пунктах PostScript; значение растёт снизу вверх до преобразования системы координат.
Точная формулировка PHP Manual

y-coordinate of second control point.

float $x3Координата X в пунктах PostScript; начало системы координат по умолчанию находится слева снизу.
Точная формулировка PHP Manual

x-coordinate of third control point.

float $y3Координата Y в пунктах PostScript; значение растёт снизу вверх до преобразования системы координат.
Точная формулировка PHP Manual

y-coordinate of third control point.

Возврат. Тип bool. Официальный текст: Return Values Returns true on success.

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

Минимальная операция: ps_curvetoПример для указанного окружения
<?php
declare(strict_types=1);

if (!extension_loaded('ps')) {
    throw new RuntimeException('Нужно расширение ps');
}

$outputDir = __DIR__ . '/exports';
if (!is_dir($outputDir) && !mkdir($outputDir, 0775, true) && !is_dir($outputDir)) {
    throw new RuntimeException('Не создан каталог exports');
}
$outputPath = $outputDir . '/ps-curveto-minimal.ps';
$ps = ps_new();
if ($ps === false) { throw new RuntimeException('PS-ресурс не создан'); }
if (!ps_open_file($ps, $outputPath)) {
    ps_delete($ps);
    throw new RuntimeException('PostScript-файл не открыт');
}
ps_begin_page($ps, 595.0, 842.0);
// PostScript-файл и страница уже открыты в этом самодостаточном примере.
$fontId = ps_findfont($ps, 'Helvetica', 'builtin', false);
if ($fontId <= 0) { throw new RuntimeException('Шрифт не найден'); }
ps_setfont($ps, $fontId, 12.0);
ps_moveto($ps, 72.0, 700.0);
$result = ps_curveto($ps, 120.0, 160.0, 180.0, 200.0, 240.0, 120.0);
if ($result !== true) { throw new RuntimeException('Операция отклонена'); }
ps_stroke($ps);
ps_end_page($ps);
ps_close($ps);
ps_delete($ps);
if (!is_file($outputPath) || filesize($outputPath) === 0) {
    throw new RuntimeException('PostScript-файл не создан');
}
echo basename($outputPath), ' bytes=', filesize($outputPath), PHP_EOL;

Для ps_curveto показаны обязательное состояние и проверяемый эффект; официальный тип возврата — bool. Пример сам создаёт ресурс, открывает файл и страницу, а затем завершает документ. Нативный runtime требует PECL ps и pslib; здесь заявлена только синтаксическая проверка.
Что должно получиться в совместимом окружении: На странице появляется соответствующий контур; он станет видимым после ps_stroke() или ps_fill(). ps-curveto-minimal.ps bytes=<положительное число>.

В составе документа: ps_curvetoПример для указанного окружения
<?php
declare(strict_types=1);

if (!extension_loaded('ps')) {
    throw new RuntimeException('Нужно расширение ps');
}

$outputDir = __DIR__ . '/exports';
if (!is_dir($outputDir) && !mkdir($outputDir, 0775, true) && !is_dir($outputDir)) {
    throw new RuntimeException('Не создан каталог exports');
}
$outputPath = $outputDir . '/ps-curveto-workflow.ps';
$ps = ps_new();
if ($ps === false) { throw new RuntimeException('PS-ресурс не создан'); }
if (!ps_open_file($ps, $outputPath)) {
    ps_delete($ps);
    throw new RuntimeException('PostScript-файл не открыт');
}
ps_begin_page($ps, 595.0, 842.0);
// PostScript-файл и страница уже открыты в этом самодостаточном примере.
$fontId = ps_findfont($ps, 'Helvetica', 'builtin', false);
if ($fontId <= 0) { throw new RuntimeException('Шрифт не найден'); }
ps_setfont($ps, $fontId, 14.0);
ps_moveto($ps, 72.0, 700.0);
$result = ps_curveto($ps, 180.0, 260.0, 240.0, 310.0, 300.0, 240.0);
if ($result !== true) { throw new RuntimeException('Операция отклонена'); }
ps_stroke($ps);
ps_show_xy($ps, 'Контрольный контур', 72.0, 670.0);
ps_end_page($ps);
ps_close($ps);
ps_delete($ps);
if (!is_file($outputPath) || filesize($outputPath) === 0) {
    throw new RuntimeException('PostScript-файл не создан');
}
echo basename($outputPath), ' bytes=', filesize($outputPath), PHP_EOL;

Для ps_curveto показаны обязательное состояние и проверяемый эффект; официальный тип возврата — bool. Во втором варианте изменена задача/геометрия, а результат проверяют по готовому PS, не по синтетическому echo. Нативный runtime требует PECL ps и pslib; здесь заявлена только синтаксическая проверка.
Что должно получиться в совместимом окружении: На странице появляется соответствующий контур; он станет видимым после ps_stroke() или ps_fill(). Рядом с контуром напечатана контрольная подпись. ps-curveto-workflow.ps bytes=<положительное число>.

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

Полный официальный текст карточки на английском

Purpose: Draws a curve

Description Add a section of a cubic Bézier curve described by the three given control points to the current path.

Return: Return Values Returns true on success.

Связанные операции: ps_lineto.

ps_deleteОсвободить в текущем PostScript-документе.

PECL ps >= 1.1.0 · ps; pslib

ps_delete(resource $psdoc): bool

Освободить в текущем PostScript-документе.

Официальная сигнатура. ps_delete(resource $psdoc): bool.

Доступность. Точная строка официального versions.xml: PECL ps >= 1.1.0.

ПараметрЧто приходит и зачем
resource $psdocОткрытый документ PS, созданный ps_new() и связанный с файлом через ps_open_file().
Точная формулировка PHP Manual

Resource identifier of the postscript file as returned by ps_new .

Возврат. Тип bool. Официальный текст: Return Values Returns true on success.

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

Минимальная операция: ps_deleteПример для указанного окружения
<?php
declare(strict_types=1);

if (!extension_loaded('ps')) {
    throw new RuntimeException('Нужно расширение ps');
}

$outputDir = __DIR__ . '/exports';
if (!is_dir($outputDir) && !mkdir($outputDir, 0775, true) && !is_dir($outputDir)) {
    throw new RuntimeException('Не создан каталог exports');
}
$ps = ps_new();
if ($ps === false) { throw new RuntimeException('PS-ресурс не создан'); }
if (!ps_open_file($ps, __DIR__ . '/exports/order-42.ps')) { throw new RuntimeException('Файл не открыт'); }
ps_begin_page($ps, 595.0, 842.0);
ps_end_page($ps);
ps_close($ps);
$result = ps_delete($ps);
echo 'lifecycle=ok', PHP_EOL;

Для ps_delete показаны обязательное состояние и проверяемый эффект; официальный тип возврата — bool. Пример сам создаёт ресурс, открывает файл и страницу, а затем завершает документ. Нативный runtime требует PECL ps и pslib; здесь заявлена только синтаксическая проверка.
Что должно получиться в совместимом окружении: lifecycle=ok

В составе документа: ps_deleteПример для указанного окружения
<?php
declare(strict_types=1);

if (!extension_loaded('ps')) {
    throw new RuntimeException('Нужно расширение ps');
}

$outputDir = __DIR__ . '/exports';
if (!is_dir($outputDir) && !mkdir($outputDir, 0775, true) && !is_dir($outputDir)) {
    throw new RuntimeException('Не создан каталог exports');
}
$ps = ps_new();
if ($ps === false) { throw new RuntimeException('PS-ресурс не создан'); }
if (!ps_open_file($ps, __DIR__ . '/exports/delivery-73.ps')) { throw new RuntimeException('Файл не открыт'); }
ps_begin_page($ps, 595.0, 842.0);
ps_rect($ps, 64.0, 700.0, 220.0, 60.0);
ps_fill_stroke($ps);
ps_end_page($ps);
ps_close($ps);
$result = ps_delete($ps);
echo 'lifecycle=ok', PHP_EOL;

Для ps_delete показаны обязательное состояние и проверяемый эффект; официальный тип возврата — bool. Во втором варианте изменена задача/геометрия, а результат проверяют по готовому PS, не по синтетическому echo. Нативный runtime требует PECL ps и pslib; здесь заявлена только синтаксическая проверка.
Что должно получиться в совместимом окружении: lifecycle=ok В практическом варианте жизненный цикл включает видимый объект страницы.

Отказ и граница проверки. успех подтверждает только строгое true. Соблюдайте порядок resource → output → page → page end → document close → delete и не продолжайте после отказа предыдущего шага.

Полный официальный текст карточки на английском

Purpose: Deletes all resources of a PostScript document

Description Mainly frees memory used by the document. Also closes a file, if it was not closed before with ps_close . You should in any case close the file with ps_close before, because ps_close not just closes the file but also outputs a trailor containing PostScript comments like the number of pages in the document and adding the bookmark hierarchy.

Return: Return Values Returns true on success.

Связанные операции: ps_close.

ps_end_pageЗавершить страницу в текущем PostScript-документе.

PECL ps >= 1.1.0 · ps; pslib

ps_end_page(resource $psdoc): bool

Завершить страницу в текущем PostScript-документе.

Официальная сигнатура. ps_end_page(resource $psdoc): bool.

Доступность. Точная строка официального versions.xml: PECL ps >= 1.1.0.

ПараметрЧто приходит и зачем
resource $psdocОткрытый документ PS, созданный ps_new() и связанный с файлом через ps_open_file().
Точная формулировка PHP Manual

Resource identifier of the postscript file as returned by ps_new .

Возврат. Тип bool. Официальный текст: Return Values Returns true on success.

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

Минимальная операция: ps_end_pageПример для указанного окружения
<?php
declare(strict_types=1);

if (!extension_loaded('ps')) {
    throw new RuntimeException('Нужно расширение ps');
}

$outputDir = __DIR__ . '/exports';
if (!is_dir($outputDir) && !mkdir($outputDir, 0775, true) && !is_dir($outputDir)) {
    throw new RuntimeException('Не создан каталог exports');
}
$ps = ps_new();
if ($ps === false) { throw new RuntimeException('PS-ресурс не создан'); }
if (!ps_open_file($ps, __DIR__ . '/exports/order-42.ps')) { throw new RuntimeException('Файл не открыт'); }
ps_begin_page($ps, 595.0, 842.0);
$result = ps_end_page($ps);
ps_close($ps);
ps_delete($ps);
echo 'lifecycle=ok', PHP_EOL;

Для ps_end_page показаны обязательное состояние и проверяемый эффект; официальный тип возврата — bool. Пример сам создаёт ресурс, открывает файл и страницу, а затем завершает документ. Нативный runtime требует PECL ps и pslib; здесь заявлена только синтаксическая проверка.
Что должно получиться в совместимом окружении: lifecycle=ok

В составе документа: ps_end_pageПример для указанного окружения
<?php
declare(strict_types=1);

if (!extension_loaded('ps')) {
    throw new RuntimeException('Нужно расширение ps');
}

$outputDir = __DIR__ . '/exports';
if (!is_dir($outputDir) && !mkdir($outputDir, 0775, true) && !is_dir($outputDir)) {
    throw new RuntimeException('Не создан каталог exports');
}
$ps = ps_new();
if ($ps === false) { throw new RuntimeException('PS-ресурс не создан'); }
if (!ps_open_file($ps, __DIR__ . '/exports/delivery-73.ps')) { throw new RuntimeException('Файл не открыт'); }
ps_begin_page($ps, 595.0, 842.0);
ps_rect($ps, 64.0, 700.0, 220.0, 60.0);
ps_stroke($ps);
$result = ps_end_page($ps);
ps_close($ps);
ps_delete($ps);
echo 'lifecycle=ok', PHP_EOL;

Для ps_end_page показаны обязательное состояние и проверяемый эффект; официальный тип возврата — bool. Во втором варианте изменена задача/геометрия, а результат проверяют по готовому PS, не по синтетическому echo. Нативный runtime требует PECL ps и pslib; здесь заявлена только синтаксическая проверка.
Что должно получиться в совместимом окружении: lifecycle=ok В практическом варианте жизненный цикл включает видимый объект страницы.

Отказ и граница проверки. успех подтверждает только строгое true. Соблюдайте порядок resource → output → page → page end → document close → delete и не продолжайте после отказа предыдущего шага.

Полный официальный текст карточки на английском

Purpose: End a page

Description Ends a page which was started with ps_begin_page . Ending a page will leave the current drawing context, which e.g. requires to reload fonts if they were loading within the page, and to set many other drawing parameters like the line width, or color.

Return: Return Values Returns true on success.

Связанные операции: ps_begin_page.

ps_end_patternЗавершить узор в текущем PostScript-документе.

PECL ps >= 1.2.0 · ps; pslib

ps_end_pattern(resource $psdoc): bool

Завершить узор в текущем PostScript-документе.

Официальная сигнатура. ps_end_pattern(resource $psdoc): bool.

Доступность. Точная строка официального versions.xml: PECL ps >= 1.2.0.

ПараметрЧто приходит и зачем
resource $psdocОткрытый документ PS, созданный ps_new() и связанный с файлом через ps_open_file().
Точная формулировка PHP Manual

Resource identifier of the postscript file as returned by ps_new .

Возврат. Тип bool. Официальный текст: Return Values Returns true on success.

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

Минимальная операция: ps_end_patternПример для указанного окружения
<?php
declare(strict_types=1);

if (!extension_loaded('ps')) {
    throw new RuntimeException('Нужно расширение ps');
}

$outputDir = __DIR__ . '/exports';
if (!is_dir($outputDir) && !mkdir($outputDir, 0775, true) && !is_dir($outputDir)) {
    throw new RuntimeException('Не создан каталог exports');
}
$outputPath = $outputDir . '/ps-end-pattern-minimal.ps';
$ps = ps_new();
if ($ps === false) { throw new RuntimeException('PS-ресурс не создан'); }
if (!ps_open_file($ps, $outputPath)) {
    ps_delete($ps);
    throw new RuntimeException('PostScript-файл не открыт');
}
ps_begin_page($ps, 595.0, 842.0);
// PostScript-файл и страница уже открыты в этом самодостаточном примере.
$fontId = ps_findfont($ps, 'Helvetica', 'builtin', false);
if ($fontId <= 0) { throw new RuntimeException('Шрифт не найден'); }
ps_setfont($ps, $fontId, 12.0);
$patternId = ps_begin_pattern($ps, 20.0, 20.0, 20.0, 20.0, 1);
if ($patternId === false) { throw new RuntimeException('Узор не начат'); }
$result = ps_end_pattern($ps);
if ($result !== true) { throw new RuntimeException('Операция отклонена'); }
ps_end_page($ps);
ps_close($ps);
ps_delete($ps);
if (!is_file($outputPath) || filesize($outputPath) === 0) {
    throw new RuntimeException('PostScript-файл не создан');
}
echo basename($outputPath), ' bytes=', filesize($outputPath), PHP_EOL;

Для ps_end_pattern показаны обязательное состояние и проверяемый эффект; официальный тип возврата — bool. Пример сам создаёт ресурс, открывает файл и страницу, а затем завершает документ. Нативный runtime требует PECL ps и pslib; здесь заявлена только синтаксическая проверка.
Что должно получиться в совместимом окружении: Изменение видно в итоговом PostScript после завершения страницы и документа. ps-end-pattern-minimal.ps bytes=<положительное число>.

В составе документа: ps_end_patternПример для указанного окружения
<?php
declare(strict_types=1);

if (!extension_loaded('ps')) {
    throw new RuntimeException('Нужно расширение ps');
}

$outputDir = __DIR__ . '/exports';
if (!is_dir($outputDir) && !mkdir($outputDir, 0775, true) && !is_dir($outputDir)) {
    throw new RuntimeException('Не создан каталог exports');
}
$outputPath = $outputDir . '/ps-end-pattern-workflow.ps';
$ps = ps_new();
if ($ps === false) { throw new RuntimeException('PS-ресурс не создан'); }
if (!ps_open_file($ps, $outputPath)) {
    ps_delete($ps);
    throw new RuntimeException('PostScript-файл не открыт');
}
ps_begin_page($ps, 595.0, 842.0);
// PostScript-файл и страница уже открыты в этом самодостаточном примере.
$fontId = ps_findfont($ps, 'Helvetica', 'builtin', false);
if ($fontId <= 0) { throw new RuntimeException('Шрифт не найден'); }
ps_setfont($ps, $fontId, 14.0);
$patternId = ps_begin_pattern($ps, 20.0, 20.0, 20.0, 20.0, 1);
if ($patternId === false) { throw new RuntimeException('Узор не начат'); }
$result = ps_end_pattern($ps);
if ($result !== true) { throw new RuntimeException('Операция отклонена'); }
ps_setcolor($ps, 'fill', 'pattern', $patternId, 0.0, 0.0, 0.0);
ps_rect($ps, 72.0, 560.0, 160.0, 60.0);
ps_fill($ps);
ps_end_page($ps);
ps_close($ps);
ps_delete($ps);
if (!is_file($outputPath) || filesize($outputPath) === 0) {
    throw new RuntimeException('PostScript-файл не создан');
}
echo basename($outputPath), ' bytes=', filesize($outputPath), PHP_EOL;

Для ps_end_pattern показаны обязательное состояние и проверяемый эффект; официальный тип возврата — bool. Во втором варианте изменена задача/геометрия, а результат проверяют по готовому PS, не по синтетическому echo. Нативный runtime требует PECL ps и pslib; здесь заявлена только синтаксическая проверка.
Что должно получиться в совместимом окружении: Изменение видно в итоговом PostScript после завершения страницы и документа. Завершённый узор применён к видимой области. ps-end-pattern-workflow.ps bytes=<положительное число>.

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

Полный официальный текст карточки на английском

Purpose: End a pattern

Description Ends a pattern which was started with ps_begin_pattern . Once a pattern has been ended, it can be used like a color to fill areas.

Return: Return Values Returns true on success.

Связанные операции: ps_begin_pattern.

ps_end_templateЗавершить шаблон в текущем PostScript-документе.

PECL ps >= 1.2.0 · ps; pslib

ps_end_template(resource $psdoc): bool

Завершить шаблон в текущем PostScript-документе.

Официальная сигнатура. ps_end_template(resource $psdoc): bool.

Доступность. Точная строка официального versions.xml: PECL ps >= 1.2.0.

ПараметрЧто приходит и зачем
resource $psdocОткрытый документ PS, созданный ps_new() и связанный с файлом через ps_open_file().
Точная формулировка PHP Manual

Resource identifier of the postscript file as returned by ps_new .

Возврат. Тип bool. Официальный текст: Return Values Returns true on success.

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

Минимальная операция: ps_end_templateПример для указанного окружения
<?php
declare(strict_types=1);

if (!extension_loaded('ps')) {
    throw new RuntimeException('Нужно расширение ps');
}

$outputDir = __DIR__ . '/exports';
if (!is_dir($outputDir) && !mkdir($outputDir, 0775, true) && !is_dir($outputDir)) {
    throw new RuntimeException('Не создан каталог exports');
}
$outputPath = $outputDir . '/ps-end-template-minimal.ps';
$ps = ps_new();
if ($ps === false) { throw new RuntimeException('PS-ресурс не создан'); }
if (!ps_open_file($ps, $outputPath)) {
    ps_delete($ps);
    throw new RuntimeException('PostScript-файл не открыт');
}
ps_begin_page($ps, 595.0, 842.0);
// PostScript-файл и страница уже открыты в этом самодостаточном примере.
$fontId = ps_findfont($ps, 'Helvetica', 'builtin', false);
if ($fontId <= 0) { throw new RuntimeException('Шрифт не найден'); }
ps_setfont($ps, $fontId, 12.0);
$templateId = ps_begin_template($ps, 30.0, 30.0);
if ($templateId <= 0) { throw new RuntimeException('Шаблон не начат'); }
$result = ps_end_template($ps);
if ($result !== true) { throw new RuntimeException('Операция отклонена'); }
ps_end_page($ps);
ps_close($ps);
ps_delete($ps);
if (!is_file($outputPath) || filesize($outputPath) === 0) {
    throw new RuntimeException('PostScript-файл не создан');
}
echo basename($outputPath), ' bytes=', filesize($outputPath), PHP_EOL;

Для ps_end_template показаны обязательное состояние и проверяемый эффект; официальный тип возврата — bool. Пример сам создаёт ресурс, открывает файл и страницу, а затем завершает документ. Нативный runtime требует PECL ps и pslib; здесь заявлена только синтаксическая проверка.
Что должно получиться в совместимом окружении: Изменение видно в итоговом PostScript после завершения страницы и документа. ps-end-template-minimal.ps bytes=<положительное число>.

В составе документа: ps_end_templateПример для указанного окружения
<?php
declare(strict_types=1);

if (!extension_loaded('ps')) {
    throw new RuntimeException('Нужно расширение ps');
}

$outputDir = __DIR__ . '/exports';
if (!is_dir($outputDir) && !mkdir($outputDir, 0775, true) && !is_dir($outputDir)) {
    throw new RuntimeException('Не создан каталог exports');
}
$outputPath = $outputDir . '/ps-end-template-workflow.ps';
$ps = ps_new();
if ($ps === false) { throw new RuntimeException('PS-ресурс не создан'); }
if (!ps_open_file($ps, $outputPath)) {
    ps_delete($ps);
    throw new RuntimeException('PostScript-файл не открыт');
}
ps_begin_page($ps, 595.0, 842.0);
// PostScript-файл и страница уже открыты в этом самодостаточном примере.
$fontId = ps_findfont($ps, 'Helvetica', 'builtin', false);
if ($fontId <= 0) { throw new RuntimeException('Шрифт не найден'); }
ps_setfont($ps, $fontId, 14.0);
$templateId = ps_begin_template($ps, 30.0, 30.0);
if ($templateId <= 0) { throw new RuntimeException('Шаблон не начат'); }
$result = ps_end_template($ps);
if ($result !== true) { throw new RuntimeException('Операция отклонена'); }
ps_place_image($ps, $templateId, 72.0, 560.0, 1.0);
ps_end_page($ps);
ps_close($ps);
ps_delete($ps);
if (!is_file($outputPath) || filesize($outputPath) === 0) {
    throw new RuntimeException('PostScript-файл не создан');
}
echo basename($outputPath), ' bytes=', filesize($outputPath), PHP_EOL;

Для ps_end_template показаны обязательное состояние и проверяемый эффект; официальный тип возврата — bool. Во втором варианте изменена задача/геометрия, а результат проверяют по готовому PS, не по синтетическому echo. Нативный runtime требует PECL ps и pslib; здесь заявлена только синтаксическая проверка.
Что должно получиться в совместимом окружении: Изменение видно в итоговом PostScript после завершения страницы и документа. Завершённый шаблон размещён на странице. ps-end-template-workflow.ps bytes=<положительное число>.

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

Полный официальный текст карточки на английском

Purpose: End a template

Description Ends a template which was started with ps_begin_template . Once a template has been ended, it can be used like an image.

Return: Return Values Returns true on success.

Связанные операции: ps_begin_template.

ps_fillЗалить текущий контур в текущем PostScript-документе.

PECL ps >= 1.1.0 · ps; pslib

ps_fill(resource $psdoc): bool

Залить текущий контур в текущем PostScript-документе.

Официальная сигнатура. ps_fill(resource $psdoc): bool.

Доступность. Точная строка официального versions.xml: PECL ps >= 1.1.0.

ПараметрЧто приходит и зачем
resource $psdocОткрытый документ PS, созданный ps_new() и связанный с файлом через ps_open_file().
Точная формулировка PHP Manual

Resource identifier of the postscript file as returned by ps_new .

Возврат. Тип bool. Официальный текст: Return Values Returns true on success.

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

Минимальная операция: ps_fillПример для указанного окружения
<?php
declare(strict_types=1);

if (!extension_loaded('ps')) {
    throw new RuntimeException('Нужно расширение ps');
}

$outputDir = __DIR__ . '/exports';
if (!is_dir($outputDir) && !mkdir($outputDir, 0775, true) && !is_dir($outputDir)) {
    throw new RuntimeException('Не создан каталог exports');
}
$outputPath = $outputDir . '/ps-fill-minimal.ps';
$ps = ps_new();
if ($ps === false) { throw new RuntimeException('PS-ресурс не создан'); }
if (!ps_open_file($ps, $outputPath)) {
    ps_delete($ps);
    throw new RuntimeException('PostScript-файл не открыт');
}
ps_begin_page($ps, 595.0, 842.0);
// PostScript-файл и страница уже открыты в этом самодостаточном примере.
$fontId = ps_findfont($ps, 'Helvetica', 'builtin', false);
if ($fontId <= 0) { throw new RuntimeException('Шрифт не найден'); }
ps_setfont($ps, $fontId, 12.0);
ps_rect($ps, 72.0, 500.0, 240.0, 90.0);
$result = ps_fill($ps);
if ($result !== true) { throw new RuntimeException('Операция отклонена'); }
ps_end_page($ps);
ps_close($ps);
ps_delete($ps);
if (!is_file($outputPath) || filesize($outputPath) === 0) {
    throw new RuntimeException('PostScript-файл не создан');
}
echo basename($outputPath), ' bytes=', filesize($outputPath), PHP_EOL;

Для ps_fill показаны обязательное состояние и проверяемый эффект; официальный тип возврата — bool. Пример сам создаёт ресурс, открывает файл и страницу, а затем завершает документ. Нативный runtime требует PECL ps и pslib; здесь заявлена только синтаксическая проверка.
Что должно получиться в совместимом окружении: Прямоугольный контур залит и/или обведён согласно выбранной операции. ps-fill-minimal.ps bytes=<положительное число>.

В составе документа: ps_fillПример для указанного окружения
<?php
declare(strict_types=1);

if (!extension_loaded('ps')) {
    throw new RuntimeException('Нужно расширение ps');
}

$outputDir = __DIR__ . '/exports';
if (!is_dir($outputDir) && !mkdir($outputDir, 0775, true) && !is_dir($outputDir)) {
    throw new RuntimeException('Не создан каталог exports');
}
$outputPath = $outputDir . '/ps-fill-workflow.ps';
$ps = ps_new();
if ($ps === false) { throw new RuntimeException('PS-ресурс не создан'); }
if (!ps_open_file($ps, $outputPath)) {
    ps_delete($ps);
    throw new RuntimeException('PostScript-файл не открыт');
}
ps_begin_page($ps, 595.0, 842.0);
// PostScript-файл и страница уже открыты в этом самодостаточном примере.
$fontId = ps_findfont($ps, 'Helvetica', 'builtin', false);
if ($fontId <= 0) { throw new RuntimeException('Шрифт не найден'); }
ps_setfont($ps, $fontId, 14.0);
ps_rect($ps, 72.0, 500.0, 240.0, 90.0);
$result = ps_fill($ps);
if ($result !== true) { throw new RuntimeException('Операция отклонена'); }
ps_setgray_stroke($ps, 0.25);
ps_rect($ps, 68.0, 496.0, 248.0, 98.0);
ps_stroke($ps);
ps_end_page($ps);
ps_close($ps);
ps_delete($ps);
if (!is_file($outputPath) || filesize($outputPath) === 0) {
    throw new RuntimeException('PostScript-файл не создан');
}
echo basename($outputPath), ' bytes=', filesize($outputPath), PHP_EOL;

Для ps_fill показаны обязательное состояние и проверяемый эффект; официальный тип возврата — bool. Во втором варианте изменена задача/геометрия, а результат проверяют по готовому PS, не по синтетическому echo. Нативный runtime требует PECL ps и pslib; здесь заявлена только синтаксическая проверка.
Что должно получиться в совместимом окружении: Прямоугольный контур залит и/или обведён согласно выбранной операции. Поверх результата добавлена контрольная рамка. ps-fill-workflow.ps bytes=<положительное число>.

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

Полный официальный текст карточки на английском

Purpose: Fills the current path

Description Fills the path constructed with previously called drawing functions like ps_lineto .

Return: Return Values Returns true on success.

Связанные операции: ps_fill_stroke, ps_stroke.

ps_fill_strokeЗалить текущий контур stroke в текущем PostScript-документе.

PECL ps >= 1.1.0 · ps; pslib

ps_fill_stroke(resource $psdoc): bool

Залить текущий контур stroke в текущем PostScript-документе.

Официальная сигнатура. ps_fill_stroke(resource $psdoc): bool.

Доступность. Точная строка официального versions.xml: PECL ps >= 1.1.0.

ПараметрЧто приходит и зачем
resource $psdocОткрытый документ PS, созданный ps_new() и связанный с файлом через ps_open_file().
Точная формулировка PHP Manual

Resource identifier of the postscript file as returned by ps_new .

Возврат. Тип bool. Официальный текст: Return Values Returns true on success.

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

Минимальная операция: ps_fill_strokeПример для указанного окружения
<?php
declare(strict_types=1);

if (!extension_loaded('ps')) {
    throw new RuntimeException('Нужно расширение ps');
}

$outputDir = __DIR__ . '/exports';
if (!is_dir($outputDir) && !mkdir($outputDir, 0775, true) && !is_dir($outputDir)) {
    throw new RuntimeException('Не создан каталог exports');
}
$outputPath = $outputDir . '/ps-fill-stroke-minimal.ps';
$ps = ps_new();
if ($ps === false) { throw new RuntimeException('PS-ресурс не создан'); }
if (!ps_open_file($ps, $outputPath)) {
    ps_delete($ps);
    throw new RuntimeException('PostScript-файл не открыт');
}
ps_begin_page($ps, 595.0, 842.0);
// PostScript-файл и страница уже открыты в этом самодостаточном примере.
$fontId = ps_findfont($ps, 'Helvetica', 'builtin', false);
if ($fontId <= 0) { throw new RuntimeException('Шрифт не найден'); }
ps_setfont($ps, $fontId, 12.0);
ps_rect($ps, 72.0, 500.0, 240.0, 90.0);
$result = ps_fill_stroke($ps);
if ($result !== true) { throw new RuntimeException('Операция отклонена'); }
ps_end_page($ps);
ps_close($ps);
ps_delete($ps);
if (!is_file($outputPath) || filesize($outputPath) === 0) {
    throw new RuntimeException('PostScript-файл не создан');
}
echo basename($outputPath), ' bytes=', filesize($outputPath), PHP_EOL;

Для ps_fill_stroke показаны обязательное состояние и проверяемый эффект; официальный тип возврата — bool. Пример сам создаёт ресурс, открывает файл и страницу, а затем завершает документ. Нативный runtime требует PECL ps и pslib; здесь заявлена только синтаксическая проверка.
Что должно получиться в совместимом окружении: Прямоугольный контур залит и/или обведён согласно выбранной операции. ps-fill-stroke-minimal.ps bytes=<положительное число>.

В составе документа: ps_fill_strokeПример для указанного окружения
<?php
declare(strict_types=1);

if (!extension_loaded('ps')) {
    throw new RuntimeException('Нужно расширение ps');
}

$outputDir = __DIR__ . '/exports';
if (!is_dir($outputDir) && !mkdir($outputDir, 0775, true) && !is_dir($outputDir)) {
    throw new RuntimeException('Не создан каталог exports');
}
$outputPath = $outputDir . '/ps-fill-stroke-workflow.ps';
$ps = ps_new();
if ($ps === false) { throw new RuntimeException('PS-ресурс не создан'); }
if (!ps_open_file($ps, $outputPath)) {
    ps_delete($ps);
    throw new RuntimeException('PostScript-файл не открыт');
}
ps_begin_page($ps, 595.0, 842.0);
// PostScript-файл и страница уже открыты в этом самодостаточном примере.
$fontId = ps_findfont($ps, 'Helvetica', 'builtin', false);
if ($fontId <= 0) { throw new RuntimeException('Шрифт не найден'); }
ps_setfont($ps, $fontId, 14.0);
ps_rect($ps, 72.0, 500.0, 240.0, 90.0);
$result = ps_fill_stroke($ps);
if ($result !== true) { throw new RuntimeException('Операция отклонена'); }
ps_setgray_stroke($ps, 0.25);
ps_rect($ps, 68.0, 496.0, 248.0, 98.0);
ps_stroke($ps);
ps_end_page($ps);
ps_close($ps);
ps_delete($ps);
if (!is_file($outputPath) || filesize($outputPath) === 0) {
    throw new RuntimeException('PostScript-файл не создан');
}
echo basename($outputPath), ' bytes=', filesize($outputPath), PHP_EOL;

Для ps_fill_stroke показаны обязательное состояние и проверяемый эффект; официальный тип возврата — bool. Во втором варианте изменена задача/геометрия, а результат проверяют по готовому PS, не по синтетическому echo. Нативный runtime требует PECL ps и pslib; здесь заявлена только синтаксическая проверка.
Что должно получиться в совместимом окружении: Прямоугольный контур залит и/или обведён согласно выбранной операции. Поверх результата добавлена контрольная рамка. ps-fill-stroke-workflow.ps bytes=<положительное число>.

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

Полный официальный текст карточки на английском

Purpose: Fills and strokes the current path

Description Fills and draws the path constructed with previously called drawing functions like ps_lineto .

Return: Return Values Returns true on success.

Связанные операции: ps_fill, ps_stroke.

ps_findfontНайти шрифт в текущем PostScript-документе.

PECL ps >= 1.1.0 · ps; pslib

ps_findfont(resource $psdoc, string $fontname, string $encoding, bool $embed = false): int

Найти шрифт в текущем PostScript-документе.

Официальная сигнатура. ps_findfont(resource $psdoc, string $fontname, string $encoding, bool $embed = false): int.

Доступность. Точная строка официального versions.xml: PECL ps >= 1.1.0.

ПараметрЧто приходит и зачем
resource $psdocОткрытый документ PS, созданный ps_new() и связанный с файлом через ps_open_file().
Точная формулировка PHP Manual

Resource identifier of the postscript file as returned by ps_new .

string $fontnameИмя доступного PostScript-шрифта, например Helvetica; это не произвольный CSS font-family.
Точная формулировка PHP Manual

The name of the font.

string $encodingИмя кодировки, которую понимает конкретное расширение и связанная нативная библиотека.
Точная формулировка PHP Manual

ps_findfont will try to load the file passed in the parameter encoding . Encoding files are of the same syntax as those used by dvips(1) . They contain a font encoding vector (which is currently not used but must be present) and a list of extra ligatures to extend the list of ligatures derived from the afm file. encoding can be null or the empty string if the default encoding (TeXBase1) shall be used. If the encoding is set to builtin then there will be no reencoding and the font specific encoding will be used. This is very useful with symbol fonts.

bool $embed = falseФлаг поведения текущего объекта; передавайте bool либо документированное 0/1.
Точная формулировка PHP Manual

If set to a value >0 the font will be embedded into the document. This requires the font outline (.pfb file) to be present.

Возврат. Тип int. Официальный текст: Return Values Returns the identifier of the font or zero in case of an error. The identifier is a positive number.

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

Минимальная операция: ps_findfontПример для указанного окружения
<?php
declare(strict_types=1);

if (!extension_loaded('ps')) {
    throw new RuntimeException('Нужно расширение ps');
}

$outputDir = __DIR__ . '/exports';
if (!is_dir($outputDir) && !mkdir($outputDir, 0775, true) && !is_dir($outputDir)) {
    throw new RuntimeException('Не создан каталог exports');
}
$outputPath = $outputDir . '/ps-findfont-minimal.ps';
$ps = ps_new();
if ($ps === false) { throw new RuntimeException('PS-ресурс не создан'); }
if (!ps_open_file($ps, $outputPath)) {
    ps_delete($ps);
    throw new RuntimeException('PostScript-файл не открыт');
}
ps_begin_page($ps, 595.0, 842.0);
// PostScript-файл и страница уже открыты в этом самодостаточном примере.
$fontId = ps_findfont($ps, 'Helvetica', 'builtin', false);
if ($fontId <= 0) { throw new RuntimeException('Шрифт не найден'); }
ps_setfont($ps, $fontId, 12.0);
$result = ps_findfont($ps, 'Helvetica', 'builtin', false);
if ($result === false || $result === 0) { throw new RuntimeException('Идентификатор/значение не получено'); }
ps_end_page($ps);
ps_close($ps);
ps_delete($ps);
if (!is_file($outputPath) || filesize($outputPath) === 0) {
    throw new RuntimeException('PostScript-файл не создан');
}
echo basename($outputPath), ' bytes=', filesize($outputPath), PHP_EOL;

Для ps_findfont показаны обязательное состояние и проверяемый эффект; официальный тип возврата — int. Пример сам создаёт ресурс, открывает файл и страницу, а затем завершает документ. Нативный runtime требует PECL ps и pslib; здесь заявлена только синтаксическая проверка.
Что должно получиться в совместимом окружении: Изменение видно в итоговом PostScript после завершения страницы и документа. ps-findfont-minimal.ps bytes=<положительное число>.

В составе документа: ps_findfontПример для указанного окружения
<?php
declare(strict_types=1);

if (!extension_loaded('ps')) {
    throw new RuntimeException('Нужно расширение ps');
}

$outputDir = __DIR__ . '/exports';
if (!is_dir($outputDir) && !mkdir($outputDir, 0775, true) && !is_dir($outputDir)) {
    throw new RuntimeException('Не создан каталог exports');
}
$outputPath = $outputDir . '/ps-findfont-workflow.ps';
$ps = ps_new();
if ($ps === false) { throw new RuntimeException('PS-ресурс не создан'); }
if (!ps_open_file($ps, $outputPath)) {
    ps_delete($ps);
    throw new RuntimeException('PostScript-файл не открыт');
}
ps_begin_page($ps, 595.0, 842.0);
// PostScript-файл и страница уже открыты в этом самодостаточном примере.
$fontId = ps_findfont($ps, 'Helvetica', 'builtin', false);
if ($fontId <= 0) { throw new RuntimeException('Шрифт не найден'); }
ps_setfont($ps, $fontId, 14.0);
$result = ps_findfont($ps, 'Times-Roman', 'builtin', false);
if ($result === false || $result === 0) { throw new RuntimeException('Идентификатор/значение не получено'); }
ps_setfont($ps, $result, 18.0);
ps_show_xy($ps, 'Шрифт найден и применён', 72.0, 650.0);
ps_end_page($ps);
ps_close($ps);
ps_delete($ps);
if (!is_file($outputPath) || filesize($outputPath) === 0) {
    throw new RuntimeException('PostScript-файл не создан');
}
echo basename($outputPath), ' bytes=', filesize($outputPath), PHP_EOL;

Для ps_findfont показаны обязательное состояние и проверяемый эффект; официальный тип возврата — int. Во втором варианте изменена задача/геометрия, а результат проверяют по готовому PS, не по синтетическому echo. Нативный runtime требует PECL ps и pslib; здесь заявлена только синтаксическая проверка.
Что должно получиться в совместимом окружении: Изменение видно в итоговом PostScript после завершения страницы и документа. Возвращённый идентификатор сразу применяется к тексту. ps-findfont-workflow.ps bytes=<положительное число>.

Отказ и граница проверки. сначала проверяется заявленный тип результата. Проверьте SearchPath, шрифт/encoding, активную страницу и наличие glyph; предупреждения направляйте в журнал, а не в бинарный ответ.

Полный официальный текст карточки на английском

Purpose: Loads a font

Description Loads a font for later use. Before text is output with a loaded font it must be set with ps_setfont . This function needs the adobe font metric file in order to calculate the space used up by the characters. A font which is loaded within a page will only be available on that page. Fonts which are to be used in the complete document have to be loaded before the first call of ps_begin_page . Calling ps_findfont between pages will make that font available for all following pages. The name of the afm file must be fontname .afm . If the font shall be embedded the file fontname .pfb containing the font outline must be present as well. Calling ps_findfont before the first page requires to output the postscript header which includes the BoundingBox for the whole document. Usually the BoundingBox is set with the first call of ps_begin_page which now comes after ps_findfont . Consequently the BoundingBox has not been set and a warning will be issued when ps_findfont is called. In order to prevent this situation, one should call ps_set_parameter to set the BoundingBox before ps_findfont is called.

Return: Return Values Returns the identifier of the font or zero in case of an error. The identifier is a positive number.

Связанные операции: ps_begin_page, ps_setfont.

ps_get_bufferПолучить буфер документа в текущем PostScript-документе.

PECL ps >= 1.1.0 · ps; pslib

ps_get_buffer(resource $psdoc): string

Получить буфер документа в текущем PostScript-документе.

Официальная сигнатура. ps_get_buffer(resource $psdoc): string.

Доступность. Точная строка официального versions.xml: PECL ps >= 1.1.0.

ПараметрЧто приходит и зачем
resource $psdocОткрытый документ PS, созданный ps_new() и связанный с файлом через ps_open_file().
Точная формулировка PHP Manual

Resource identifier of the postscript file as returned by ps_new .

Возврат. Тип string. Официальная страница не содержит отдельного абзаца о возврате; ориентируйтесь на сигнатуру, предупреждения и реальный артефакт.

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

Минимальная операция: ps_get_bufferПример для указанного окружения
<?php
declare(strict_types=1);

if (!extension_loaded('ps')) {
    throw new RuntimeException('Нужно расширение ps');
}

$ps = ps_new();
if ($ps === false) { throw new RuntimeException('PS-ресурс не создан'); }
$result = ps_get_buffer($ps);
var_dump($result);
ps_delete($ps);

Для ps_get_buffer показаны обязательное состояние и проверяемый эффект; официальный тип возврата — string. Пример сам создаёт ресурс, открывает файл и страницу, а затем завершает документ. Нативный runtime требует PECL ps и pslib; здесь заявлена только синтаксическая проверка.
Что должно получиться в совместимом окружении: string(0) ""

В составе документа: ps_get_bufferПример для указанного окружения
<?php
declare(strict_types=1);

if (!extension_loaded('ps')) {
    throw new RuntimeException('Нужно расширение ps');
}

$ps = ps_new();
if ($ps === false) { throw new RuntimeException('PS-ресурс не создан'); }
$result = ps_get_buffer($ps);
var_dump($result);
if ($result !== '') { throw new RuntimeException('Документация ожидает пустую строку'); }
echo 'fallback=write-to-file-or-direct-output', PHP_EOL;
ps_delete($ps);

Для ps_get_buffer показаны обязательное состояние и проверяемый эффект; официальный тип возврата — string. Во втором варианте изменена задача/геометрия, а результат проверяют по готовому PS, не по синтетическому echo. Нативный runtime требует PECL ps и pslib; здесь заявлена только синтаксическая проверка.
Что должно получиться в совместимом окружении: string(0) "" fallback=write-to-file-or-direct-output

Отказ и граница проверки. сначала проверяется заявленный тип результата. В зафиксированной документации функция не реализована и всегда возвращает пустую строку; используйте файл или прямой вывод и проверяйте готовый PS.

Полный официальный текст карточки на английском

Purpose: Fetches the full buffer containig the generated PS data

Description This function is not implemented yet. It will always return an empty string. The idea for a later implementation is to write the contents of the postscript file into an internal buffer if in memory creation is requested, and retrieve the buffer content with this function. Currently, documents created in memory are send to the browser without buffering. This function is currently not documented in detail.

Return:

Связанные операции: ps_open_file.

ps_get_parameterПолучить строковый параметр в текущем PostScript-документе.

PECL ps >= 1.1.0 · ps; pslib

ps_get_parameter(resource $psdoc, string $name, float $modifier = ?): string|false

Получить строковый параметр в текущем PostScript-документе.

Официальная сигнатура. ps_get_parameter(resource $psdoc, string $name, float $modifier = ?): string|false.

Доступность. Точная строка официального versions.xml: PECL ps >= 1.1.0.

ПараметрЧто приходит и зачем
resource $psdocОткрытый документ PS, созданный ps_new() и связанный с файлом через ps_open_file().
Точная формулировка PHP Manual

Resource identifier of the postscript file as returned by ps_new .

string $nameИмя параметра, макроса, цвета или другого объекта по договору выбранной функции.
Точная формулировка PHP Manual

Name of the parameter.

float $modifier = значение по умолчаниюДополнительный числовой модификатор параметра pslib; значение зависит от имени параметра.
Точная формулировка PHP Manual

An identifier needed if a parameter of a resource is requested, e.g. the size of an image. In such a case the resource id is passed.

Возврат. Тип string|false. Официальный текст: Return Values Returns the value of the parameter [return.falseforfailure].

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

Минимальная операция: ps_get_parameterПример для указанного окружения
<?php
declare(strict_types=1);

if (!extension_loaded('ps')) {
    throw new RuntimeException('Нужно расширение ps');
}

$outputDir = __DIR__ . '/exports';
if (!is_dir($outputDir) && !mkdir($outputDir, 0775, true) && !is_dir($outputDir)) {
    throw new RuntimeException('Не создан каталог exports');
}
$outputPath = $outputDir . '/ps-get-parameter-minimal.ps';
$ps = ps_new();
if ($ps === false) { throw new RuntimeException('PS-ресурс не создан'); }
if (!ps_open_file($ps, $outputPath)) {
    ps_delete($ps);
    throw new RuntimeException('PostScript-файл не открыт');
}
ps_begin_page($ps, 595.0, 842.0);
// PostScript-файл и страница уже открыты в этом самодостаточном примере.
$fontId = ps_findfont($ps, 'Helvetica', 'builtin', false);
if ($fontId <= 0) { throw new RuntimeException('Шрифт не найден'); }
ps_setfont($ps, $fontId, 12.0);
$result = ps_get_parameter($ps, 'dottedversion', 0.0);
if ($result === false || $result === 0) { throw new RuntimeException('Идентификатор/значение не получено'); }
ps_end_page($ps);
ps_close($ps);
ps_delete($ps);
if (!is_file($outputPath) || filesize($outputPath) === 0) {
    throw new RuntimeException('PostScript-файл не создан');
}
echo basename($outputPath), ' bytes=', filesize($outputPath), PHP_EOL;

Для ps_get_parameter показаны обязательное состояние и проверяемый эффект; официальный тип возврата — string|false. Пример сам создаёт ресурс, открывает файл и страницу, а затем завершает документ. Нативный runtime требует PECL ps и pslib; здесь заявлена только синтаксическая проверка.
Что должно получиться в совместимом окружении: Изменение видно в итоговом PostScript после завершения страницы и документа. ps-get-parameter-minimal.ps bytes=<положительное число>.

В составе документа: ps_get_parameterПример для указанного окружения
<?php
declare(strict_types=1);

if (!extension_loaded('ps')) {
    throw new RuntimeException('Нужно расширение ps');
}

$outputDir = __DIR__ . '/exports';
if (!is_dir($outputDir) && !mkdir($outputDir, 0775, true) && !is_dir($outputDir)) {
    throw new RuntimeException('Не создан каталог exports');
}
$outputPath = $outputDir . '/ps-get-parameter-workflow.ps';
$ps = ps_new();
if ($ps === false) { throw new RuntimeException('PS-ресурс не создан'); }
if (!ps_open_file($ps, $outputPath)) {
    ps_delete($ps);
    throw new RuntimeException('PostScript-файл не открыт');
}
ps_begin_page($ps, 595.0, 842.0);
// PostScript-файл и страница уже открыты в этом самодостаточном примере.
$fontId = ps_findfont($ps, 'Helvetica', 'builtin', false);
if ($fontId <= 0) { throw new RuntimeException('Шрифт не найден'); }
ps_setfont($ps, $fontId, 14.0);
$result = ps_get_parameter($ps, 'fontname', $fontId);
if ($result === false || $result === 0) { throw new RuntimeException('Идентификатор/значение не получено'); }
if (!is_string($result) || $result === '') { throw new RuntimeException('Ожидалась строка'); }
ps_set_info($ps, 'Subject', $result);
ps_end_page($ps);
ps_close($ps);
ps_delete($ps);
if (!is_file($outputPath) || filesize($outputPath) === 0) {
    throw new RuntimeException('PostScript-файл не создан');
}
echo basename($outputPath), ' bytes=', filesize($outputPath), PHP_EOL;

Для ps_get_parameter показаны обязательное состояние и проверяемый эффект; официальный тип возврата — string|false. Во втором варианте изменена задача/геометрия, а результат проверяют по готовому PS, не по синтетическому echo. Нативный runtime требует PECL ps и pslib; здесь заявлена только синтаксическая проверка.
Что должно получиться в совместимом окружении: Изменение видно в итоговом PostScript после завершения страницы и документа. Полученная строка записана в метаданные документа. ps-get-parameter-workflow.ps bytes=<положительное число>.

Отказ и граница проверки. false — документированный сигнал отказа. Операция зависит от открытого документа, активной страницы и графического состояния; проверяйте готовый PS независимым инструментом.

Полный официальный текст карточки на английском

Purpose: Gets certain parameters

Description Gets several parameters which were directly set by ps_set_parameter or indirectly by one of the other functions. Parameters are by definition string values. This function cannot be used to retrieve resources which were also set by ps_set_parameter . The parameter name can have the following values. fontname The name of the currently active font or the font whose identifier is passed in parameter modifier . fontencoding The encoding of the currently active font. dottedversion The version of the underlying pslib library in the format [lt]major[gt].[lt]minor[gt].[lt]subminor[gt] scope The current drawing scope. Can be object, document, null, page, pattern, path, template, prolog, font, glyph. ligaturedisolvechar The character which dissolves a ligature. If your are using a font which contains the ligature `ff' and `|' is the char to dissolve the ligature, then `f|f' will result in two `f' instead of the ligature `ff'. imageencoding The encoding used for encoding images. Can be either hex or 85 . hex encoding uses two bytes in the postscript file each byte in the image. 85 stand for Ascii85 encoding. linenumbermode Set to paragraph if lines are numbered within a paragraph or box if they are numbered within the surrounding box. linebreak Only used if text is output with ps_show_boxed . If set to true a carriage return will add a line break. parbreak Only used if text is output with ps_show_boxed . If set to true a carriage return will start a new paragraph. hyphenation Only used if text is output with ps_show_boxed . If set to true the paragraph will be hyphenated if a hypen dictionary is set and exists. hyphendict Filename of the dictionary used for hyphenation pattern.

Return: Return Values Returns the value of the parameter [return.falseforfailure].

Связанные операции: ps_set_parameter.

ps_get_valueПолучить значение поля в текущем PostScript-документе.

PECL ps >= 1.1.0 · ps; pslib

ps_get_value(resource $psdoc, string $name, float $modifier = ?): float

Получить значение поля в текущем PostScript-документе.

Официальная сигнатура. ps_get_value(resource $psdoc, string $name, float $modifier = ?): float.

Доступность. Точная строка официального versions.xml: PECL ps >= 1.1.0.

ПараметрЧто приходит и зачем
resource $psdocОткрытый документ PS, созданный ps_new() и связанный с файлом через ps_open_file().
Точная формулировка PHP Manual

Resource identifier of the postscript file as returned by ps_new .

string $nameИмя параметра, макроса, цвета или другого объекта по договору выбранной функции.
Точная формулировка PHP Manual

Name of the value.

float $modifier = значение по умолчаниюДополнительный числовой модификатор параметра pslib; значение зависит от имени параметра.
Точная формулировка PHP Manual

The parameter modifier specifies the resource for which the value is to be retrieved. This can be the id of a font or an image.

Возврат. Тип float. Официальный текст: Return Values Returns the value of the parameter or false.

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

Минимальная операция: ps_get_valueПример для указанного окружения
<?php
declare(strict_types=1);

if (!extension_loaded('ps')) {
    throw new RuntimeException('Нужно расширение ps');
}

$outputDir = __DIR__ . '/exports';
if (!is_dir($outputDir) && !mkdir($outputDir, 0775, true) && !is_dir($outputDir)) {
    throw new RuntimeException('Не создан каталог exports');
}
$outputPath = $outputDir . '/ps-get-value-minimal.ps';
$ps = ps_new();
if ($ps === false) { throw new RuntimeException('PS-ресурс не создан'); }
if (!ps_open_file($ps, $outputPath)) {
    ps_delete($ps);
    throw new RuntimeException('PostScript-файл не открыт');
}
ps_begin_page($ps, 595.0, 842.0);
// PostScript-файл и страница уже открыты в этом самодостаточном примере.
$fontId = ps_findfont($ps, 'Helvetica', 'builtin', false);
if ($fontId <= 0) { throw new RuntimeException('Шрифт не найден'); }
ps_setfont($ps, $fontId, 12.0);
$result = ps_get_value($ps, 'leading', 0.0);
ps_end_page($ps);
ps_close($ps);
ps_delete($ps);
if (!is_file($outputPath) || filesize($outputPath) === 0) {
    throw new RuntimeException('PostScript-файл не создан');
}
echo basename($outputPath), ' bytes=', filesize($outputPath), PHP_EOL;

Для ps_get_value показаны обязательное состояние и проверяемый эффект; официальный тип возврата — float. Пример сам создаёт ресурс, открывает файл и страницу, а затем завершает документ. Нативный runtime требует PECL ps и pslib; здесь заявлена только синтаксическая проверка.
Что должно получиться в совместимом окружении: Изменение видно в итоговом PostScript после завершения страницы и документа. ps-get-value-minimal.ps bytes=<положительное число>.

В составе документа: ps_get_valueПример для указанного окружения
<?php
declare(strict_types=1);

if (!extension_loaded('ps')) {
    throw new RuntimeException('Нужно расширение ps');
}

$outputDir = __DIR__ . '/exports';
if (!is_dir($outputDir) && !mkdir($outputDir, 0775, true) && !is_dir($outputDir)) {
    throw new RuntimeException('Не создан каталог exports');
}
$outputPath = $outputDir . '/ps-get-value-workflow.ps';
$ps = ps_new();
if ($ps === false) { throw new RuntimeException('PS-ресурс не создан'); }
if (!ps_open_file($ps, $outputPath)) {
    ps_delete($ps);
    throw new RuntimeException('PostScript-файл не открыт');
}
ps_begin_page($ps, 595.0, 842.0);
// PostScript-файл и страница уже открыты в этом самодостаточном примере.
$fontId = ps_findfont($ps, 'Helvetica', 'builtin', false);
if ($fontId <= 0) { throw new RuntimeException('Шрифт не найден'); }
ps_setfont($ps, $fontId, 14.0);
$result = ps_get_value($ps, 'textx', $fontId);
if (!is_float($result) && !is_int($result)) { throw new RuntimeException('Ожидалось измерение'); }
ps_moveto($ps, 72.0, 660.0);
ps_lineto($ps, 72.0 + max(1.0, (float) $result), 660.0);
ps_stroke($ps);
ps_end_page($ps);
ps_close($ps);
ps_delete($ps);
if (!is_file($outputPath) || filesize($outputPath) === 0) {
    throw new RuntimeException('PostScript-файл не создан');
}
echo basename($outputPath), ' bytes=', filesize($outputPath), PHP_EOL;

Для ps_get_value показаны обязательное состояние и проверяемый эффект; официальный тип возврата — float. Во втором варианте изменена задача/геометрия, а результат проверяют по готовому PS, не по синтетическому echo. Нативный runtime требует PECL ps и pslib; здесь заявлена только синтаксическая проверка.
Что должно получиться в совместимом окружении: Изменение видно в итоговом PostScript после завершения страницы и документа. Возвращённое измерение задаёт длину контрольной линии. ps-get-value-workflow.ps bytes=<положительное число>.

Отказ и граница проверки. сначала проверяется заявленный тип результата. Операция зависит от открытого документа, активной страницы и графического состояния; проверяйте готовый PS независимым инструментом.

Полный официальный текст карточки на английском

Purpose: Gets certain values

Description Gets several values which were set by ps_set_value . Values are by definition float values. The parameter name can have the following values. fontsize The size of the currently active font or the font whose identifier is passed in parameter modifier . font The currently active font itself. imagewidth The width of the image whose id is passed in the parameter modifier . imageheight The height of the image whose id is passed in the parameter modifier . capheight The height of a capital M in the currently active font or the font whose identifier is passed in parameter modifier . ascender The ascender of the currently active font or the font whose identifier is passed in parameter modifier . descender The descender of the currently active font or the font whose identifier is passed in parameter modifier . italicangle The italicangle of the currently active font or the font whose identifier is passed in parameter modifier . underlineposition The underlineposition of the currently active font or the font whose identifier is passed in parameter modifier . underlinethickness The underlinethickness of the currently active font or the font whose identifier is passed in parameter modifier . textx The current x-position for text output. texty The current y-position for text output. textrendering The current mode for text rendering. textrise The space by which text is risen above the base line. leading The distance between text lines in points. wordspacing The space between words as a multiple of the width of a space char. charspacing The space between chars. If charspacing is != 0.0 ligatures will always be dissolved. hyphenminchars Minimum number of chars hyphenated at the end of a word. parindent Indention of the first n line in a paragraph. numindentlines Number of line in a paragraph to indent if parindent != 0.0. parskip Distance between paragraphs. linenumberspace Overall space in front of each line for the line number. linenumbersep Space between the line and the line number. major The major version number of pslib. minor The minor version number of pslib. subminor , revision The subminor version number of pslib.

Return: Return Values Returns the value of the parameter or false.

Связанные операции: ps_set_value.

ps_hyphenateРасставить переносы в текущем PostScript-документе.

PECL ps >= 1.1.1 · ps; pslib

ps_hyphenate(resource $psdoc, string $text): array|false

Расставить переносы в текущем PostScript-документе.

Официальная сигнатура. ps_hyphenate(resource $psdoc, string $text): array|false.

Доступность. Точная строка официального versions.xml: PECL ps >= 1.1.1.

ПараметрЧто приходит и зачем
resource $psdocОткрытый документ PS, созданный ps_new() и связанный с файлом через ps_open_file().
Точная формулировка PHP Manual

Resource identifier of the postscript file as returned by ps_new .

string $textТекст, который попадёт в документ или будет измерен.
Точная формулировка PHP Manual

text should not contain any non alpha characters. Possible positions for breaks are returned in an array of integer numbers. Each number is the position of the char in text after which a hyphenation can take place.

Возврат. Тип array|false. Официальный текст: Return Values An array of integers indicating the position of possible breaks in the text [return.falseforfailure].

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

Минимальная операция: ps_hyphenateПример для указанного окружения
<?php
declare(strict_types=1);

if (!extension_loaded('ps')) {
    throw new RuntimeException('Нужно расширение ps');
}

$outputDir = __DIR__ . '/exports';
if (!is_dir($outputDir) && !mkdir($outputDir, 0775, true) && !is_dir($outputDir)) {
    throw new RuntimeException('Не создан каталог exports');
}
$outputPath = $outputDir . '/ps-hyphenate-minimal.ps';
$ps = ps_new();
if ($ps === false) { throw new RuntimeException('PS-ресурс не создан'); }
if (!ps_open_file($ps, $outputPath)) {
    ps_delete($ps);
    throw new RuntimeException('PostScript-файл не открыт');
}
ps_begin_page($ps, 595.0, 842.0);
// PostScript-файл и страница уже открыты в этом самодостаточном примере.
$fontId = ps_findfont($ps, 'Helvetica', 'builtin', false);
if ($fontId <= 0) { throw new RuntimeException('Шрифт не найден'); }
ps_setfont($ps, $fontId, 12.0);
$result = ps_hyphenate($ps, 'Order #42');
if ($result === false || $result === 0) { throw new RuntimeException('Идентификатор/значение не получено'); }
ps_end_page($ps);
ps_close($ps);
ps_delete($ps);
if (!is_file($outputPath) || filesize($outputPath) === 0) {
    throw new RuntimeException('PostScript-файл не создан');
}
echo basename($outputPath), ' bytes=', filesize($outputPath), PHP_EOL;

Для ps_hyphenate показаны обязательное состояние и проверяемый эффект; официальный тип возврата — array|false. Пример сам создаёт ресурс, открывает файл и страницу, а затем завершает документ. Нативный runtime требует PECL ps и pslib; здесь заявлена только синтаксическая проверка.
Что должно получиться в совместимом окружении: Изменение видно в итоговом PostScript после завершения страницы и документа. ps-hyphenate-minimal.ps bytes=<положительное число>.

В составе документа: ps_hyphenateПример для указанного окружения
<?php
declare(strict_types=1);

if (!extension_loaded('ps')) {
    throw new RuntimeException('Нужно расширение ps');
}

$outputDir = __DIR__ . '/exports';
if (!is_dir($outputDir) && !mkdir($outputDir, 0775, true) && !is_dir($outputDir)) {
    throw new RuntimeException('Не создан каталог exports');
}
$outputPath = $outputDir . '/ps-hyphenate-workflow.ps';
$ps = ps_new();
if ($ps === false) { throw new RuntimeException('PS-ресурс не создан'); }
if (!ps_open_file($ps, $outputPath)) {
    ps_delete($ps);
    throw new RuntimeException('PostScript-файл не открыт');
}
ps_begin_page($ps, 595.0, 842.0);
// PostScript-файл и страница уже открыты в этом самодостаточном примере.
$fontId = ps_findfont($ps, 'Helvetica', 'builtin', false);
if ($fontId <= 0) { throw new RuntimeException('Шрифт не найден'); }
ps_setfont($ps, $fontId, 14.0);
$result = ps_hyphenate($ps, 'Delivery act #73');
if ($result === false || $result === 0) { throw new RuntimeException('Идентификатор/значение не получено'); }
if (!is_array($result)) { throw new RuntimeException('Ожидался массив результата'); }
ps_show_xy($ps, 'Элементов: ' . count($result), 72.0, 650.0);
ps_end_page($ps);
ps_close($ps);
ps_delete($ps);
if (!is_file($outputPath) || filesize($outputPath) === 0) {
    throw new RuntimeException('PostScript-файл не создан');
}
echo basename($outputPath), ' bytes=', filesize($outputPath), PHP_EOL;

Для ps_hyphenate показаны обязательное состояние и проверяемый эффект; официальный тип возврата — array|false. Во втором варианте изменена задача/геометрия, а результат проверяют по готовому PS, не по синтетическому echo. Нативный runtime требует PECL ps и pslib; здесь заявлена только синтаксическая проверка.
Что должно получиться в совместимом окружении: Изменение видно в итоговом PostScript после завершения страницы и документа. Возвращённый массив используется в подписи страницы. ps-hyphenate-workflow.ps bytes=<положительное число>.

Отказ и граница проверки. false — документированный сигнал отказа. Операция зависит от открытого документа, активной страницы и графического состояния; проверяйте готовый PS независимым инструментом.

Полный официальный текст карточки на английском

Purpose: Hyphenates a word

Description Hyphenates the passed word. ps_hyphenate evaluates the value hyphenminchars (set by ps_set_value ) and the parameter hyphendict (set by ps_set_parameter ). hyphendict must be set before calling this function. This function requires the locale category LC_CTYPE to be set properly. This is done when the extension is initialized by using the environment variables. On Unix systems read the man page of locale for more information.

Return: Return Values An array of integers indicating the position of possible breaks in the text [return.falseforfailure].

Связанные операции: ps_show_boxed.

ps_include_fileВключить связанный файл в текущем PostScript-документе.

PECL ps >= 1.3.4 · ps; pslib

ps_include_file(resource $psdoc, string $file): bool

Включить связанный файл в текущем PostScript-документе.

Официальная сигнатура. ps_include_file(resource $psdoc, string $file): bool.

Доступность. Точная строка официального versions.xml: PECL ps >= 1.3.4.

ПараметрЧто приходит и зачем
resource $psdocОткрытый документ PS, созданный ps_new() и связанный с файлом через ps_open_file().
Точная формулировка PHP Manual

Resource identifier of the postscript file as returned by ps_new .

string $fileПуть к существующему файлу, который включается в текущий PostScript-документ.

Возврат. Тип bool. Официальный текст: Return Values Returns true on success.

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

Минимальная операция: ps_include_fileПример для указанного окружения
<?php
declare(strict_types=1);

if (!extension_loaded('ps')) {
    throw new RuntimeException('Нужно расширение ps');
}

$outputDir = __DIR__ . '/exports';
if (!is_dir($outputDir) && !mkdir($outputDir, 0775, true) && !is_dir($outputDir)) {
    throw new RuntimeException('Не создан каталог exports');
}
$outputPath = $outputDir . '/ps-include-file-minimal.ps';
$ps = ps_new();
if ($ps === false) { throw new RuntimeException('PS-ресурс не создан'); }
if (!ps_open_file($ps, $outputPath)) {
    ps_delete($ps);
    throw new RuntimeException('PostScript-файл не открыт');
}
ps_begin_page($ps, 595.0, 842.0);
// PostScript-файл и страница уже открыты в этом самодостаточном примере.
$fontId = ps_findfont($ps, 'Helvetica', 'builtin', false);
if ($fontId <= 0) { throw new RuntimeException('Шрифт не найден'); }
ps_setfont($ps, $fontId, 12.0);
$includeFixture = __DIR__ . '/fixtures/header.ps';
if (!is_file($includeFixture)) { throw new RuntimeException('Нужен PostScript fixture'); }
$result = ps_include_file($ps, __DIR__ . '/fixtures/header.ps');
if ($result !== true) { throw new RuntimeException('Операция отклонена'); }
ps_end_page($ps);
ps_close($ps);
ps_delete($ps);
if (!is_file($outputPath) || filesize($outputPath) === 0) {
    throw new RuntimeException('PostScript-файл не создан');
}
echo basename($outputPath), ' bytes=', filesize($outputPath), PHP_EOL;

Для ps_include_file показаны обязательное состояние и проверяемый эффект; официальный тип возврата — bool. Пример сам создаёт ресурс, открывает файл и страницу, а затем завершает документ. Нативный runtime требует PECL ps и pslib; здесь заявлена только синтаксическая проверка.
Что должно получиться в совместимом окружении: Изменение видно в итоговом PostScript после завершения страницы и документа. ps-include-file-minimal.ps bytes=<положительное число>.

В составе документа: ps_include_fileПример для указанного окружения
<?php
declare(strict_types=1);

if (!extension_loaded('ps')) {
    throw new RuntimeException('Нужно расширение ps');
}

$outputDir = __DIR__ . '/exports';
if (!is_dir($outputDir) && !mkdir($outputDir, 0775, true) && !is_dir($outputDir)) {
    throw new RuntimeException('Не создан каталог exports');
}
$outputPath = $outputDir . '/ps-include-file-workflow.ps';
$ps = ps_new();
if ($ps === false) { throw new RuntimeException('PS-ресурс не создан'); }
if (!ps_open_file($ps, $outputPath)) {
    ps_delete($ps);
    throw new RuntimeException('PostScript-файл не открыт');
}
ps_begin_page($ps, 595.0, 842.0);
// PostScript-файл и страница уже открыты в этом самодостаточном примере.
$fontId = ps_findfont($ps, 'Helvetica', 'builtin', false);
if ($fontId <= 0) { throw new RuntimeException('Шрифт не найден'); }
ps_setfont($ps, $fontId, 14.0);
$includeFixture = __DIR__ . '/fixtures/footer.ps';
if (!is_file($includeFixture)) { throw new RuntimeException('Нужен PostScript fixture'); }
$result = ps_include_file($ps, __DIR__ . '/fixtures/footer.ps');
if ($result !== true) { throw new RuntimeException('Операция отклонена'); }
ps_show_xy($ps, 'Подключён общий фрагмент', 72.0, 650.0);
ps_end_page($ps);
ps_close($ps);
ps_delete($ps);
if (!is_file($outputPath) || filesize($outputPath) === 0) {
    throw new RuntimeException('PostScript-файл не создан');
}
echo basename($outputPath), ' bytes=', filesize($outputPath), PHP_EOL;

Для ps_include_file показаны обязательное состояние и проверяемый эффект; официальный тип возврата — bool. Во втором варианте изменена задача/геометрия, а результат проверяют по готовому PS, не по синтетическому echo. Нативный runtime требует PECL ps и pslib; здесь заявлена только синтаксическая проверка.
Что должно получиться в совместимом окружении: Изменение видно в итоговом PostScript после завершения страницы и документа. После включения фрагмента добавлена контрольная подпись. ps-include-file-workflow.ps bytes=<положительное число>.

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

Полный официальный текст карточки на английском

Purpose: Reads an external file with raw PostScript code

Description

Return: Return Values Returns true on success.

ps_linetoПровести линию в текущем PostScript-документе.

PECL ps >= 1.1.0 · ps; pslib

ps_lineto(resource $psdoc, float $x, float $y): bool

Провести линию в текущем PostScript-документе.

Официальная сигнатура. ps_lineto(resource $psdoc, float $x, float $y): bool.

Доступность. Точная строка официального versions.xml: PECL ps >= 1.1.0.

ПараметрЧто приходит и зачем
resource $psdocОткрытый документ PS, созданный ps_new() и связанный с файлом через ps_open_file().
Точная формулировка PHP Manual

Resource identifier of the postscript file as returned by ps_new .

float $xКоордината X в пунктах PostScript; начало системы координат по умолчанию находится слева снизу.
Точная формулировка PHP Manual

x-coordinate of the end point of the line.

float $yКоордината Y в пунктах PostScript; значение растёт снизу вверх до преобразования системы координат.
Точная формулировка PHP Manual

y-coordinate of the end point of the line.

Возврат. Тип bool. Официальный текст: Return Values Returns true on success.

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

Минимальная операция: ps_linetoПример для указанного окружения
<?php
declare(strict_types=1);

if (!extension_loaded('ps')) {
    throw new RuntimeException('Нужно расширение ps');
}

$outputDir = __DIR__ . '/exports';
if (!is_dir($outputDir) && !mkdir($outputDir, 0775, true) && !is_dir($outputDir)) {
    throw new RuntimeException('Не создан каталог exports');
}
$outputPath = $outputDir . '/ps-lineto-minimal.ps';
$ps = ps_new();
if ($ps === false) { throw new RuntimeException('PS-ресурс не создан'); }
if (!ps_open_file($ps, $outputPath)) {
    ps_delete($ps);
    throw new RuntimeException('PostScript-файл не открыт');
}
ps_begin_page($ps, 595.0, 842.0);
// PostScript-файл и страница уже открыты в этом самодостаточном примере.
$fontId = ps_findfont($ps, 'Helvetica', 'builtin', false);
if ($fontId <= 0) { throw new RuntimeException('Шрифт не найден'); }
ps_setfont($ps, $fontId, 12.0);
ps_moveto($ps, 72.0, 700.0);
$result = ps_lineto($ps, 100.0, 120.0);
if ($result !== true) { throw new RuntimeException('Операция отклонена'); }
ps_stroke($ps);
ps_end_page($ps);
ps_close($ps);
ps_delete($ps);
if (!is_file($outputPath) || filesize($outputPath) === 0) {
    throw new RuntimeException('PostScript-файл не создан');
}
echo basename($outputPath), ' bytes=', filesize($outputPath), PHP_EOL;

Для ps_lineto показаны обязательное состояние и проверяемый эффект; официальный тип возврата — bool. Пример сам создаёт ресурс, открывает файл и страницу, а затем завершает документ. Нативный runtime требует PECL ps и pslib; здесь заявлена только синтаксическая проверка.
Что должно получиться в совместимом окружении: На странице появляется соответствующий контур; он станет видимым после ps_stroke() или ps_fill(). ps-lineto-minimal.ps bytes=<положительное число>.

В составе документа: ps_linetoПример для указанного окружения
<?php
declare(strict_types=1);

if (!extension_loaded('ps')) {
    throw new RuntimeException('Нужно расширение ps');
}

$outputDir = __DIR__ . '/exports';
if (!is_dir($outputDir) && !mkdir($outputDir, 0775, true) && !is_dir($outputDir)) {
    throw new RuntimeException('Не создан каталог exports');
}
$outputPath = $outputDir . '/ps-lineto-workflow.ps';
$ps = ps_new();
if ($ps === false) { throw new RuntimeException('PS-ресурс не создан'); }
if (!ps_open_file($ps, $outputPath)) {
    ps_delete($ps);
    throw new RuntimeException('PostScript-файл не открыт');
}
ps_begin_page($ps, 595.0, 842.0);
// PostScript-файл и страница уже открыты в этом самодостаточном примере.
$fontId = ps_findfont($ps, 'Helvetica', 'builtin', false);
if ($fontId <= 0) { throw new RuntimeException('Шрифт не найден'); }
ps_setfont($ps, $fontId, 14.0);
ps_moveto($ps, 72.0, 700.0);
$result = ps_lineto($ps, 160.0, 240.0);
if ($result !== true) { throw new RuntimeException('Операция отклонена'); }
ps_stroke($ps);
ps_show_xy($ps, 'Контрольный контур', 72.0, 670.0);
ps_end_page($ps);
ps_close($ps);
ps_delete($ps);
if (!is_file($outputPath) || filesize($outputPath) === 0) {
    throw new RuntimeException('PostScript-файл не создан');
}
echo basename($outputPath), ' bytes=', filesize($outputPath), PHP_EOL;

Для ps_lineto показаны обязательное состояние и проверяемый эффект; официальный тип возврата — bool. Во втором варианте изменена задача/геометрия, а результат проверяют по готовому PS, не по синтетическому echo. Нативный runtime требует PECL ps и pslib; здесь заявлена только синтаксическая проверка.
Что должно получиться в совместимом окружении: На странице появляется соответствующий контур; он станет видимым после ps_stroke() или ps_fill(). Рядом с контуром напечатана контрольная подпись. ps-lineto-workflow.ps bytes=<положительное число>.

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

Полный официальный текст карточки на английском

Purpose: Draws a line

Description Adds a straight line from the current point to the given coordinates to the current path. Use ps_moveto to set the starting point of the line.

Return: Return Values Returns true on success.

Связанные операции: ps_moveto.

ps_makespotcolorСоздать плашечный цвет в текущем PostScript-документе.

PECL ps >= 1.1.0 · ps; pslib

ps_makespotcolor(resource $psdoc, string $name, int $reserved = 0): int

Создать плашечный цвет в текущем PostScript-документе.

Официальная сигнатура. ps_makespotcolor(resource $psdoc, string $name, int $reserved = 0): int.

Доступность. Точная строка официального versions.xml: PECL ps >= 1.1.0.

ПараметрЧто приходит и зачем
resource $psdocОткрытый документ PS, созданный ps_new() и связанный с файлом через ps_open_file().
Точная формулировка PHP Manual

Resource identifier of the postscript file as returned by ps_new .

string $nameИмя параметра, макроса, цвета или другого объекта по договору выбранной функции.
Точная формулировка PHP Manual

Name of the spot color, e.g. Pantone 5565.

int $reserved = 0Зарезервированный параметр API; оставляйте документированное значение 0.

Возврат. Тип int. Официальный текст: Return Values The id of the new spot color or 0 in case of an error.

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

Минимальная операция: ps_makespotcolorПример для указанного окружения
<?php
declare(strict_types=1);

if (!extension_loaded('ps')) {
    throw new RuntimeException('Нужно расширение ps');
}

$outputDir = __DIR__ . '/exports';
if (!is_dir($outputDir) && !mkdir($outputDir, 0775, true) && !is_dir($outputDir)) {
    throw new RuntimeException('Не создан каталог exports');
}
$outputPath = $outputDir . '/ps-makespotcolor-minimal.ps';
$ps = ps_new();
if ($ps === false) { throw new RuntimeException('PS-ресурс не создан'); }
if (!ps_open_file($ps, $outputPath)) {
    ps_delete($ps);
    throw new RuntimeException('PostScript-файл не открыт');
}
ps_begin_page($ps, 595.0, 842.0);
// PostScript-файл и страница уже открыты в этом самодостаточном примере.
$fontId = ps_findfont($ps, 'Helvetica', 'builtin', false);
if ($fontId <= 0) { throw new RuntimeException('Шрифт не найден'); }
ps_setfont($ps, $fontId, 12.0);
$result = ps_makespotcolor($ps, 'BrandBlue', 0);
if ($result === false || $result === 0) { throw new RuntimeException('Идентификатор/значение не получено'); }
ps_end_page($ps);
ps_close($ps);
ps_delete($ps);
if (!is_file($outputPath) || filesize($outputPath) === 0) {
    throw new RuntimeException('PostScript-файл не создан');
}
echo basename($outputPath), ' bytes=', filesize($outputPath), PHP_EOL;

Для ps_makespotcolor показаны обязательное состояние и проверяемый эффект; официальный тип возврата — int. Пример сам создаёт ресурс, открывает файл и страницу, а затем завершает документ. Нативный runtime требует PECL ps и pslib; здесь заявлена только синтаксическая проверка.
Что должно получиться в совместимом окружении: Изменение видно в итоговом PostScript после завершения страницы и документа. ps-makespotcolor-minimal.ps bytes=<положительное число>.

В составе документа: ps_makespotcolorПример для указанного окружения
<?php
declare(strict_types=1);

if (!extension_loaded('ps')) {
    throw new RuntimeException('Нужно расширение ps');
}

$outputDir = __DIR__ . '/exports';
if (!is_dir($outputDir) && !mkdir($outputDir, 0775, true) && !is_dir($outputDir)) {
    throw new RuntimeException('Не создан каталог exports');
}
$outputPath = $outputDir . '/ps-makespotcolor-workflow.ps';
$ps = ps_new();
if ($ps === false) { throw new RuntimeException('PS-ресурс не создан'); }
if (!ps_open_file($ps, $outputPath)) {
    ps_delete($ps);
    throw new RuntimeException('PostScript-файл не открыт');
}
ps_begin_page($ps, 595.0, 842.0);
// PostScript-файл и страница уже открыты в этом самодостаточном примере.
$fontId = ps_findfont($ps, 'Helvetica', 'builtin', false);
if ($fontId <= 0) { throw new RuntimeException('Шрифт не найден'); }
ps_setfont($ps, $fontId, 14.0);
$result = ps_makespotcolor($ps, 'BrandOrange', 0);
if ($result === false || $result === 0) { throw new RuntimeException('Идентификатор/значение не получено'); }
ps_setcolor($ps, 'fill', 'spot', $result, 0.75, 0.0, 0.0);
ps_rect($ps, 72.0, 610.0, 180.0, 42.0);
ps_fill($ps);
ps_end_page($ps);
ps_close($ps);
ps_delete($ps);
if (!is_file($outputPath) || filesize($outputPath) === 0) {
    throw new RuntimeException('PostScript-файл не создан');
}
echo basename($outputPath), ' bytes=', filesize($outputPath), PHP_EOL;

Для ps_makespotcolor показаны обязательное состояние и проверяемый эффект; официальный тип возврата — int. Во втором варианте изменена задача/геометрия, а результат проверяют по готовому PS, не по синтетическому echo. Нативный runtime требует PECL ps и pslib; здесь заявлена только синтаксическая проверка.
Что должно получиться в совместимом окружении: Изменение видно в итоговом PostScript после завершения страницы и документа. Возвращённый плашечный цвет применён к образцу. ps-makespotcolor-workflow.ps bytes=<положительное число>.

Отказ и граница проверки. сначала проверяется заявленный тип результата. Операция зависит от открытого документа, активной страницы и графического состояния; проверяйте готовый PS независимым инструментом.

Полный официальный текст карточки на английском

Purpose: Create spot color

Description Creates a spot color from the current fill color. The fill color must be defined in rgb, cmyk or gray colorspace. The spot color name can be an arbitrary name. A spot color can be set as any color with ps_setcolor . When the document is not printed but displayed by an postscript viewer the given color in the specified color space is use.

Return: Return Values The id of the new spot color or 0 in case of an error.

Связанные операции: ps_setcolor.

ps_movetoПереместить текущую точку в текущем PostScript-документе.

PECL ps >= 1.1.0 · ps; pslib

ps_moveto(resource $psdoc, float $x, float $y): bool

Переместить текущую точку в текущем PostScript-документе.

Официальная сигнатура. ps_moveto(resource $psdoc, float $x, float $y): bool.

Доступность. Точная строка официального versions.xml: PECL ps >= 1.1.0.

ПараметрЧто приходит и зачем
resource $psdocОткрытый документ PS, созданный ps_new() и связанный с файлом через ps_open_file().
Точная формулировка PHP Manual

Resource identifier of the postscript file as returned by ps_new .

float $xКоордината X в пунктах PostScript; начало системы координат по умолчанию находится слева снизу.
Точная формулировка PHP Manual

x-coordinate of the point to move to.

float $yКоордината Y в пунктах PostScript; значение растёт снизу вверх до преобразования системы координат.
Точная формулировка PHP Manual

y-coordinate of the point to move to.

Возврат. Тип bool. Официальный текст: Return Values Returns true on success.

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

Минимальная операция: ps_movetoПример для указанного окружения
<?php
declare(strict_types=1);

if (!extension_loaded('ps')) {
    throw new RuntimeException('Нужно расширение ps');
}

$outputDir = __DIR__ . '/exports';
if (!is_dir($outputDir) && !mkdir($outputDir, 0775, true) && !is_dir($outputDir)) {
    throw new RuntimeException('Не создан каталог exports');
}
$outputPath = $outputDir . '/ps-moveto-minimal.ps';
$ps = ps_new();
if ($ps === false) { throw new RuntimeException('PS-ресурс не создан'); }
if (!ps_open_file($ps, $outputPath)) {
    ps_delete($ps);
    throw new RuntimeException('PostScript-файл не открыт');
}
ps_begin_page($ps, 595.0, 842.0);
// PostScript-файл и страница уже открыты в этом самодостаточном примере.
$fontId = ps_findfont($ps, 'Helvetica', 'builtin', false);
if ($fontId <= 0) { throw new RuntimeException('Шрифт не найден'); }
ps_setfont($ps, $fontId, 12.0);
ps_moveto($ps, 72.0, 700.0);
$result = ps_moveto($ps, 100.0, 120.0);
if ($result !== true) { throw new RuntimeException('Операция отклонена'); }
ps_stroke($ps);
ps_end_page($ps);
ps_close($ps);
ps_delete($ps);
if (!is_file($outputPath) || filesize($outputPath) === 0) {
    throw new RuntimeException('PostScript-файл не создан');
}
echo basename($outputPath), ' bytes=', filesize($outputPath), PHP_EOL;

Для ps_moveto показаны обязательное состояние и проверяемый эффект; официальный тип возврата — bool. Пример сам создаёт ресурс, открывает файл и страницу, а затем завершает документ. Нативный runtime требует PECL ps и pslib; здесь заявлена только синтаксическая проверка.
Что должно получиться в совместимом окружении: На странице появляется соответствующий контур; он станет видимым после ps_stroke() или ps_fill(). ps-moveto-minimal.ps bytes=<положительное число>.

В составе документа: ps_movetoПример для указанного окружения
<?php
declare(strict_types=1);

if (!extension_loaded('ps')) {
    throw new RuntimeException('Нужно расширение ps');
}

$outputDir = __DIR__ . '/exports';
if (!is_dir($outputDir) && !mkdir($outputDir, 0775, true) && !is_dir($outputDir)) {
    throw new RuntimeException('Не создан каталог exports');
}
$outputPath = $outputDir . '/ps-moveto-workflow.ps';
$ps = ps_new();
if ($ps === false) { throw new RuntimeException('PS-ресурс не создан'); }
if (!ps_open_file($ps, $outputPath)) {
    ps_delete($ps);
    throw new RuntimeException('PostScript-файл не открыт');
}
ps_begin_page($ps, 595.0, 842.0);
// PostScript-файл и страница уже открыты в этом самодостаточном примере.
$fontId = ps_findfont($ps, 'Helvetica', 'builtin', false);
if ($fontId <= 0) { throw new RuntimeException('Шрифт не найден'); }
ps_setfont($ps, $fontId, 14.0);
ps_moveto($ps, 72.0, 700.0);
$result = ps_moveto($ps, 160.0, 240.0);
if ($result !== true) { throw new RuntimeException('Операция отклонена'); }
ps_stroke($ps);
ps_show_xy($ps, 'Контрольный контур', 72.0, 670.0);
ps_end_page($ps);
ps_close($ps);
ps_delete($ps);
if (!is_file($outputPath) || filesize($outputPath) === 0) {
    throw new RuntimeException('PostScript-файл не создан');
}
echo basename($outputPath), ' bytes=', filesize($outputPath), PHP_EOL;

Для ps_moveto показаны обязательное состояние и проверяемый эффект; официальный тип возврата — bool. Во втором варианте изменена задача/геометрия, а результат проверяют по готовому PS, не по синтетическому echo. Нативный runtime требует PECL ps и pslib; здесь заявлена только синтаксическая проверка.
Что должно получиться в совместимом окружении: На странице появляется соответствующий контур; он станет видимым после ps_stroke() или ps_fill(). Рядом с контуром напечатана контрольная подпись. ps-moveto-workflow.ps bytes=<положительное число>.

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

Полный официальный текст карточки на английском

Purpose: Sets current point

Description Sets the current point to new coordinates. If this is the first call of ps_moveto after a previous path has been ended then it will start a new path. If this function is called in the middle of a path it will just set the current point and start a subpath.

Return: Return Values Returns true on success.

Связанные операции: ps_lineto.

ps_newСоздать в текущем PostScript-документе.

PECL ps >= 1.1.0 · ps; pslib

ps_new(): resource|false

Создать в текущем PostScript-документе.

Официальная сигнатура. ps_new(): resource|false.

Доступность. Точная строка официального versions.xml: PECL ps >= 1.1.0.

ПараметрЧто приходит и зачем
Параметров нетОперация использует конфигурацию расширения или состояние созданного объекта.

Возврат. Тип resource|false. Официальный текст: Return Values Resource of PostScript document[return.falseforfailure]. The return value is passed to all other functions as the first argument.

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

Минимальная операция: ps_newПример для указанного окружения
<?php
declare(strict_types=1);

if (!extension_loaded('ps')) {
    throw new RuntimeException('Нужно расширение ps');
}

$result = ps_new();
if ($result === false) { throw new RuntimeException('PS-ресурс не создан'); }
echo 'resource=PostScript', PHP_EOL;
ps_delete($result);

Для ps_new показаны обязательное состояние и проверяемый эффект; официальный тип возврата — resource|false. Пример сам создаёт ресурс, открывает файл и страницу, а затем завершает документ. Нативный runtime требует PECL ps и pslib; здесь заявлена только синтаксическая проверка.
Что должно получиться в совместимом окружении: resource=PostScript

В составе документа: ps_newПример для указанного окружения
<?php
declare(strict_types=1);

if (!extension_loaded('ps')) {
    throw new RuntimeException('Нужно расширение ps');
}

$result = ps_new();
if ($result === false) { throw new RuntimeException('PS-ресурс не создан'); }
ps_set_info($result, 'Creator', 'Delivery service');
ps_set_parameter($result, 'warning', 'true');
echo 'resource=PostScript', PHP_EOL;
ps_delete($result);

Для ps_new показаны обязательное состояние и проверяемый эффект; официальный тип возврата — resource|false. Во втором варианте изменена задача/геометрия, а результат проверяют по готовому PS, не по синтетическому echo. Нативный runtime требует PECL ps и pslib; здесь заявлена только синтаксическая проверка.
Что должно получиться в совместимом окружении: resource=PostScript

Отказ и граница проверки. false — документированный сигнал отказа. Соблюдайте порядок resource → output → page → page end → document close → delete и не продолжайте после отказа предыдущего шага.

Полный официальный текст карточки на английском

Purpose: Creates a new PostScript document object

Description Creates a new document instance. It does not create the file on disk or in memory, it just sets up everything. ps_new is usually followed by a call of ps_open_file to actually create the postscript document.

Return: Return Values Resource of PostScript document[return.falseforfailure]. The return value is passed to all other functions as the first argument.

Связанные операции: ps_delete.

ps_open_fileОткрыть связанный файл в текущем PostScript-документе.

PECL ps >= 1.1.0 · ps; pslib

ps_open_file(resource $psdoc, string $filename = ?): bool

Открыть связанный файл в текущем PostScript-документе.

Официальная сигнатура. ps_open_file(resource $psdoc, string $filename = ?): bool.

Доступность. Точная строка официального versions.xml: PECL ps >= 1.1.0.

ПараметрЧто приходит и зачем
resource $psdocОткрытый документ PS, созданный ps_new() и связанный с файлом через ps_open_file().
Точная формулировка PHP Manual

Resource identifier of the postscript file as returned by ps_new .

string $filename = значение по умолчаниюПуть к локальному файлу. Для пользовательского ввода заранее ограничивают разрешённый каталог.
Точная формулировка PHP Manual

The name of the postscript file. If filename is not passed the document will be created in memory and all output will go straight to the browser.

Возврат. Тип bool. Официальный текст: Return Values Returns true on success.

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

Минимальная операция: ps_open_fileПример для указанного окружения
<?php
declare(strict_types=1);

if (!extension_loaded('ps')) {
    throw new RuntimeException('Нужно расширение ps');
}

$outputDir = __DIR__ . '/exports';
if (!is_dir($outputDir) && !mkdir($outputDir, 0775, true) && !is_dir($outputDir)) {
    throw new RuntimeException('Не создан каталог exports');
}
$ps = ps_new();
if ($ps === false) { throw new RuntimeException('PS-ресурс не создан'); }
$result = ps_open_file($ps, __DIR__ . '/exports/order-42.ps');
if ($result !== true) { throw new RuntimeException('Файл не открыт'); }
ps_close($ps);
ps_delete($ps);
echo 'output=opened', PHP_EOL;

Для ps_open_file показаны обязательное состояние и проверяемый эффект; официальный тип возврата — bool. Пример сам создаёт ресурс, открывает файл и страницу, а затем завершает документ. Нативный runtime требует PECL ps и pslib; здесь заявлена только синтаксическая проверка.
Что должно получиться в совместимом окружении: output=opened

В составе документа: ps_open_fileПример для указанного окружения
<?php
declare(strict_types=1);

if (!extension_loaded('ps')) {
    throw new RuntimeException('Нужно расширение ps');
}

$outputDir = __DIR__ . '/exports';
if (!is_dir($outputDir) && !mkdir($outputDir, 0775, true) && !is_dir($outputDir)) {
    throw new RuntimeException('Не создан каталог exports');
}
$ps = ps_new();
if ($ps === false) { throw new RuntimeException('PS-ресурс не создан'); }
$result = ps_open_file($ps, __DIR__ . '/exports/delivery-73.ps');
if ($result !== true) { throw new RuntimeException('Файл не открыт'); }
ps_begin_page($ps, 420.0, 297.0);
$fontId = ps_findfont($ps, 'Helvetica', 'builtin', false);
ps_setfont($ps, $fontId, 18.0);
ps_show_xy($ps, 'Delivery 73', 48.0, 240.0);
ps_end_page($ps);
ps_close($ps);
ps_delete($ps);
echo 'output=opened', PHP_EOL;

Для ps_open_file показаны обязательное состояние и проверяемый эффект; официальный тип возврата — bool. Во втором варианте изменена задача/геометрия, а результат проверяют по готовому PS, не по синтетическому echo. Нативный runtime требует PECL ps и pslib; здесь заявлена только синтаксическая проверка.
Что должно получиться в совместимом окружении: output=opened В практическом варианте файл содержит одну подписанную страницу.

Отказ и граница проверки. успех подтверждает только строгое true. Соблюдайте порядок resource → output → page → page end → document close → delete и не продолжайте после отказа предыдущего шага.

Полный официальный текст карточки на английском

Purpose: Opens a file for output

Description Creates a new file on disk and writes the PostScript document into it. The file will be closed when ps_close is called.

Return: Return Values Returns true on success.

Связанные операции: ps_close.

ps_open_imageОткрыть изображение в текущем PostScript-документе.

PECL ps >= 1.1.0 · ps; pslib

ps_open_image(resource $psdoc, string $type, string $source, string $data, int $length, int $width, int $height, int $components, int $bpc, string $params): int

Открыть изображение в текущем PostScript-документе.

Официальная сигнатура. ps_open_image(resource $psdoc, string $type, string $source, string $data, int $length, int $width, int $height, int $components, int $bpc, string $params): int.

Доступность. Точная строка официального versions.xml: PECL ps >= 1.1.0.

ПараметрЧто приходит и зачем
resource $psdocОткрытый документ PS, созданный ps_new() и связанный с файлом через ps_open_file().
Точная формулировка PHP Manual

Resource identifier of the postscript file as returned by ps_new .

string $typeТип операции: формат изображения, тип цвета или другой документированный вариант.
Точная формулировка PHP Manual

The type of the image. Possible values are png , jpeg , or eps .

string $sourceИсточник изображения по договору pslib, например file или memory.
Точная формулировка PHP Manual

Not used.

string $dataДвумерный массив строк таблицы: внешний массив — строки, внутренний — значения столбцов.
Точная формулировка PHP Manual

The image data.

int $lengthДлина бинарного буфера в байтах.
Точная формулировка PHP Manual

The length of the image data.

int $widthРазмер/шаг в единицах текущей операции; для геометрии PostScript обычно используются пункты.
Точная формулировка PHP Manual

The width of the image.

int $heightРазмер/шаг в единицах текущей операции; для геометрии PostScript обычно используются пункты.
Точная формулировка PHP Manual

The height of the image.

int $componentsОписание сырого изображения: число бит на компонент/число цветовых компонентов.
Точная формулировка PHP Manual

The number of components for each pixel. This can be 1 (gray scale images), 3 (rgb images), or 4 (cmyk, rgba images).

int $bpcОписание сырого изображения: число бит на компонент/число цветовых компонентов.
Точная формулировка PHP Manual

Number of bits per component (quite often 8).

string $paramsСтрока дополнительных параметров декодера изображения pslib.

Возврат. Тип int. Официальный текст: Return Values Returns identifier of image or zero in case of an error. The identifier is a positive number greater than 0.

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

Минимальная операция: ps_open_imageПример для указанного окружения
<?php
declare(strict_types=1);

if (!extension_loaded('ps')) {
    throw new RuntimeException('Нужно расширение ps');
}

$outputDir = __DIR__ . '/exports';
if (!is_dir($outputDir) && !mkdir($outputDir, 0775, true) && !is_dir($outputDir)) {
    throw new RuntimeException('Не создан каталог exports');
}
$outputPath = $outputDir . '/ps-open-image-minimal.ps';
$ps = ps_new();
if ($ps === false) { throw new RuntimeException('PS-ресурс не создан'); }
if (!ps_open_file($ps, $outputPath)) {
    ps_delete($ps);
    throw new RuntimeException('PostScript-файл не открыт');
}
ps_begin_page($ps, 595.0, 842.0);
// PostScript-файл и страница уже открыты в этом самодостаточном примере.
$fontId = ps_findfont($ps, 'Helvetica', 'builtin', false);
if ($fontId <= 0) { throw new RuntimeException('Шрифт не найден'); }
ps_setfont($ps, $fontId, 12.0);
$imageFixture = __DIR__ . '/fixtures/logo.png';
if (!is_file($imageFixture)) { throw new RuntimeException('Нужен fixture изображения'); }
$imageData = file_get_contents($imageFixture);
if (!is_string($imageData) || $imageData === '') { throw new RuntimeException('Изображение не прочитано'); }
$imageInfo = getimagesize($imageFixture);
if ($imageInfo === false) { throw new RuntimeException('Не прочитаны размеры изображения'); }
[$imageWidth, $imageHeight] = $imageInfo;
$imageComponents = isset($imageInfo['channels']) ? (int) $imageInfo['channels'] : 3;
$imageBitsPerComponent = isset($imageInfo['bits']) ? (int) $imageInfo['bits'] : 8;
$result = ps_open_image($ps, 'png', 'memory', $imageData, strlen($imageData), $imageWidth, $imageHeight, $imageComponents, $imageBitsPerComponent, '');
if ($result === false || $result === 0) { throw new RuntimeException('Идентификатор/значение не получено'); }
ps_close_image($ps, $result);
ps_end_page($ps);
ps_close($ps);
ps_delete($ps);
if (!is_file($outputPath) || filesize($outputPath) === 0) {
    throw new RuntimeException('PostScript-файл не создан');
}
echo basename($outputPath), ' bytes=', filesize($outputPath), PHP_EOL;

Для ps_open_image показаны обязательное состояние и проверяемый эффект; официальный тип возврата — int. Пример сам создаёт ресурс, открывает файл и страницу, а затем завершает документ. Нативный runtime требует PECL ps и pslib; здесь заявлена только синтаксическая проверка.
Что должно получиться в совместимом окружении: Изменение видно в итоговом PostScript после завершения страницы и документа. ps-open-image-minimal.ps bytes=<положительное число>.

В составе документа: ps_open_imageПример для указанного окружения
<?php
declare(strict_types=1);

if (!extension_loaded('ps')) {
    throw new RuntimeException('Нужно расширение ps');
}

$outputDir = __DIR__ . '/exports';
if (!is_dir($outputDir) && !mkdir($outputDir, 0775, true) && !is_dir($outputDir)) {
    throw new RuntimeException('Не создан каталог exports');
}
$outputPath = $outputDir . '/ps-open-image-workflow.ps';
$ps = ps_new();
if ($ps === false) { throw new RuntimeException('PS-ресурс не создан'); }
if (!ps_open_file($ps, $outputPath)) {
    ps_delete($ps);
    throw new RuntimeException('PostScript-файл не открыт');
}
ps_begin_page($ps, 595.0, 842.0);
// PostScript-файл и страница уже открыты в этом самодостаточном примере.
$fontId = ps_findfont($ps, 'Helvetica', 'builtin', false);
if ($fontId <= 0) { throw new RuntimeException('Шрифт не найден'); }
ps_setfont($ps, $fontId, 14.0);
$imageFixture = __DIR__ . '/fixtures/photo.jpg';
if (!is_file($imageFixture)) { throw new RuntimeException('Нужен fixture изображения'); }
$imageData = file_get_contents($imageFixture);
if (!is_string($imageData) || $imageData === '') { throw new RuntimeException('Изображение не прочитано'); }
$imageInfo = getimagesize($imageFixture);
if ($imageInfo === false) { throw new RuntimeException('Не прочитаны размеры изображения'); }
[$imageWidth, $imageHeight] = $imageInfo;
$imageComponents = isset($imageInfo['channels']) ? (int) $imageInfo['channels'] : 3;
$imageBitsPerComponent = isset($imageInfo['bits']) ? (int) $imageInfo['bits'] : 8;
$result = ps_open_image($ps, 'jpeg', 'memory', $imageData, strlen($imageData), $imageWidth, $imageHeight, $imageComponents, $imageBitsPerComponent, '');
if ($result === false || $result === 0) { throw new RuntimeException('Идентификатор/значение не получено'); }
ps_place_image($ps, $result, 72.0, 560.0, 0.5);
ps_close_image($ps, $result);
ps_end_page($ps);
ps_close($ps);
ps_delete($ps);
if (!is_file($outputPath) || filesize($outputPath) === 0) {
    throw new RuntimeException('PostScript-файл не создан');
}
echo basename($outputPath), ' bytes=', filesize($outputPath), PHP_EOL;

Для ps_open_image показаны обязательное состояние и проверяемый эффект; официальный тип возврата — int. Во втором варианте изменена задача/геометрия, а результат проверяют по готовому PS, не по синтетическому echo. Нативный runtime требует PECL ps и pslib; здесь заявлена только синтаксическая проверка.
Что должно получиться в совместимом окружении: Изменение видно в итоговом PostScript после завершения страницы и документа. Изображение размещено и его идентификатор закрыт. ps-open-image-workflow.ps bytes=<положительное число>.

Отказ и граница проверки. сначала проверяется заявленный тип результата. Проверьте fixture, формат, размеры/компоненты, положительный image id; после размещения закройте именно этот идентификатор.

Полный официальный текст карточки на английском

Purpose: Reads an image for later placement

Description Reads an image which is already available in memory. The parameter source is currently not evaluated and assumed to be memory . The image data is a sequence of pixels starting in th upper left corner and ending in the lower right corner. Each pixel consists of components color components, and each component has bpc bits.

Return: Return Values Returns identifier of image or zero in case of an error. The identifier is a positive number greater than 0.

Связанные операции: ps_open_image_file, ps_place_image, ps_close_image.

ps_open_image_fileОткрыть image file в текущем PostScript-документе.

PECL ps >= 1.1.0 · ps; pslib

ps_open_image_file(resource $psdoc, string $type, string $filename, string $stringparam = ?, int $intparam = 0): int

Открыть image file в текущем PostScript-документе.

Официальная сигнатура. ps_open_image_file(resource $psdoc, string $type, string $filename, string $stringparam = ?, int $intparam = 0): int.

Доступность. Точная строка официального versions.xml: PECL ps >= 1.1.0.

ПараметрЧто приходит и зачем
resource $psdocОткрытый документ PS, созданный ps_new() и связанный с файлом через ps_open_file().
Точная формулировка PHP Manual

Resource identifier of the postscript file as returned by ps_new .

string $typeТип операции: формат изображения, тип цвета или другой документированный вариант.
Точная формулировка PHP Manual

The type of the image. Possible values are png , jpeg , or eps .

string $filenameПуть к локальному файлу. Для пользовательского ввода заранее ограничивают разрешённый каталог.
Точная формулировка PHP Manual

The name of the file containing the image data.

string $stringparam = значение по умолчаниюДополнительная строка декодера изображения; пустая строка оставляет значение по умолчанию.
Точная формулировка PHP Manual

Not used.

int $intparam = 0Дополнительный целочисленный параметр декодера изображения; 0 оставляет режим по умолчанию.
Точная формулировка PHP Manual

Not used.

Возврат. Тип int. Официальный текст: Return Values Returns identifier of image or zero in case of an error. The identifier is a positive number greater than 0.

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

Минимальная операция: ps_open_image_fileПример для указанного окружения
<?php
declare(strict_types=1);

if (!extension_loaded('ps')) {
    throw new RuntimeException('Нужно расширение ps');
}

$outputDir = __DIR__ . '/exports';
if (!is_dir($outputDir) && !mkdir($outputDir, 0775, true) && !is_dir($outputDir)) {
    throw new RuntimeException('Не создан каталог exports');
}
$outputPath = $outputDir . '/ps-open-image-file-minimal.ps';
$ps = ps_new();
if ($ps === false) { throw new RuntimeException('PS-ресурс не создан'); }
if (!ps_open_file($ps, $outputPath)) {
    ps_delete($ps);
    throw new RuntimeException('PostScript-файл не открыт');
}
ps_begin_page($ps, 595.0, 842.0);
// PostScript-файл и страница уже открыты в этом самодостаточном примере.
$fontId = ps_findfont($ps, 'Helvetica', 'builtin', false);
if ($fontId <= 0) { throw new RuntimeException('Шрифт не найден'); }
ps_setfont($ps, $fontId, 12.0);
$imageFixture = __DIR__ . '/fixtures/logo.png';
if (!is_file($imageFixture)) { throw new RuntimeException('Нужен fixture изображения'); }
$result = ps_open_image_file($ps, 'png', __DIR__ . '/fixtures/logo.png', '', 0);
if ($result === false || $result === 0) { throw new RuntimeException('Идентификатор/значение не получено'); }
ps_close_image($ps, $result);
ps_end_page($ps);
ps_close($ps);
ps_delete($ps);
if (!is_file($outputPath) || filesize($outputPath) === 0) {
    throw new RuntimeException('PostScript-файл не создан');
}
echo basename($outputPath), ' bytes=', filesize($outputPath), PHP_EOL;

Для ps_open_image_file показаны обязательное состояние и проверяемый эффект; официальный тип возврата — int. Пример сам создаёт ресурс, открывает файл и страницу, а затем завершает документ. Нативный runtime требует PECL ps и pslib; здесь заявлена только синтаксическая проверка.
Что должно получиться в совместимом окружении: Изменение видно в итоговом PostScript после завершения страницы и документа. ps-open-image-file-minimal.ps bytes=<положительное число>.

В составе документа: ps_open_image_fileПример для указанного окружения
<?php
declare(strict_types=1);

if (!extension_loaded('ps')) {
    throw new RuntimeException('Нужно расширение ps');
}

$outputDir = __DIR__ . '/exports';
if (!is_dir($outputDir) && !mkdir($outputDir, 0775, true) && !is_dir($outputDir)) {
    throw new RuntimeException('Не создан каталог exports');
}
$outputPath = $outputDir . '/ps-open-image-file-workflow.ps';
$ps = ps_new();
if ($ps === false) { throw new RuntimeException('PS-ресурс не создан'); }
if (!ps_open_file($ps, $outputPath)) {
    ps_delete($ps);
    throw new RuntimeException('PostScript-файл не открыт');
}
ps_begin_page($ps, 595.0, 842.0);
// PostScript-файл и страница уже открыты в этом самодостаточном примере.
$fontId = ps_findfont($ps, 'Helvetica', 'builtin', false);
if ($fontId <= 0) { throw new RuntimeException('Шрифт не найден'); }
ps_setfont($ps, $fontId, 14.0);
$imageFixture = __DIR__ . '/fixtures/photo.jpg';
if (!is_file($imageFixture)) { throw new RuntimeException('Нужен fixture изображения'); }
$result = ps_open_image_file($ps, 'jpeg', __DIR__ . '/fixtures/photo.jpg', '', 0);
if ($result === false || $result === 0) { throw new RuntimeException('Идентификатор/значение не получено'); }
ps_place_image($ps, $result, 72.0, 560.0, 0.5);
ps_close_image($ps, $result);
ps_end_page($ps);
ps_close($ps);
ps_delete($ps);
if (!is_file($outputPath) || filesize($outputPath) === 0) {
    throw new RuntimeException('PostScript-файл не создан');
}
echo basename($outputPath), ' bytes=', filesize($outputPath), PHP_EOL;

Для ps_open_image_file показаны обязательное состояние и проверяемый эффект; официальный тип возврата — int. Во втором варианте изменена задача/геометрия, а результат проверяют по готовому PS, не по синтетическому echo. Нативный runtime требует PECL ps и pslib; здесь заявлена только синтаксическая проверка.
Что должно получиться в совместимом окружении: Изменение видно в итоговом PostScript после завершения страницы и документа. Изображение размещено и его идентификатор закрыт. ps-open-image-file-workflow.ps bytes=<положительное число>.

Отказ и граница проверки. сначала проверяется заявленный тип результата. Проверьте fixture, формат, размеры/компоненты, положительный image id; после размещения закройте именно этот идентификатор.

Полный официальный текст карточки на английском

Purpose: Opens image from file

Description Loads an image for later use.

Return: Return Values Returns identifier of image or zero in case of an error. The identifier is a positive number greater than 0.

Связанные операции: ps_open_image, ps_place_image, ps_close_image.

ps_open_memory_imageОткрыть memory image в текущем PostScript-документе.

PECL ps >= 1.1.0 · ps; pslib

ps_open_memory_image(resource $psdoc, int $gd): int

Открыть memory image в текущем PostScript-документе.

Официальная сигнатура. ps_open_memory_image(resource $psdoc, int $gd): int.

Доступность. Точная строка официального versions.xml: PECL ps >= 1.1.0.

ПараметрЧто приходит и зачем
resource $psdocОткрытый документ PS, созданный ps_new() и связанный с файлом через ps_open_file().
Точная формулировка PHP Manual

Resource identifier of the postscript file as returned by ps_new .

int $gdИдентификатор/ресурс GD-изображения в историческом API ext/ps.

Возврат. Тип int. Официальная страница не содержит отдельного абзаца о возврате; ориентируйтесь на сигнатуру, предупреждения и реальный артефакт.

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

Минимальная операция: ps_open_memory_imageПример для указанного окружения
<?php
declare(strict_types=1);

if (!extension_loaded('ps')) {
    throw new RuntimeException('Нужно расширение ps');
}

$outputDir = __DIR__ . '/exports';
if (!is_dir($outputDir) && !mkdir($outputDir, 0775, true) && !is_dir($outputDir)) {
    throw new RuntimeException('Не создан каталог exports');
}
$outputPath = $outputDir . '/ps-open-memory-image-minimal.ps';
$ps = ps_new();
if ($ps === false) { throw new RuntimeException('PS-ресурс не создан'); }
if (!ps_open_file($ps, $outputPath)) {
    ps_delete($ps);
    throw new RuntimeException('PostScript-файл не открыт');
}
ps_begin_page($ps, 595.0, 842.0);
// PostScript-файл и страница уже открыты в этом самодостаточном примере.
$fontId = ps_findfont($ps, 'Helvetica', 'builtin', false);
if ($fontId <= 0) { throw new RuntimeException('Шрифт не найден'); }
ps_setfont($ps, $fontId, 12.0);
if (!extension_loaded('gd')) { throw new RuntimeException('Для ps_open_memory_image нужен GD'); }
$imageFixture = __DIR__ . '/fixtures/logo.png';
if (!is_file($imageFixture)) { throw new RuntimeException('Нужен fixture logo.png'); }
$gdImage = imagecreatefrompng($imageFixture);
if ($gdImage === false) { throw new RuntimeException('GD-изображение не открыто'); }
$result = ps_open_memory_image($ps, $gdImage);
if ($result === false || $result === 0) { throw new RuntimeException('Идентификатор/значение не получено'); }
ps_close_image($ps, $result);
imagedestroy($gdImage);
ps_end_page($ps);
ps_close($ps);
ps_delete($ps);
if (!is_file($outputPath) || filesize($outputPath) === 0) {
    throw new RuntimeException('PostScript-файл не создан');
}
echo basename($outputPath), ' bytes=', filesize($outputPath), PHP_EOL;

Для ps_open_memory_image показаны обязательное состояние и проверяемый эффект; официальный тип возврата — int. Пример сам создаёт ресурс, открывает файл и страницу, а затем завершает документ. Нативный runtime требует PECL ps и pslib; здесь заявлена только синтаксическая проверка.
Что должно получиться в совместимом окружении: Изменение видно в итоговом PostScript после завершения страницы и документа. ps-open-memory-image-minimal.ps bytes=<положительное число>.

В составе документа: ps_open_memory_imageПример для указанного окружения
<?php
declare(strict_types=1);

if (!extension_loaded('ps')) {
    throw new RuntimeException('Нужно расширение ps');
}

$outputDir = __DIR__ . '/exports';
if (!is_dir($outputDir) && !mkdir($outputDir, 0775, true) && !is_dir($outputDir)) {
    throw new RuntimeException('Не создан каталог exports');
}
$outputPath = $outputDir . '/ps-open-memory-image-workflow.ps';
$ps = ps_new();
if ($ps === false) { throw new RuntimeException('PS-ресурс не создан'); }
if (!ps_open_file($ps, $outputPath)) {
    ps_delete($ps);
    throw new RuntimeException('PostScript-файл не открыт');
}
ps_begin_page($ps, 595.0, 842.0);
// PostScript-файл и страница уже открыты в этом самодостаточном примере.
$fontId = ps_findfont($ps, 'Helvetica', 'builtin', false);
if ($fontId <= 0) { throw new RuntimeException('Шрифт не найден'); }
ps_setfont($ps, $fontId, 14.0);
if (!extension_loaded('gd')) { throw new RuntimeException('Для ps_open_memory_image нужен GD'); }
$imageFixture = __DIR__ . '/fixtures/logo.png';
if (!is_file($imageFixture)) { throw new RuntimeException('Нужен fixture logo.png'); }
$gdImage = imagecreatefrompng($imageFixture);
if ($gdImage === false) { throw new RuntimeException('GD-изображение не открыто'); }
$result = ps_open_memory_image($ps, $gdImage);
if ($result === false || $result === 0) { throw new RuntimeException('Идентификатор/значение не получено'); }
ps_place_image($ps, $result, 72.0, 560.0, 0.5);
ps_close_image($ps, $result);
imagedestroy($gdImage);
ps_end_page($ps);
ps_close($ps);
ps_delete($ps);
if (!is_file($outputPath) || filesize($outputPath) === 0) {
    throw new RuntimeException('PostScript-файл не создан');
}
echo basename($outputPath), ' bytes=', filesize($outputPath), PHP_EOL;

Для ps_open_memory_image показаны обязательное состояние и проверяемый эффект; официальный тип возврата — int. Во втором варианте изменена задача/геометрия, а результат проверяют по готовому PS, не по синтетическому echo. Нативный runtime требует PECL ps и pslib; здесь заявлена только синтаксическая проверка.
Что должно получиться в совместимом окружении: Изменение видно в итоговом PostScript после завершения страницы и документа. Изображение размещено и его идентификатор закрыт. ps-open-memory-image-workflow.ps bytes=<положительное число>.

Отказ и граница проверки. сначала проверяется заявленный тип результата. Проверьте fixture, формат, размеры/компоненты, положительный image id; после размещения закройте именно этот идентификатор.

Полный официальный текст карточки на английском

Purpose: Takes an GD image and returns an image for placement in a PS document

Description

Return:

ps_place_imageРазместить изображение в текущем PostScript-документе.

PECL ps >= 1.1.0 · ps; pslib

ps_place_image(resource $psdoc, int $imageid, float $x, float $y, float $scale): bool

Разместить изображение в текущем PostScript-документе.

Официальная сигнатура. ps_place_image(resource $psdoc, int $imageid, float $x, float $y, float $scale): bool.

Доступность. Точная строка официального versions.xml: PECL ps >= 1.1.0.

ПараметрЧто приходит и зачем
resource $psdocОткрытый документ PS, созданный ps_new() и связанный с файлом через ps_open_file().
Точная формулировка PHP Manual

Resource identifier of the postscript file as returned by ps_new .

int $imageidПоложительный идентификатор изображения, возвращённый одной из ps_open_image*().
Точная формулировка PHP Manual

The resource identifier of the image as returned by ps_open_image or ps_open_image_file .

float $xКоордината X в пунктах PostScript; начало системы координат по умолчанию находится слева снизу.
Точная формулировка PHP Manual

x-coordinate of the lower left corner of the image.

float $yКоордината Y в пунктах PostScript; значение растёт снизу вверх до преобразования системы координат.
Точная формулировка PHP Manual

y-coordinate of the lower left corner of the image.

float $scaleРазмер/шаг в единицах текущей операции; для геометрии PostScript обычно используются пункты.
Точная формулировка PHP Manual

The scaling factor for the image. A scale of 1.0 will result in a resolution of 72 dpi, because each pixel is equivalent to 1 point.

Возврат. Тип bool. Официальный текст: Return Values Returns true on success.

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

Минимальная операция: ps_place_imageПример для указанного окружения
<?php
declare(strict_types=1);

if (!extension_loaded('ps')) {
    throw new RuntimeException('Нужно расширение ps');
}

$outputDir = __DIR__ . '/exports';
if (!is_dir($outputDir) && !mkdir($outputDir, 0775, true) && !is_dir($outputDir)) {
    throw new RuntimeException('Не создан каталог exports');
}
$outputPath = $outputDir . '/ps-place-image-minimal.ps';
$ps = ps_new();
if ($ps === false) { throw new RuntimeException('PS-ресурс не создан'); }
if (!ps_open_file($ps, $outputPath)) {
    ps_delete($ps);
    throw new RuntimeException('PostScript-файл не открыт');
}
ps_begin_page($ps, 595.0, 842.0);
// PostScript-файл и страница уже открыты в этом самодостаточном примере.
$fontId = ps_findfont($ps, 'Helvetica', 'builtin', false);
if ($fontId <= 0) { throw new RuntimeException('Шрифт не найден'); }
ps_setfont($ps, $fontId, 12.0);
$imageFixture = __DIR__ . '/fixtures/logo.png';
if (!is_file($imageFixture)) { throw new RuntimeException('Нужен fixture logo.png'); }
$imageId = ps_open_image_file($ps, 'png', $imageFixture);
if ($imageId <= 0) { throw new RuntimeException('Изображение не открыто'); }
$result = ps_place_image($ps, $imageId, 100.0, 120.0, 1.0);
if ($result !== true) { throw new RuntimeException('Операция отклонена'); }
ps_close_image($ps, $imageId);
ps_end_page($ps);
ps_close($ps);
ps_delete($ps);
if (!is_file($outputPath) || filesize($outputPath) === 0) {
    throw new RuntimeException('PostScript-файл не создан');
}
echo basename($outputPath), ' bytes=', filesize($outputPath), PHP_EOL;

Для ps_place_image показаны обязательное состояние и проверяемый эффект; официальный тип возврата — bool. Пример сам создаёт ресурс, открывает файл и страницу, а затем завершает документ. Нативный runtime требует PECL ps и pslib; здесь заявлена только синтаксическая проверка.
Что должно получиться в совместимом окружении: Изменение видно в итоговом PostScript после завершения страницы и документа. ps-place-image-minimal.ps bytes=<положительное число>.

В составе документа: ps_place_imageПример для указанного окружения
<?php
declare(strict_types=1);

if (!extension_loaded('ps')) {
    throw new RuntimeException('Нужно расширение ps');
}

$outputDir = __DIR__ . '/exports';
if (!is_dir($outputDir) && !mkdir($outputDir, 0775, true) && !is_dir($outputDir)) {
    throw new RuntimeException('Не создан каталог exports');
}
$outputPath = $outputDir . '/ps-place-image-workflow.ps';
$ps = ps_new();
if ($ps === false) { throw new RuntimeException('PS-ресурс не создан'); }
if (!ps_open_file($ps, $outputPath)) {
    ps_delete($ps);
    throw new RuntimeException('PostScript-файл не открыт');
}
ps_begin_page($ps, 595.0, 842.0);
// PostScript-файл и страница уже открыты в этом самодостаточном примере.
$fontId = ps_findfont($ps, 'Helvetica', 'builtin', false);
if ($fontId <= 0) { throw new RuntimeException('Шрифт не найден'); }
ps_setfont($ps, $fontId, 14.0);
$imageFixture = __DIR__ . '/fixtures/logo.png';
if (!is_file($imageFixture)) { throw new RuntimeException('Нужен fixture logo.png'); }
$imageId = ps_open_image_file($ps, 'png', $imageFixture);
if ($imageId <= 0) { throw new RuntimeException('Изображение не открыто'); }
$result = ps_place_image($ps, $imageId, 160.0, 240.0, 0.5);
if ($result !== true) { throw new RuntimeException('Операция отклонена'); }
ps_close_image($ps, $imageId);
ps_end_page($ps);
ps_close($ps);
ps_delete($ps);
if (!is_file($outputPath) || filesize($outputPath) === 0) {
    throw new RuntimeException('PostScript-файл не создан');
}
echo basename($outputPath), ' bytes=', filesize($outputPath), PHP_EOL;

Для ps_place_image показаны обязательное состояние и проверяемый эффект; официальный тип возврата — bool. Во втором варианте изменена задача/геометрия, а результат проверяют по готовому PS, не по синтетическому echo. Нативный runtime требует PECL ps и pslib; здесь заявлена только синтаксическая проверка.
Что должно получиться в совместимом окружении: Изменение видно в итоговом PostScript после завершения страницы и документа. После размещения идентификатор изображения закрыт. ps-place-image-workflow.ps bytes=<положительное число>.

Отказ и граница проверки. успех подтверждает только строгое true. Проверьте fixture, формат, размеры/компоненты, положительный image id; после размещения закройте именно этот идентификатор.

Полный официальный текст карточки на английском

Purpose: Places image on the page

Description Places a formerly loaded image on the page. The image can be scaled. If the image shall be rotated as well, you will have to rotate the coordinate system before with ps_rotate .

Return: Return Values Returns true on success.

Связанные операции: ps_open_image, ps_open_image_file.

ps_rectНарисовать прямоугольник в текущем PostScript-документе.

PECL ps >= 1.1.0 · ps; pslib

ps_rect(resource $psdoc, float $x, float $y, float $width, float $height): bool

Нарисовать прямоугольник в текущем PostScript-документе.

Официальная сигнатура. ps_rect(resource $psdoc, float $x, float $y, float $width, float $height): bool.

Доступность. Точная строка официального versions.xml: PECL ps >= 1.1.0.

ПараметрЧто приходит и зачем
resource $psdocОткрытый документ PS, созданный ps_new() и связанный с файлом через ps_open_file().
Точная формулировка PHP Manual

Resource identifier of the postscript file as returned by ps_new .

float $xКоордината X в пунктах PostScript; начало системы координат по умолчанию находится слева снизу.
Точная формулировка PHP Manual

x-coordinate of the lower left corner of the rectangle.

float $yКоордината Y в пунктах PostScript; значение растёт снизу вверх до преобразования системы координат.
Точная формулировка PHP Manual

y-coordinate of the lower left corner of the rectangle.

float $widthРазмер/шаг в единицах текущей операции; для геометрии PostScript обычно используются пункты.
Точная формулировка PHP Manual

The width of the image.

float $heightРазмер/шаг в единицах текущей операции; для геометрии PostScript обычно используются пункты.
Точная формулировка PHP Manual

The height of the image.

Возврат. Тип bool. Официальный текст: Return Values Returns true on success.

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

Минимальная операция: ps_rectПример для указанного окружения
<?php
declare(strict_types=1);

if (!extension_loaded('ps')) {
    throw new RuntimeException('Нужно расширение ps');
}

$outputDir = __DIR__ . '/exports';
if (!is_dir($outputDir) && !mkdir($outputDir, 0775, true) && !is_dir($outputDir)) {
    throw new RuntimeException('Не создан каталог exports');
}
$outputPath = $outputDir . '/ps-rect-minimal.ps';
$ps = ps_new();
if ($ps === false) { throw new RuntimeException('PS-ресурс не создан'); }
if (!ps_open_file($ps, $outputPath)) {
    ps_delete($ps);
    throw new RuntimeException('PostScript-файл не открыт');
}
ps_begin_page($ps, 595.0, 842.0);
// PostScript-файл и страница уже открыты в этом самодостаточном примере.
$fontId = ps_findfont($ps, 'Helvetica', 'builtin', false);
if ($fontId <= 0) { throw new RuntimeException('Шрифт не найден'); }
ps_setfont($ps, $fontId, 12.0);
ps_moveto($ps, 72.0, 700.0);
$result = ps_rect($ps, 100.0, 120.0, 595.0, 842.0);
if ($result !== true) { throw new RuntimeException('Операция отклонена'); }
ps_stroke($ps);
ps_end_page($ps);
ps_close($ps);
ps_delete($ps);
if (!is_file($outputPath) || filesize($outputPath) === 0) {
    throw new RuntimeException('PostScript-файл не создан');
}
echo basename($outputPath), ' bytes=', filesize($outputPath), PHP_EOL;

Для ps_rect показаны обязательное состояние и проверяемый эффект; официальный тип возврата — bool. Пример сам создаёт ресурс, открывает файл и страницу, а затем завершает документ. Нативный runtime требует PECL ps и pslib; здесь заявлена только синтаксическая проверка.
Что должно получиться в совместимом окружении: На странице появляется соответствующий контур; он станет видимым после ps_stroke() или ps_fill(). ps-rect-minimal.ps bytes=<положительное число>.

В составе документа: ps_rectПример для указанного окружения
<?php
declare(strict_types=1);

if (!extension_loaded('ps')) {
    throw new RuntimeException('Нужно расширение ps');
}

$outputDir = __DIR__ . '/exports';
if (!is_dir($outputDir) && !mkdir($outputDir, 0775, true) && !is_dir($outputDir)) {
    throw new RuntimeException('Не создан каталог exports');
}
$outputPath = $outputDir . '/ps-rect-workflow.ps';
$ps = ps_new();
if ($ps === false) { throw new RuntimeException('PS-ресурс не создан'); }
if (!ps_open_file($ps, $outputPath)) {
    ps_delete($ps);
    throw new RuntimeException('PostScript-файл не открыт');
}
ps_begin_page($ps, 595.0, 842.0);
// PostScript-файл и страница уже открыты в этом самодостаточном примере.
$fontId = ps_findfont($ps, 'Helvetica', 'builtin', false);
if ($fontId <= 0) { throw new RuntimeException('Шрифт не найден'); }
ps_setfont($ps, $fontId, 14.0);
ps_moveto($ps, 72.0, 700.0);
$result = ps_rect($ps, 160.0, 240.0, 420.0, 297.0);
if ($result !== true) { throw new RuntimeException('Операция отклонена'); }
ps_stroke($ps);
ps_show_xy($ps, 'Контрольный контур', 72.0, 670.0);
ps_end_page($ps);
ps_close($ps);
ps_delete($ps);
if (!is_file($outputPath) || filesize($outputPath) === 0) {
    throw new RuntimeException('PostScript-файл не создан');
}
echo basename($outputPath), ' bytes=', filesize($outputPath), PHP_EOL;

Для ps_rect показаны обязательное состояние и проверяемый эффект; официальный тип возврата — bool. Во втором варианте изменена задача/геометрия, а результат проверяют по готовому PS, не по синтетическому echo. Нативный runtime требует PECL ps и pslib; здесь заявлена только синтаксическая проверка.
Что должно получиться в совместимом окружении: На странице появляется соответствующий контур; он станет видимым после ps_stroke() или ps_fill(). Рядом с контуром напечатана контрольная подпись. ps-rect-workflow.ps bytes=<положительное число>.

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

Полный официальный текст карточки на английском

Purpose: Draws a rectangle

Description Draws a rectangle with its lower left corner at ( x , y ). The rectangle starts and ends in its lower left corner. If this function is called outside a path it will start a new path. If it is called within a path it will add the rectangle as a subpath. If the last drawing operation does not end in the lower left corner then there will be a gap in the path.

Return: Return Values Returns true on success.

Связанные операции: ps_arc, ps_circle, ps_lineto.

ps_restoreВосстановить графическое состояние в текущем PostScript-документе.

PECL ps >= 1.1.0 · ps; pslib

ps_restore(resource $psdoc): bool

Восстановить графическое состояние в текущем PostScript-документе.

Официальная сигнатура. ps_restore(resource $psdoc): bool.

Доступность. Точная строка официального versions.xml: PECL ps >= 1.1.0.

ПараметрЧто приходит и зачем
resource $psdocОткрытый документ PS, созданный ps_new() и связанный с файлом через ps_open_file().
Точная формулировка PHP Manual

Resource identifier of the postscript file as returned by ps_new .

Возврат. Тип bool. Официальный текст: Return Values Returns true on success.

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

Минимальная операция: ps_restoreПример для указанного окружения
<?php
declare(strict_types=1);

if (!extension_loaded('ps')) {
    throw new RuntimeException('Нужно расширение ps');
}

$outputDir = __DIR__ . '/exports';
if (!is_dir($outputDir) && !mkdir($outputDir, 0775, true) && !is_dir($outputDir)) {
    throw new RuntimeException('Не создан каталог exports');
}
$outputPath = $outputDir . '/ps-restore-minimal.ps';
$ps = ps_new();
if ($ps === false) { throw new RuntimeException('PS-ресурс не создан'); }
if (!ps_open_file($ps, $outputPath)) {
    ps_delete($ps);
    throw new RuntimeException('PostScript-файл не открыт');
}
ps_begin_page($ps, 595.0, 842.0);
// PostScript-файл и страница уже открыты в этом самодостаточном примере.
$fontId = ps_findfont($ps, 'Helvetica', 'builtin', false);
if ($fontId <= 0) { throw new RuntimeException('Шрифт не найден'); }
ps_setfont($ps, $fontId, 12.0);
if (!ps_save($ps)) { throw new RuntimeException('Нет сохранённого графического состояния'); }
$result = ps_restore($ps);
if ($result !== true) { throw new RuntimeException('Операция отклонена'); }
ps_end_page($ps);
ps_close($ps);
ps_delete($ps);
if (!is_file($outputPath) || filesize($outputPath) === 0) {
    throw new RuntimeException('PostScript-файл не создан');
}
echo basename($outputPath), ' bytes=', filesize($outputPath), PHP_EOL;

Для ps_restore показаны обязательное состояние и проверяемый эффект; официальный тип возврата — bool. Пример сам создаёт ресурс, открывает файл и страницу, а затем завершает документ. Нативный runtime требует PECL ps и pslib; здесь заявлена только синтаксическая проверка.
Что должно получиться в совместимом окружении: Графическое состояние изменено; эффект проверяется по следующему нарисованному объекту. ps-restore-minimal.ps bytes=<положительное число>.

В составе документа: ps_restoreПример для указанного окружения
<?php
declare(strict_types=1);

if (!extension_loaded('ps')) {
    throw new RuntimeException('Нужно расширение ps');
}

$outputDir = __DIR__ . '/exports';
if (!is_dir($outputDir) && !mkdir($outputDir, 0775, true) && !is_dir($outputDir)) {
    throw new RuntimeException('Не создан каталог exports');
}
$outputPath = $outputDir . '/ps-restore-workflow.ps';
$ps = ps_new();
if ($ps === false) { throw new RuntimeException('PS-ресурс не создан'); }
if (!ps_open_file($ps, $outputPath)) {
    ps_delete($ps);
    throw new RuntimeException('PostScript-файл не открыт');
}
ps_begin_page($ps, 595.0, 842.0);
// PostScript-файл и страница уже открыты в этом самодостаточном примере.
$fontId = ps_findfont($ps, 'Helvetica', 'builtin', false);
if ($fontId <= 0) { throw new RuntimeException('Шрифт не найден'); }
ps_setfont($ps, $fontId, 14.0);
if (!ps_save($ps)) { throw new RuntimeException('Нет сохранённого графического состояния'); }
$result = ps_restore($ps);
if ($result !== true) { throw new RuntimeException('Операция отклонена'); }
ps_rect($ps, 72.0, 610.0, 180.0, 42.0);
ps_stroke($ps);
ps_show_xy($ps, 'Проверка настройки', 80.0, 625.0);
ps_end_page($ps);
ps_close($ps);
ps_delete($ps);
if (!is_file($outputPath) || filesize($outputPath) === 0) {
    throw new RuntimeException('PostScript-файл не создан');
}
echo basename($outputPath), ' bytes=', filesize($outputPath), PHP_EOL;

Для ps_restore показаны обязательное состояние и проверяемый эффект; официальный тип возврата — bool. Во втором варианте изменена задача/геометрия, а результат проверяют по готовому PS, не по синтетическому echo. Нативный runtime требует PECL ps и pslib; здесь заявлена только синтаксическая проверка.
Что должно получиться в совместимом окружении: Графическое состояние изменено; эффект проверяется по следующему нарисованному объекту. Настройка используется следующим нарисованным объектом. ps-restore-workflow.ps bytes=<положительное число>.

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

Полный официальный текст карточки на английском

Purpose: Restore previously save context

Description Restores a previously saved graphics context. Any call of ps_save must be accompanied by a call to ps_restore . All coordinate transformations, line style settings, color settings, etc. are being restored to the state before the call of ps_save .

Return: Return Values Returns true on success.

Связанные операции: ps_save.

ps_rotateПовернуть систему координат в текущем PostScript-документе.

PECL ps >= 1.1.0 · ps; pslib

ps_rotate(resource $psdoc, float $rot): bool

Повернуть систему координат в текущем PostScript-документе.

Официальная сигнатура. ps_rotate(resource $psdoc, float $rot): bool.

Доступность. Точная строка официального versions.xml: PECL ps >= 1.1.0.

ПараметрЧто приходит и зачем
resource $psdocОткрытый документ PS, созданный ps_new() и связанный с файлом через ps_open_file().
Точная формулировка PHP Manual

Resource identifier of the postscript file as returned by ps_new .

float $rotУгол в градусах; знак и направление задаются системой координат PostScript.
Точная формулировка PHP Manual

Angle of rotation in degree.

Возврат. Тип bool. Официальный текст: Return Values Returns true on success.

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

Минимальная операция: ps_rotateПример для указанного окружения
<?php
declare(strict_types=1);

if (!extension_loaded('ps')) {
    throw new RuntimeException('Нужно расширение ps');
}

$outputDir = __DIR__ . '/exports';
if (!is_dir($outputDir) && !mkdir($outputDir, 0775, true) && !is_dir($outputDir)) {
    throw new RuntimeException('Не создан каталог exports');
}
$outputPath = $outputDir . '/ps-rotate-minimal.ps';
$ps = ps_new();
if ($ps === false) { throw new RuntimeException('PS-ресурс не создан'); }
if (!ps_open_file($ps, $outputPath)) {
    ps_delete($ps);
    throw new RuntimeException('PostScript-файл не открыт');
}
ps_begin_page($ps, 595.0, 842.0);
// PostScript-файл и страница уже открыты в этом самодостаточном примере.
$fontId = ps_findfont($ps, 'Helvetica', 'builtin', false);
if ($fontId <= 0) { throw new RuntimeException('Шрифт не найден'); }
ps_setfont($ps, $fontId, 12.0);
$result = ps_rotate($ps, 15.0);
if ($result !== true) { throw new RuntimeException('Операция отклонена'); }
ps_end_page($ps);
ps_close($ps);
ps_delete($ps);
if (!is_file($outputPath) || filesize($outputPath) === 0) {
    throw new RuntimeException('PostScript-файл не создан');
}
echo basename($outputPath), ' bytes=', filesize($outputPath), PHP_EOL;

Для ps_rotate показаны обязательное состояние и проверяемый эффект; официальный тип возврата — bool. Пример сам создаёт ресурс, открывает файл и страницу, а затем завершает документ. Нативный runtime требует PECL ps и pslib; здесь заявлена только синтаксическая проверка.
Что должно получиться в совместимом окружении: Графическое состояние изменено; эффект проверяется по следующему нарисованному объекту. ps-rotate-minimal.ps bytes=<положительное число>.

В составе документа: ps_rotateПример для указанного окружения
<?php
declare(strict_types=1);

if (!extension_loaded('ps')) {
    throw new RuntimeException('Нужно расширение ps');
}

$outputDir = __DIR__ . '/exports';
if (!is_dir($outputDir) && !mkdir($outputDir, 0775, true) && !is_dir($outputDir)) {
    throw new RuntimeException('Не создан каталог exports');
}
$outputPath = $outputDir . '/ps-rotate-workflow.ps';
$ps = ps_new();
if ($ps === false) { throw new RuntimeException('PS-ресурс не создан'); }
if (!ps_open_file($ps, $outputPath)) {
    ps_delete($ps);
    throw new RuntimeException('PostScript-файл не открыт');
}
ps_begin_page($ps, 595.0, 842.0);
// PostScript-файл и страница уже открыты в этом самодостаточном примере.
$fontId = ps_findfont($ps, 'Helvetica', 'builtin', false);
if ($fontId <= 0) { throw new RuntimeException('Шрифт не найден'); }
ps_setfont($ps, $fontId, 14.0);
$result = ps_rotate($ps, -10.0);
if ($result !== true) { throw new RuntimeException('Операция отклонена'); }
ps_rect($ps, 72.0, 610.0, 180.0, 42.0);
ps_stroke($ps);
ps_show_xy($ps, 'Проверка настройки', 80.0, 625.0);
ps_end_page($ps);
ps_close($ps);
ps_delete($ps);
if (!is_file($outputPath) || filesize($outputPath) === 0) {
    throw new RuntimeException('PostScript-файл не создан');
}
echo basename($outputPath), ' bytes=', filesize($outputPath), PHP_EOL;

Для ps_rotate показаны обязательное состояние и проверяемый эффект; официальный тип возврата — bool. Во втором варианте изменена задача/геометрия, а результат проверяют по готовому PS, не по синтетическому echo. Нативный runtime требует PECL ps и pslib; здесь заявлена только синтаксическая проверка.
Что должно получиться в совместимом окружении: Графическое состояние изменено; эффект проверяется по следующему нарисованному объекту. Настройка используется следующим нарисованным объектом. ps-rotate-workflow.ps bytes=<положительное число>.

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

Полный официальный текст карточки на английском

Purpose: Sets rotation factor

Description Sets the rotation of the coordinate system.

Return: Return Values Returns true on success.

Связанные операции: ps_scale, ps_translate.

ps_saveСохранить в текущем PostScript-документе.

PECL ps >= 1.1.0 · ps; pslib

ps_save(resource $psdoc): bool

Сохранить в текущем PostScript-документе.

Официальная сигнатура. ps_save(resource $psdoc): bool.

Доступность. Точная строка официального versions.xml: PECL ps >= 1.1.0.

ПараметрЧто приходит и зачем
resource $psdocОткрытый документ PS, созданный ps_new() и связанный с файлом через ps_open_file().
Точная формулировка PHP Manual

Resource identifier of the postscript file as returned by ps_new .

Возврат. Тип bool. Официальный текст: Return Values Returns true on success.

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

Минимальная операция: ps_saveПример для указанного окружения
<?php
declare(strict_types=1);

if (!extension_loaded('ps')) {
    throw new RuntimeException('Нужно расширение ps');
}

$outputDir = __DIR__ . '/exports';
if (!is_dir($outputDir) && !mkdir($outputDir, 0775, true) && !is_dir($outputDir)) {
    throw new RuntimeException('Не создан каталог exports');
}
$outputPath = $outputDir . '/ps-save-minimal.ps';
$ps = ps_new();
if ($ps === false) { throw new RuntimeException('PS-ресурс не создан'); }
if (!ps_open_file($ps, $outputPath)) {
    ps_delete($ps);
    throw new RuntimeException('PostScript-файл не открыт');
}
ps_begin_page($ps, 595.0, 842.0);
// PostScript-файл и страница уже открыты в этом самодостаточном примере.
$fontId = ps_findfont($ps, 'Helvetica', 'builtin', false);
if ($fontId <= 0) { throw new RuntimeException('Шрифт не найден'); }
ps_setfont($ps, $fontId, 12.0);
$result = ps_save($ps);
if ($result !== true) { throw new RuntimeException('Операция отклонена'); }
if (!ps_restore($ps)) { throw new RuntimeException('Графическое состояние не восстановлено'); }
ps_end_page($ps);
ps_close($ps);
ps_delete($ps);
if (!is_file($outputPath) || filesize($outputPath) === 0) {
    throw new RuntimeException('PostScript-файл не создан');
}
echo basename($outputPath), ' bytes=', filesize($outputPath), PHP_EOL;

Для ps_save показаны обязательное состояние и проверяемый эффект; официальный тип возврата — bool. Пример сам создаёт ресурс, открывает файл и страницу, а затем завершает документ. Нативный runtime требует PECL ps и pslib; здесь заявлена только синтаксическая проверка.
Что должно получиться в совместимом окружении: Графическое состояние изменено; эффект проверяется по следующему нарисованному объекту. ps-save-minimal.ps bytes=<положительное число>.

В составе документа: ps_saveПример для указанного окружения
<?php
declare(strict_types=1);

if (!extension_loaded('ps')) {
    throw new RuntimeException('Нужно расширение ps');
}

$outputDir = __DIR__ . '/exports';
if (!is_dir($outputDir) && !mkdir($outputDir, 0775, true) && !is_dir($outputDir)) {
    throw new RuntimeException('Не создан каталог exports');
}
$outputPath = $outputDir . '/ps-save-workflow.ps';
$ps = ps_new();
if ($ps === false) { throw new RuntimeException('PS-ресурс не создан'); }
if (!ps_open_file($ps, $outputPath)) {
    ps_delete($ps);
    throw new RuntimeException('PostScript-файл не открыт');
}
ps_begin_page($ps, 595.0, 842.0);
// PostScript-файл и страница уже открыты в этом самодостаточном примере.
$fontId = ps_findfont($ps, 'Helvetica', 'builtin', false);
if ($fontId <= 0) { throw new RuntimeException('Шрифт не найден'); }
ps_setfont($ps, $fontId, 14.0);
$result = ps_save($ps);
if ($result !== true) { throw new RuntimeException('Операция отклонена'); }
ps_rect($ps, 72.0, 610.0, 180.0, 42.0);
ps_stroke($ps);
ps_show_xy($ps, 'Проверка настройки', 80.0, 625.0);
if (!ps_restore($ps)) { throw new RuntimeException('Графическое состояние не восстановлено'); }
ps_end_page($ps);
ps_close($ps);
ps_delete($ps);
if (!is_file($outputPath) || filesize($outputPath) === 0) {
    throw new RuntimeException('PostScript-файл не создан');
}
echo basename($outputPath), ' bytes=', filesize($outputPath), PHP_EOL;

Для ps_save показаны обязательное состояние и проверяемый эффект; официальный тип возврата — bool. Во втором варианте изменена задача/геометрия, а результат проверяют по готовому PS, не по синтетическому echo. Нативный runtime требует PECL ps и pslib; здесь заявлена только синтаксическая проверка.
Что должно получиться в совместимом окружении: Графическое состояние изменено; эффект проверяется по следующему нарисованному объекту. Настройка используется следующим нарисованным объектом. ps-save-workflow.ps bytes=<положительное число>.

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

Полный официальный текст карточки на английском

Purpose: Save current context

Description Saves the current graphics context, containing colors, translation and rotation settings and some more. A saved context can be restored with ps_restore .

Return: Return Values Returns true on success.

Связанные операции: ps_restore.

ps_scaleИзменить масштаб в текущем PostScript-документе.

PECL ps >= 1.1.0 · ps; pslib

ps_scale(resource $psdoc, float $x, float $y): bool

Изменить масштаб в текущем PostScript-документе.

Официальная сигнатура. ps_scale(resource $psdoc, float $x, float $y): bool.

Доступность. Точная строка официального versions.xml: PECL ps >= 1.1.0.

ПараметрЧто приходит и зачем
resource $psdocОткрытый документ PS, созданный ps_new() и связанный с файлом через ps_open_file().
Точная формулировка PHP Manual

Resource identifier of the postscript file as returned by ps_new .

float $xКоордината X в пунктах PostScript; начало системы координат по умолчанию находится слева снизу.
Точная формулировка PHP Manual

Scaling factor in horizontal direction.

float $yКоордината Y в пунктах PostScript; значение растёт снизу вверх до преобразования системы координат.
Точная формулировка PHP Manual

Scaling factor in vertical direction.

Возврат. Тип bool. Официальный текст: Return Values Returns true on success.

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

Минимальная операция: ps_scaleПример для указанного окружения
<?php
declare(strict_types=1);

if (!extension_loaded('ps')) {
    throw new RuntimeException('Нужно расширение ps');
}

$outputDir = __DIR__ . '/exports';
if (!is_dir($outputDir) && !mkdir($outputDir, 0775, true) && !is_dir($outputDir)) {
    throw new RuntimeException('Не создан каталог exports');
}
$outputPath = $outputDir . '/ps-scale-minimal.ps';
$ps = ps_new();
if ($ps === false) { throw new RuntimeException('PS-ресурс не создан'); }
if (!ps_open_file($ps, $outputPath)) {
    ps_delete($ps);
    throw new RuntimeException('PostScript-файл не открыт');
}
ps_begin_page($ps, 595.0, 842.0);
// PostScript-файл и страница уже открыты в этом самодостаточном примере.
$fontId = ps_findfont($ps, 'Helvetica', 'builtin', false);
if ($fontId <= 0) { throw new RuntimeException('Шрифт не найден'); }
ps_setfont($ps, $fontId, 12.0);
if (!ps_save($ps)) { throw new RuntimeException('Графическое состояние не сохранено'); }
$result = ps_scale($ps, 1.10, 0.90);
if ($result !== true) { throw new RuntimeException('Операция отклонена'); }
ps_rect($ps, 72.0, 610.0, 120.0, 42.0);
ps_stroke($ps);
if (!ps_restore($ps)) { throw new RuntimeException('Графическое состояние не восстановлено'); }
ps_end_page($ps);
ps_close($ps);
ps_delete($ps);
if (!is_file($outputPath) || filesize($outputPath) === 0) {
    throw new RuntimeException('PostScript-файл не создан');
}
echo basename($outputPath), ' bytes=', filesize($outputPath), PHP_EOL;

Для ps_scale показаны обязательное состояние и проверяемый эффект; официальный тип возврата — bool. Пример сам создаёт ресурс, открывает файл и страницу, а затем завершает документ. Нативный runtime требует PECL ps и pslib; здесь заявлена только синтаксическая проверка.
Что должно получиться в совместимом окружении: Прямоугольник масштабирован коэффициентами 1.10 × 0.90, после чего исходная система координат восстановлена. ps-scale-minimal.ps bytes=<положительное число>.

В составе документа: ps_scaleПример для указанного окружения
<?php
declare(strict_types=1);

if (!extension_loaded('ps')) {
    throw new RuntimeException('Нужно расширение ps');
}

$outputDir = __DIR__ . '/exports';
if (!is_dir($outputDir) && !mkdir($outputDir, 0775, true) && !is_dir($outputDir)) {
    throw new RuntimeException('Не создан каталог exports');
}
$outputPath = $outputDir . '/ps-scale-workflow.ps';
$ps = ps_new();
if ($ps === false) { throw new RuntimeException('PS-ресурс не создан'); }
if (!ps_open_file($ps, $outputPath)) {
    ps_delete($ps);
    throw new RuntimeException('PostScript-файл не открыт');
}
ps_begin_page($ps, 595.0, 842.0);
// PostScript-файл и страница уже открыты в этом самодостаточном примере.
$fontId = ps_findfont($ps, 'Helvetica', 'builtin', false);
if ($fontId <= 0) { throw new RuntimeException('Шрифт не найден'); }
ps_setfont($ps, $fontId, 14.0);
if (!ps_save($ps)) { throw new RuntimeException('Графическое состояние не сохранено'); }
$result = ps_scale($ps, 1.25, 0.75);
if ($result !== true) { throw new RuntimeException('Операция отклонена'); }
ps_rect($ps, 72.0, 610.0, 120.0, 42.0);
ps_stroke($ps);
if (!ps_restore($ps)) { throw new RuntimeException('Графическое состояние не восстановлено'); }
ps_setgray_stroke($ps, 0.55);
ps_rect($ps, 72.0, 550.0, 120.0, 42.0);
ps_stroke($ps);
ps_end_page($ps);
ps_close($ps);
ps_delete($ps);
if (!is_file($outputPath) || filesize($outputPath) === 0) {
    throw new RuntimeException('PostScript-файл не создан');
}
echo basename($outputPath), ' bytes=', filesize($outputPath), PHP_EOL;

Для ps_scale показаны обязательное состояние и проверяемый эффект; официальный тип возврата — bool. Во втором варианте изменена задача/геометрия, а результат проверяют по готовому PS, не по синтетическому echo. Нативный runtime требует PECL ps и pslib; здесь заявлена только синтаксическая проверка.
Что должно получиться в совместимом окружении: Графическое состояние изменено; эффект проверяется по следующему нарисованному объекту. Первый прямоугольник масштабирован в сохранённом состоянии, затем ps_restore() возвращает исходную систему координат для контрольного прямоугольника. ps-scale-workflow.ps bytes=<положительное число>.

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

Полный официальный текст карточки на английском

Purpose: Sets scaling factor

Description Sets horizontal and vertical scaling of the coordinate system.

Return: Return Values Returns true on success.

Связанные операции: ps_rotate, ps_translate.

ps_set_border_colorЗадать цвет рамки PDF-аннотаций и ссылок, которая появится после преобразования PostScript в PDF.

PECL ps >= 1.1.0 · ps; pslib

ps_set_border_color(resource $psdoc, float $red, float $green, float $blue): bool

Задать цвет рамки PDF-аннотаций и ссылок, которая появится после преобразования PostScript в PDF.

Официальная сигнатура. ps_set_border_color(resource $psdoc, float $red, float $green, float $blue): bool.

Доступность. Точная строка официального versions.xml: PECL ps >= 1.1.0.

ПараметрЧто приходит и зачем
resource $psdocОткрытый документ PS, созданный ps_new() и связанный с файлом через ps_open_file().
Точная формулировка PHP Manual

Resource identifier of the postscript file as returned by ps_new .

float $redКомпонента цвета или длина штриха по смыслу функции; допустимый диапазон проверяйте до вызова.
Точная формулировка PHP Manual

The red component of the border color.

float $greenКомпонента цвета или длина штриха по смыслу функции; допустимый диапазон проверяйте до вызова.
Точная формулировка PHP Manual

The green component of the border color.

float $blueКомпонента цвета или длина штриха по смыслу функции; допустимый диапазон проверяйте до вызова.
Точная формулировка PHP Manual

The blue component of the border color.

Возврат. Тип bool. Официальный текст: Return Values Returns true on success.

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

Минимальная операция: ps_set_border_colorПример для указанного окружения
<?php
declare(strict_types=1);

if (!extension_loaded('ps')) {
    throw new RuntimeException('Нужно расширение ps');
}

$outputDir = __DIR__ . '/exports';
if (!is_dir($outputDir) && !mkdir($outputDir, 0775, true) && !is_dir($outputDir)) {
    throw new RuntimeException('Не создан каталог exports');
}
$outputPath = $outputDir . '/ps-set-border-color-minimal.ps';
$ps = ps_new();
if ($ps === false) { throw new RuntimeException('PS-ресурс не создан'); }
if (!ps_open_file($ps, $outputPath)) {
    ps_delete($ps);
    throw new RuntimeException('PostScript-файл не открыт');
}
ps_begin_page($ps, 595.0, 842.0);
// PostScript-файл и страница уже открыты в этом самодостаточном примере.
$fontId = ps_findfont($ps, 'Helvetica', 'builtin', false);
if ($fontId <= 0) { throw new RuntimeException('Шрифт не найден'); }
ps_setfont($ps, $fontId, 12.0);
$result = ps_set_border_color($ps, 0.1, 0.4, 0.7);
if ($result !== true) { throw new RuntimeException('Операция отклонена'); }
ps_end_page($ps);
ps_close($ps);
ps_delete($ps);
if (!is_file($outputPath) || filesize($outputPath) === 0) {
    throw new RuntimeException('PostScript-файл не создан');
}
echo basename($outputPath), ' bytes=', filesize($outputPath), PHP_EOL;

Для ps_set_border_color показаны обязательное состояние и проверяемый эффект; официальный тип возврата — bool. Пример сам создаёт ресурс, открывает файл и страницу, а затем завершает документ. Нативный runtime требует PECL ps и pslib; здесь заявлена только синтаксическая проверка.
Что должно получиться в совместимом окружении: Графическое состояние изменено; эффект проверяется по следующему нарисованному объекту. ps-set-border-color-minimal.ps bytes=<положительное число>.

В составе документа: ps_set_border_colorПример для указанного окружения
<?php
declare(strict_types=1);

if (!extension_loaded('ps')) {
    throw new RuntimeException('Нужно расширение ps');
}

$outputDir = __DIR__ . '/exports';
if (!is_dir($outputDir) && !mkdir($outputDir, 0775, true) && !is_dir($outputDir)) {
    throw new RuntimeException('Не создан каталог exports');
}
$outputPath = $outputDir . '/ps-set-border-color-workflow.ps';
$ps = ps_new();
if ($ps === false) { throw new RuntimeException('PS-ресурс не создан'); }
if (!ps_open_file($ps, $outputPath)) {
    ps_delete($ps);
    throw new RuntimeException('PostScript-файл не открыт');
}
ps_begin_page($ps, 595.0, 842.0);
// PostScript-файл и страница уже открыты в этом самодостаточном примере.
$fontId = ps_findfont($ps, 'Helvetica', 'builtin', false);
if ($fontId <= 0) { throw new RuntimeException('Шрифт не найден'); }
ps_setfont($ps, $fontId, 14.0);
$result = ps_set_border_color($ps, 0.8, 0.2, 0.1);
if ($result !== true) { throw new RuntimeException('Операция отклонена'); }
ps_rect($ps, 72.0, 610.0, 180.0, 42.0);
ps_stroke($ps);
ps_show_xy($ps, 'Проверка настройки', 80.0, 625.0);
ps_end_page($ps);
ps_close($ps);
ps_delete($ps);
if (!is_file($outputPath) || filesize($outputPath) === 0) {
    throw new RuntimeException('PostScript-файл не создан');
}
echo basename($outputPath), ' bytes=', filesize($outputPath), PHP_EOL;

Для ps_set_border_color показаны обязательное состояние и проверяемый эффект; официальный тип возврата — bool. Во втором варианте изменена задача/геометрия, а результат проверяют по готовому PS, не по синтетическому echo. Нативный runtime требует PECL ps и pslib; здесь заявлена только синтаксическая проверка.
Что должно получиться в совместимом окружении: Графическое состояние изменено; эффект проверяется по следующему нарисованному объекту. Настройка используется следующим нарисованным объектом. ps-set-border-color-workflow.ps bytes=<положительное число>.

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

Полный официальный текст карточки на английском

Purpose: Sets color of border for annotations

Description Links added with one of the functions ps_add_weblink , ps_add_pdflink , etc. will be displayed with a surounded rectangle when the postscript document is converted to pdf and viewed in a pdf viewer. This rectangle is not visible in the postscript document. This function sets the color of the rectangle's border line.

Return: Return Values Returns true on success.

Связанные операции: ps_set_border_dash, ps_set_border_style.

ps_set_border_dashЗадать длины штриха и промежутка у рамки PDF-аннотаций и ссылок.

PECL ps >= 1.1.0 · ps; pslib

ps_set_border_dash(resource $psdoc, float $black, float $white): bool

Задать длины штриха и промежутка у рамки PDF-аннотаций и ссылок.

Официальная сигнатура. ps_set_border_dash(resource $psdoc, float $black, float $white): bool.

Доступность. Точная строка официального versions.xml: PECL ps >= 1.1.0.

ПараметрЧто приходит и зачем
resource $psdocОткрытый документ PS, созданный ps_new() и связанный с файлом через ps_open_file().
Точная формулировка PHP Manual

Resource identifier of the postscript file as returned by ps_new .

float $blackКомпонента цвета или длина штриха по смыслу функции; допустимый диапазон проверяйте до вызова.
Точная формулировка PHP Manual

The length of the dash.

float $whiteКомпонента цвета или длина штриха по смыслу функции; допустимый диапазон проверяйте до вызова.
Точная формулировка PHP Manual

The length of the gap between dashes.

Возврат. Тип bool. Официальный текст: Return Values Returns true on success.

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

Минимальная операция: ps_set_border_dashПример для указанного окружения
<?php
declare(strict_types=1);

if (!extension_loaded('ps')) {
    throw new RuntimeException('Нужно расширение ps');
}

$outputDir = __DIR__ . '/exports';
if (!is_dir($outputDir) && !mkdir($outputDir, 0775, true) && !is_dir($outputDir)) {
    throw new RuntimeException('Не создан каталог exports');
}
$outputPath = $outputDir . '/ps-set-border-dash-minimal.ps';
$ps = ps_new();
if ($ps === false) { throw new RuntimeException('PS-ресурс не создан'); }
if (!ps_open_file($ps, $outputPath)) {
    ps_delete($ps);
    throw new RuntimeException('PostScript-файл не открыт');
}
ps_begin_page($ps, 595.0, 842.0);
// PostScript-файл и страница уже открыты в этом самодостаточном примере.
$fontId = ps_findfont($ps, 'Helvetica', 'builtin', false);
if ($fontId <= 0) { throw new RuntimeException('Шрифт не найден'); }
ps_setfont($ps, $fontId, 12.0);
$result = ps_set_border_dash($ps, 4.0, 2.0);
if ($result !== true) { throw new RuntimeException('Операция отклонена'); }
ps_end_page($ps);
ps_close($ps);
ps_delete($ps);
if (!is_file($outputPath) || filesize($outputPath) === 0) {
    throw new RuntimeException('PostScript-файл не создан');
}
echo basename($outputPath), ' bytes=', filesize($outputPath), PHP_EOL;

Для ps_set_border_dash показаны обязательное состояние и проверяемый эффект; официальный тип возврата — bool. Пример сам создаёт ресурс, открывает файл и страницу, а затем завершает документ. Нативный runtime требует PECL ps и pslib; здесь заявлена только синтаксическая проверка.
Что должно получиться в совместимом окружении: Графическое состояние изменено; эффект проверяется по следующему нарисованному объекту. ps-set-border-dash-minimal.ps bytes=<положительное число>.

В составе документа: ps_set_border_dashПример для указанного окружения
<?php
declare(strict_types=1);

if (!extension_loaded('ps')) {
    throw new RuntimeException('Нужно расширение ps');
}

$outputDir = __DIR__ . '/exports';
if (!is_dir($outputDir) && !mkdir($outputDir, 0775, true) && !is_dir($outputDir)) {
    throw new RuntimeException('Не создан каталог exports');
}
$outputPath = $outputDir . '/ps-set-border-dash-workflow.ps';
$ps = ps_new();
if ($ps === false) { throw new RuntimeException('PS-ресурс не создан'); }
if (!ps_open_file($ps, $outputPath)) {
    ps_delete($ps);
    throw new RuntimeException('PostScript-файл не открыт');
}
ps_begin_page($ps, 595.0, 842.0);
// PostScript-файл и страница уже открыты в этом самодостаточном примере.
$fontId = ps_findfont($ps, 'Helvetica', 'builtin', false);
if ($fontId <= 0) { throw new RuntimeException('Шрифт не найден'); }
ps_setfont($ps, $fontId, 14.0);
$result = ps_set_border_dash($ps, 8.0, 3.0);
if ($result !== true) { throw new RuntimeException('Операция отклонена'); }
ps_rect($ps, 72.0, 610.0, 180.0, 42.0);
ps_stroke($ps);
ps_show_xy($ps, 'Проверка настройки', 80.0, 625.0);
ps_end_page($ps);
ps_close($ps);
ps_delete($ps);
if (!is_file($outputPath) || filesize($outputPath) === 0) {
    throw new RuntimeException('PostScript-файл не создан');
}
echo basename($outputPath), ' bytes=', filesize($outputPath), PHP_EOL;

Для ps_set_border_dash показаны обязательное состояние и проверяемый эффект; официальный тип возврата — bool. Во втором варианте изменена задача/геометрия, а результат проверяют по готовому PS, не по синтетическому echo. Нативный runtime требует PECL ps и pslib; здесь заявлена только синтаксическая проверка.
Что должно получиться в совместимом окружении: Графическое состояние изменено; эффект проверяется по следующему нарисованному объекту. Настройка используется следующим нарисованным объектом. ps-set-border-dash-workflow.ps bytes=<положительное число>.

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

Полный официальный текст карточки на английском

Purpose: Sets length of dashes for border of annotations

Description Links added with one of the functions ps_add_weblink , ps_add_pdflink , etc. will be displayed with a surounded rectangle when the postscript document is converted to pdf and viewed in a pdf viewer. This rectangle is not visible in the postscript document. This function sets the length of the black and white portion of a dashed border line.

Return: Return Values Returns true on success.

Связанные операции: ps_set_border_color, ps_set_border_style.

ps_set_border_styleВыбрать стиль и толщину рамки PDF-аннотаций и ссылок.

PECL ps >= 1.1.0 · ps; pslib

ps_set_border_style(resource $psdoc, string $style, float $width): bool

Выбрать стиль и толщину рамки PDF-аннотаций и ссылок.

Официальная сигнатура. ps_set_border_style(resource $psdoc, string $style, float $width): bool.

Доступность. Точная строка официального versions.xml: PECL ps >= 1.1.0.

ПараметрЧто приходит и зачем
resource $psdocОткрытый документ PS, созданный ps_new() и связанный с файлом через ps_open_file().
Точная формулировка PHP Manual

Resource identifier of the postscript file as returned by ps_new .

string $styleИменованный стиль/константа именно той функции, куда он передаётся.
Точная формулировка PHP Manual

style can be solid or dashed .

float $widthРазмер/шаг в единицах текущей операции; для геометрии PostScript обычно используются пункты.
Точная формулировка PHP Manual

The line width of the border.

Возврат. Тип bool. Официальный текст: Return Values Returns true on success.

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

Минимальная операция: ps_set_border_styleПример для указанного окружения
<?php
declare(strict_types=1);

if (!extension_loaded('ps')) {
    throw new RuntimeException('Нужно расширение ps');
}

$outputDir = __DIR__ . '/exports';
if (!is_dir($outputDir) && !mkdir($outputDir, 0775, true) && !is_dir($outputDir)) {
    throw new RuntimeException('Не создан каталог exports');
}
$outputPath = $outputDir . '/ps-set-border-style-minimal.ps';
$ps = ps_new();
if ($ps === false) { throw new RuntimeException('PS-ресурс не создан'); }
if (!ps_open_file($ps, $outputPath)) {
    ps_delete($ps);
    throw new RuntimeException('PostScript-файл не открыт');
}
ps_begin_page($ps, 595.0, 842.0);
// PostScript-файл и страница уже открыты в этом самодостаточном примере.
$fontId = ps_findfont($ps, 'Helvetica', 'builtin', false);
if ($fontId <= 0) { throw new RuntimeException('Шрифт не найден'); }
ps_setfont($ps, $fontId, 12.0);
$result = ps_set_border_style($ps, 'solid', 1.0);
if ($result !== true) { throw new RuntimeException('Операция отклонена'); }
ps_end_page($ps);
ps_close($ps);
ps_delete($ps);
if (!is_file($outputPath) || filesize($outputPath) === 0) {
    throw new RuntimeException('PostScript-файл не создан');
}
echo basename($outputPath), ' bytes=', filesize($outputPath), PHP_EOL;

Для ps_set_border_style показаны обязательное состояние и проверяемый эффект; официальный тип возврата — bool. Пример сам создаёт ресурс, открывает файл и страницу, а затем завершает документ. Нативный runtime требует PECL ps и pslib; здесь заявлена только синтаксическая проверка.
Что должно получиться в совместимом окружении: Графическое состояние изменено; эффект проверяется по следующему нарисованному объекту. ps-set-border-style-minimal.ps bytes=<положительное число>.

В составе документа: ps_set_border_styleПример для указанного окружения
<?php
declare(strict_types=1);

if (!extension_loaded('ps')) {
    throw new RuntimeException('Нужно расширение ps');
}

$outputDir = __DIR__ . '/exports';
if (!is_dir($outputDir) && !mkdir($outputDir, 0775, true) && !is_dir($outputDir)) {
    throw new RuntimeException('Не создан каталог exports');
}
$outputPath = $outputDir . '/ps-set-border-style-workflow.ps';
$ps = ps_new();
if ($ps === false) { throw new RuntimeException('PS-ресурс не создан'); }
if (!ps_open_file($ps, $outputPath)) {
    ps_delete($ps);
    throw new RuntimeException('PostScript-файл не открыт');
}
ps_begin_page($ps, 595.0, 842.0);
// PostScript-файл и страница уже открыты в этом самодостаточном примере.
$fontId = ps_findfont($ps, 'Helvetica', 'builtin', false);
if ($fontId <= 0) { throw new RuntimeException('Шрифт не найден'); }
ps_setfont($ps, $fontId, 14.0);
$result = ps_set_border_style($ps, 'dashed', 2.0);
if ($result !== true) { throw new RuntimeException('Операция отклонена'); }
ps_rect($ps, 72.0, 610.0, 180.0, 42.0);
ps_stroke($ps);
ps_show_xy($ps, 'Проверка настройки', 80.0, 625.0);
ps_end_page($ps);
ps_close($ps);
ps_delete($ps);
if (!is_file($outputPath) || filesize($outputPath) === 0) {
    throw new RuntimeException('PostScript-файл не создан');
}
echo basename($outputPath), ' bytes=', filesize($outputPath), PHP_EOL;

Для ps_set_border_style показаны обязательное состояние и проверяемый эффект; официальный тип возврата — bool. Во втором варианте изменена задача/геометрия, а результат проверяют по готовому PS, не по синтетическому echo. Нативный runtime требует PECL ps и pslib; здесь заявлена только синтаксическая проверка.
Что должно получиться в совместимом окружении: Графическое состояние изменено; эффект проверяется по следующему нарисованному объекту. Настройка используется следующим нарисованным объектом. ps-set-border-style-workflow.ps bytes=<положительное число>.

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

Полный официальный текст карточки на английском

Purpose: Sets border style of annotations

Description Links added with one of the functions ps_add_weblink , ps_add_pdflink , etc. will be displayed with a surounded rectangle when the postscript document is converted to pdf and viewed in a pdf viewer. This rectangle is not visible in the postscript document. This function sets the appearance and width of the border line.

Return: Return Values Returns true on success.

Связанные операции: ps_set_border_color, ps_set_border_dash.

ps_set_infoЗаписать метаданные в заголовок PostScript и будущие свойства PDF до вывода первой страницы или шрифта.

PECL ps >= 1.1.0 · ps; pslib

ps_set_info(resource $psdoc, string $key, string $value): bool

Записать метаданные в заголовок PostScript и будущие свойства PDF до вывода первой страницы или шрифта.

Официальная сигнатура. ps_set_info(resource $psdoc, string $key, string $value): bool.

Доступность. Точная строка официального versions.xml: PECL ps >= 1.1.0.

ПараметрЧто приходит и зачем
resource $psdocОткрытый документ PS, созданный ps_new() и связанный с файлом через ps_open_file().
Точная формулировка PHP Manual

Resource identifier of the postscript file as returned by ps_new .

string $keyКлюч метаданных PostScript, например Title, Creator или Author.
Точная формулировка PHP Manual

The name of the information field to set. The values which can be set are Keywords , Subject , Title , Creator , Author , BoundingBox , and Orientation . Be aware that some of them has a meaning to PostScript viewers.

string $valueНовое значение по смыслу текущей операции.
Точная формулировка PHP Manual

The value of the information field. The field Orientation can be set to either Portrait or Landscape . The BoundingBox is a string consisting of four numbers. The first two numbers are the coordinates of the lower left corner of the page. The last two numbers are the coordinates of the upper right corner. Up to version 0.2.6 of pslib, the BoundingBox and Orientation will be overwritten by ps_begin_page , unless ps_findfont has been called before.

Возврат. Тип bool. Официальный текст: Return Values Returns true on success.

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

Минимальная операция: ps_set_infoПример для указанного окружения
<?php
declare(strict_types=1);

if (!extension_loaded('ps')) {
    throw new RuntimeException('Нужно расширение ps');
}

$outputDir = __DIR__ . '/exports';
if (!is_dir($outputDir) && !mkdir($outputDir, 0775, true) && !is_dir($outputDir)) {
    throw new RuntimeException('Не создан каталог exports');
}
$outputPath = $outputDir . '/ps-set-info-minimal.ps';
$ps = ps_new();
if ($ps === false) { throw new RuntimeException('PS-ресурс не создан'); }
if (!ps_open_file($ps, $outputPath)) {
    ps_delete($ps);
    throw new RuntimeException('PostScript-файл не открыт');
}
ps_begin_page($ps, 595.0, 842.0);
// PostScript-файл и страница уже открыты в этом самодостаточном примере.
$fontId = ps_findfont($ps, 'Helvetica', 'builtin', false);
if ($fontId <= 0) { throw new RuntimeException('Шрифт не найден'); }
ps_setfont($ps, $fontId, 12.0);
$result = ps_set_info($ps, 'Title', 'Order 42');
if ($result !== true) { throw new RuntimeException('Операция отклонена'); }
ps_end_page($ps);
ps_close($ps);
ps_delete($ps);
if (!is_file($outputPath) || filesize($outputPath) === 0) {
    throw new RuntimeException('PostScript-файл не создан');
}
echo basename($outputPath), ' bytes=', filesize($outputPath), PHP_EOL;

Для ps_set_info показаны обязательное состояние и проверяемый эффект; официальный тип возврата — bool. Пример сам создаёт ресурс, открывает файл и страницу, а затем завершает документ. Нативный runtime требует PECL ps и pslib; здесь заявлена только синтаксическая проверка.
Что должно получиться в совместимом окружении: Графическое состояние изменено; эффект проверяется по следующему нарисованному объекту. ps-set-info-minimal.ps bytes=<положительное число>.

В составе документа: ps_set_infoПример для указанного окружения
<?php
declare(strict_types=1);

if (!extension_loaded('ps')) {
    throw new RuntimeException('Нужно расширение ps');
}

$outputDir = __DIR__ . '/exports';
if (!is_dir($outputDir) && !mkdir($outputDir, 0775, true) && !is_dir($outputDir)) {
    throw new RuntimeException('Не создан каталог exports');
}
$outputPath = $outputDir . '/ps-set-info-workflow.ps';
$ps = ps_new();
if ($ps === false) { throw new RuntimeException('PS-ресурс не создан'); }
if (!ps_open_file($ps, $outputPath)) {
    ps_delete($ps);
    throw new RuntimeException('PostScript-файл не открыт');
}
ps_begin_page($ps, 595.0, 842.0);
// PostScript-файл и страница уже открыты в этом самодостаточном примере.
$fontId = ps_findfont($ps, 'Helvetica', 'builtin', false);
if ($fontId <= 0) { throw new RuntimeException('Шрифт не найден'); }
ps_setfont($ps, $fontId, 14.0);
$result = ps_set_info($ps, 'Creator', 'Delivery service');
if ($result !== true) { throw new RuntimeException('Операция отклонена'); }
ps_rect($ps, 72.0, 610.0, 180.0, 42.0);
ps_stroke($ps);
ps_show_xy($ps, 'Проверка настройки', 80.0, 625.0);
ps_end_page($ps);
ps_close($ps);
ps_delete($ps);
if (!is_file($outputPath) || filesize($outputPath) === 0) {
    throw new RuntimeException('PostScript-файл не создан');
}
echo basename($outputPath), ' bytes=', filesize($outputPath), PHP_EOL;

Для ps_set_info показаны обязательное состояние и проверяемый эффект; официальный тип возврата — bool. Во втором варианте изменена задача/геометрия, а результат проверяют по готовому PS, не по синтетическому echo. Нативный runtime требует PECL ps и pslib; здесь заявлена только синтаксическая проверка.
Что должно получиться в совместимом окружении: Графическое состояние изменено; эффект проверяется по следующему нарисованному объекту. Настройка используется следующим нарисованным объектом. ps-set-info-workflow.ps bytes=<положительное число>.

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

Полный официальный текст карточки на английском

Purpose: Sets information fields of document

Description Sets certain information fields of the document. This fields will be shown as a comment in the header of the PostScript file. If the document is converted to pdf this fields will also be used for the document information. The BoundingBox is usually set to the value given to the first page. This only works if ps_findfont has not been called before. In such cases the BoundingBox would be left unset unless you set it explicitly with this function. This function will have no effect anymore when the header of the postscript file has been already written. It must be called before the first page or the first call of ps_findfont .

Return: Return Values Returns true on success.

Связанные операции: ps_findfont, ps_begin_page.

ps_set_parameterНастроить строковый параметр в текущем PostScript-документе.

PECL ps >= 1.1.0 · ps; pslib

ps_set_parameter(resource $psdoc, string $name, string $value): bool

Настроить строковый параметр в текущем PostScript-документе.

Официальная сигнатура. ps_set_parameter(resource $psdoc, string $name, string $value): bool.

Доступность. Точная строка официального versions.xml: PECL ps >= 1.1.0.

ПараметрЧто приходит и зачем
resource $psdocОткрытый документ PS, созданный ps_new() и связанный с файлом через ps_open_file().
Точная формулировка PHP Manual

Resource identifier of the postscript file as returned by ps_new .

string $nameИмя параметра, макроса, цвета или другого объекта по договору выбранной функции.
Точная формулировка PHP Manual

For a list of possible names see ps_get_parameter .

string $valueНовое значение по смыслу текущей операции.
Точная формулировка PHP Manual

The value of the parameter.

Возврат. Тип bool. Официальный текст: Return Values Returns true on success.

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

Минимальная операция: ps_set_parameterПример для указанного окружения
<?php
declare(strict_types=1);

if (!extension_loaded('ps')) {
    throw new RuntimeException('Нужно расширение ps');
}

$outputDir = __DIR__ . '/exports';
if (!is_dir($outputDir) && !mkdir($outputDir, 0775, true) && !is_dir($outputDir)) {
    throw new RuntimeException('Не создан каталог exports');
}
$outputPath = $outputDir . '/ps-set-parameter-minimal.ps';
$ps = ps_new();
if ($ps === false) { throw new RuntimeException('PS-ресурс не создан'); }
if (!ps_open_file($ps, $outputPath)) {
    ps_delete($ps);
    throw new RuntimeException('PostScript-файл не открыт');
}
ps_begin_page($ps, 595.0, 842.0);
// PostScript-файл и страница уже открыты в этом самодостаточном примере.
$fontId = ps_findfont($ps, 'Helvetica', 'builtin', false);
if ($fontId <= 0) { throw new RuntimeException('Шрифт не найден'); }
ps_setfont($ps, $fontId, 12.0);
$result = ps_set_parameter($ps, 'warning', 'true');
if ($result !== true) { throw new RuntimeException('Операция отклонена'); }
ps_end_page($ps);
ps_close($ps);
ps_delete($ps);
if (!is_file($outputPath) || filesize($outputPath) === 0) {
    throw new RuntimeException('PostScript-файл не создан');
}
echo basename($outputPath), ' bytes=', filesize($outputPath), PHP_EOL;

Для ps_set_parameter показаны обязательное состояние и проверяемый эффект; официальный тип возврата — bool. Пример сам создаёт ресурс, открывает файл и страницу, а затем завершает документ. Нативный runtime требует PECL ps и pslib; здесь заявлена только синтаксическая проверка.
Что должно получиться в совместимом окружении: Графическое состояние изменено; эффект проверяется по следующему нарисованному объекту. ps-set-parameter-minimal.ps bytes=<положительное число>.

В составе документа: ps_set_parameterПример для указанного окружения
<?php
declare(strict_types=1);

if (!extension_loaded('ps')) {
    throw new RuntimeException('Нужно расширение ps');
}

$outputDir = __DIR__ . '/exports';
if (!is_dir($outputDir) && !mkdir($outputDir, 0775, true) && !is_dir($outputDir)) {
    throw new RuntimeException('Не создан каталог exports');
}
$outputPath = $outputDir . '/ps-set-parameter-workflow.ps';
$ps = ps_new();
if ($ps === false) { throw new RuntimeException('PS-ресурс не создан'); }
if (!ps_open_file($ps, $outputPath)) {
    ps_delete($ps);
    throw new RuntimeException('PostScript-файл не открыт');
}
ps_begin_page($ps, 595.0, 842.0);
// PostScript-файл и страница уже открыты в этом самодостаточном примере.
$fontId = ps_findfont($ps, 'Helvetica', 'builtin', false);
if ($fontId <= 0) { throw new RuntimeException('Шрифт не найден'); }
ps_setfont($ps, $fontId, 14.0);
$result = ps_set_parameter($ps, 'SearchPath', '/srv/fonts');
if ($result !== true) { throw new RuntimeException('Операция отклонена'); }
ps_rect($ps, 72.0, 610.0, 180.0, 42.0);
ps_stroke($ps);
ps_show_xy($ps, 'Проверка настройки', 80.0, 625.0);
ps_end_page($ps);
ps_close($ps);
ps_delete($ps);
if (!is_file($outputPath) || filesize($outputPath) === 0) {
    throw new RuntimeException('PostScript-файл не создан');
}
echo basename($outputPath), ' bytes=', filesize($outputPath), PHP_EOL;

Для ps_set_parameter показаны обязательное состояние и проверяемый эффект; официальный тип возврата — bool. Во втором варианте изменена задача/геометрия, а результат проверяют по готовому PS, не по синтетическому echo. Нативный runtime требует PECL ps и pslib; здесь заявлена только синтаксическая проверка.
Что должно получиться в совместимом окружении: Графическое состояние изменено; эффект проверяется по следующему нарисованному объекту. Настройка используется следующим нарисованным объектом. ps-set-parameter-workflow.ps bytes=<положительное число>.

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

Полный официальный текст карточки на английском

Purpose: Sets certain parameters

Description Sets several parameters which are used by many functions. Parameters are by definition string values.

Return: Return Values Returns true on success.

Связанные операции: ps_set_value.

ps_set_text_posНастроить text pos в текущем PostScript-документе.

PECL ps >= 1.1.0 · ps; pslib

ps_set_text_pos(resource $psdoc, float $x, float $y): bool

Настроить text pos в текущем PostScript-документе.

Официальная сигнатура. ps_set_text_pos(resource $psdoc, float $x, float $y): bool.

Доступность. Точная строка официального versions.xml: PECL ps >= 1.1.0.

ПараметрЧто приходит и зачем
resource $psdocОткрытый документ PS, созданный ps_new() и связанный с файлом через ps_open_file().
Точная формулировка PHP Manual

Resource identifier of the postscript file as returned by ps_new .

float $xКоордината X в пунктах PostScript; начало системы координат по умолчанию находится слева снизу.
Точная формулировка PHP Manual

x-coordinate of the new text position.

float $yКоордината Y в пунктах PostScript; значение растёт снизу вверх до преобразования системы координат.
Точная формулировка PHP Manual

y-coordinate of the new text position.

Возврат. Тип bool. Официальный текст: Return Values Returns true on success.

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

Минимальная операция: ps_set_text_posПример для указанного окружения
<?php
declare(strict_types=1);

if (!extension_loaded('ps')) {
    throw new RuntimeException('Нужно расширение ps');
}

$outputDir = __DIR__ . '/exports';
if (!is_dir($outputDir) && !mkdir($outputDir, 0775, true) && !is_dir($outputDir)) {
    throw new RuntimeException('Не создан каталог exports');
}
$outputPath = $outputDir . '/ps-set-text-pos-minimal.ps';
$ps = ps_new();
if ($ps === false) { throw new RuntimeException('PS-ресурс не создан'); }
if (!ps_open_file($ps, $outputPath)) {
    ps_delete($ps);
    throw new RuntimeException('PostScript-файл не открыт');
}
ps_begin_page($ps, 595.0, 842.0);
// PostScript-файл и страница уже открыты в этом самодостаточном примере.
$fontId = ps_findfont($ps, 'Helvetica', 'builtin', false);
if ($fontId <= 0) { throw new RuntimeException('Шрифт не найден'); }
ps_setfont($ps, $fontId, 12.0);
$result = ps_set_text_pos($ps, 100.0, 120.0);
if ($result !== true) { throw new RuntimeException('Операция отклонена'); }
ps_end_page($ps);
ps_close($ps);
ps_delete($ps);
if (!is_file($outputPath) || filesize($outputPath) === 0) {
    throw new RuntimeException('PostScript-файл не создан');
}
echo basename($outputPath), ' bytes=', filesize($outputPath), PHP_EOL;

Для ps_set_text_pos показаны обязательное состояние и проверяемый эффект; официальный тип возврата — bool. Пример сам создаёт ресурс, открывает файл и страницу, а затем завершает документ. Нативный runtime требует PECL ps и pslib; здесь заявлена только синтаксическая проверка.
Что должно получиться в совместимом окружении: Графическое состояние изменено; эффект проверяется по следующему нарисованному объекту. ps-set-text-pos-minimal.ps bytes=<положительное число>.

В составе документа: ps_set_text_posПример для указанного окружения
<?php
declare(strict_types=1);

if (!extension_loaded('ps')) {
    throw new RuntimeException('Нужно расширение ps');
}

$outputDir = __DIR__ . '/exports';
if (!is_dir($outputDir) && !mkdir($outputDir, 0775, true) && !is_dir($outputDir)) {
    throw new RuntimeException('Не создан каталог exports');
}
$outputPath = $outputDir . '/ps-set-text-pos-workflow.ps';
$ps = ps_new();
if ($ps === false) { throw new RuntimeException('PS-ресурс не создан'); }
if (!ps_open_file($ps, $outputPath)) {
    ps_delete($ps);
    throw new RuntimeException('PostScript-файл не открыт');
}
ps_begin_page($ps, 595.0, 842.0);
// PostScript-файл и страница уже открыты в этом самодостаточном примере.
$fontId = ps_findfont($ps, 'Helvetica', 'builtin', false);
if ($fontId <= 0) { throw new RuntimeException('Шрифт не найден'); }
ps_setfont($ps, $fontId, 14.0);
$result = ps_set_text_pos($ps, 160.0, 240.0);
if ($result !== true) { throw new RuntimeException('Операция отклонена'); }
ps_rect($ps, 72.0, 610.0, 180.0, 42.0);
ps_stroke($ps);
ps_show_xy($ps, 'Проверка настройки', 80.0, 625.0);
ps_end_page($ps);
ps_close($ps);
ps_delete($ps);
if (!is_file($outputPath) || filesize($outputPath) === 0) {
    throw new RuntimeException('PostScript-файл не создан');
}
echo basename($outputPath), ' bytes=', filesize($outputPath), PHP_EOL;

Для ps_set_text_pos показаны обязательное состояние и проверяемый эффект; официальный тип возврата — bool. Во втором варианте изменена задача/геометрия, а результат проверяют по готовому PS, не по синтетическому echo. Нативный runtime требует PECL ps и pslib; здесь заявлена только синтаксическая проверка.
Что должно получиться в совместимом окружении: Графическое состояние изменено; эффект проверяется по следующему нарисованному объекту. Настройка используется следующим нарисованным объектом. ps-set-text-pos-workflow.ps bytes=<положительное число>.

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

Полный официальный текст карточки на английском

Purpose: Sets position for text output

Description Set the position for the next text output. You may alternatively set the x and y value separately by calling ps_set_value and choosing textx respectively texty as the value name. If you want to output text at a certain position it is more convenient to use ps_show_xy instead of setting the text position and calling ps_show .

Return: Return Values Returns true on success.

Связанные операции: ps_set_value, ps_show.

ps_set_valueНастроить значение поля в текущем PostScript-документе.

PECL ps >= 1.1.0 · ps; pslib

ps_set_value(resource $psdoc, string $name, float $value): bool

Настроить значение поля в текущем PostScript-документе.

Официальная сигнатура. ps_set_value(resource $psdoc, string $name, float $value): bool.

Доступность. Точная строка официального versions.xml: PECL ps >= 1.1.0.

ПараметрЧто приходит и зачем
resource $psdocОткрытый документ PS, созданный ps_new() и связанный с файлом через ps_open_file().
Точная формулировка PHP Manual

Resource identifier of the postscript file as returned by ps_new .

string $nameИмя параметра, макроса, цвета или другого объекта по договору выбранной функции.
Точная формулировка PHP Manual

The name can be one of the following: textrendering The way how text is shown. textx The x coordinate for text output. texty The y coordinate for text output. wordspacing The distance between words relative to the width of a space. leading The distance between lines in pixels.

float $valueНовое значение по смыслу текущей операции.
Точная формулировка PHP Manual

The value of the parameter.

Возврат. Тип bool. Официальный текст: Return Values Returns true on success.

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

Минимальная операция: ps_set_valueПример для указанного окружения
<?php
declare(strict_types=1);

if (!extension_loaded('ps')) {
    throw new RuntimeException('Нужно расширение ps');
}

$outputDir = __DIR__ . '/exports';
if (!is_dir($outputDir) && !mkdir($outputDir, 0775, true) && !is_dir($outputDir)) {
    throw new RuntimeException('Не создан каталог exports');
}
$outputPath = $outputDir . '/ps-set-value-minimal.ps';
$ps = ps_new();
if ($ps === false) { throw new RuntimeException('PS-ресурс не создан'); }
if (!ps_open_file($ps, $outputPath)) {
    ps_delete($ps);
    throw new RuntimeException('PostScript-файл не открыт');
}
ps_begin_page($ps, 595.0, 842.0);
// PostScript-файл и страница уже открыты в этом самодостаточном примере.
$fontId = ps_findfont($ps, 'Helvetica', 'builtin', false);
if ($fontId <= 0) { throw new RuntimeException('Шрифт не найден'); }
ps_setfont($ps, $fontId, 12.0);
$result = ps_set_value($ps, 'leading', 12.0);
if ($result !== true) { throw new RuntimeException('Операция отклонена'); }
ps_end_page($ps);
ps_close($ps);
ps_delete($ps);
if (!is_file($outputPath) || filesize($outputPath) === 0) {
    throw new RuntimeException('PostScript-файл не создан');
}
echo basename($outputPath), ' bytes=', filesize($outputPath), PHP_EOL;

Для ps_set_value показаны обязательное состояние и проверяемый эффект; официальный тип возврата — bool. Пример сам создаёт ресурс, открывает файл и страницу, а затем завершает документ. Нативный runtime требует PECL ps и pslib; здесь заявлена только синтаксическая проверка.
Что должно получиться в совместимом окружении: Графическое состояние изменено; эффект проверяется по следующему нарисованному объекту. ps-set-value-minimal.ps bytes=<положительное число>.

В составе документа: ps_set_valueПример для указанного окружения
<?php
declare(strict_types=1);

if (!extension_loaded('ps')) {
    throw new RuntimeException('Нужно расширение ps');
}

$outputDir = __DIR__ . '/exports';
if (!is_dir($outputDir) && !mkdir($outputDir, 0775, true) && !is_dir($outputDir)) {
    throw new RuntimeException('Не создан каталог exports');
}
$outputPath = $outputDir . '/ps-set-value-workflow.ps';
$ps = ps_new();
if ($ps === false) { throw new RuntimeException('PS-ресурс не создан'); }
if (!ps_open_file($ps, $outputPath)) {
    ps_delete($ps);
    throw new RuntimeException('PostScript-файл не открыт');
}
ps_begin_page($ps, 595.0, 842.0);
// PostScript-файл и страница уже открыты в этом самодостаточном примере.
$fontId = ps_findfont($ps, 'Helvetica', 'builtin', false);
if ($fontId <= 0) { throw new RuntimeException('Шрифт не найден'); }
ps_setfont($ps, $fontId, 14.0);
$result = ps_set_value($ps, 'wordspacing', 14.0);
if ($result !== true) { throw new RuntimeException('Операция отклонена'); }
ps_rect($ps, 72.0, 610.0, 180.0, 42.0);
ps_stroke($ps);
ps_show_xy($ps, 'Проверка настройки', 80.0, 625.0);
ps_end_page($ps);
ps_close($ps);
ps_delete($ps);
if (!is_file($outputPath) || filesize($outputPath) === 0) {
    throw new RuntimeException('PostScript-файл не создан');
}
echo basename($outputPath), ' bytes=', filesize($outputPath), PHP_EOL;

Для ps_set_value показаны обязательное состояние и проверяемый эффект; официальный тип возврата — bool. Во втором варианте изменена задача/геометрия, а результат проверяют по готовому PS, не по синтетическому echo. Нативный runtime требует PECL ps и pslib; здесь заявлена только синтаксическая проверка.
Что должно получиться в совместимом окружении: Графическое состояние изменено; эффект проверяется по следующему нарисованному объекту. Настройка используется следующим нарисованным объектом. ps-set-value-workflow.ps bytes=<положительное число>.

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

Полный официальный текст карточки на английском

Purpose: Sets certain values

Description Sets several values which are used by many functions. Parameters are by definition float values.

Return: Return Values Returns true on success.

Связанные операции: ps_get_value, ps_set_parameter.

ps_setcolorВыбрать цвет в текущем PostScript-документе.

PECL ps >= 1.1.0 · ps; pslib

ps_setcolor(resource $psdoc, string $type, string $colorspace, float $c1, float $c2, float $c3, float $c4): bool

Выбрать цвет в текущем PostScript-документе.

Официальная сигнатура. ps_setcolor(resource $psdoc, string $type, string $colorspace, float $c1, float $c2, float $c3, float $c4): bool.

Доступность. Точная строка официального versions.xml: PECL ps >= 1.1.0.

ПараметрЧто приходит и зачем
resource $psdocОткрытый документ PS, созданный ps_new() и связанный с файлом через ps_open_file().
Точная формулировка PHP Manual

Resource identifier of the postscript file as returned by ps_new .

string $typeТип операции: формат изображения, тип цвета или другой документированный вариант.
Точная формулировка PHP Manual

The parameter type can be both , fill , or fillstroke .

string $colorspaceПараметр $colorspace типа string именно для операции ps_setcolor.
Точная формулировка PHP Manual

The colorspace should be one of gray , rgb , cmyk , spot , pattern . Depending on the colorspace either only the first, the first three or all parameters will be used.

float $c1Компонента цвета или длина штриха по смыслу функции; допустимый диапазон проверяйте до вызова.
Точная формулировка PHP Manual

Depending on the colorspace this is either the red component (rgb), the cyan component (cmyk), the gray value (gray), the identifier of the spot color or the identifier of the pattern.

float $c2Компонента цвета или длина штриха по смыслу функции; допустимый диапазон проверяйте до вызова.
Точная формулировка PHP Manual

Depending on the colorspace this is either the green component (rgb), the magenta component (cmyk).

float $c3Компонента цвета или длина штриха по смыслу функции; допустимый диапазон проверяйте до вызова.
Точная формулировка PHP Manual

Depending on the colorspace this is either the blue component (rgb), the yellow component (cmyk).

float $c4Компонента цвета или длина штриха по смыслу функции; допустимый диапазон проверяйте до вызова.
Точная формулировка PHP Manual

This must only be set in cmyk colorspace and specifies the black component.

Возврат. Тип bool. Официальный текст: Return Values Returns true on success.

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

Минимальная операция: ps_setcolorПример для указанного окружения
<?php
declare(strict_types=1);

if (!extension_loaded('ps')) {
    throw new RuntimeException('Нужно расширение ps');
}

$outputDir = __DIR__ . '/exports';
if (!is_dir($outputDir) && !mkdir($outputDir, 0775, true) && !is_dir($outputDir)) {
    throw new RuntimeException('Не создан каталог exports');
}
$outputPath = $outputDir . '/ps-setcolor-minimal.ps';
$ps = ps_new();
if ($ps === false) { throw new RuntimeException('PS-ресурс не создан'); }
if (!ps_open_file($ps, $outputPath)) {
    ps_delete($ps);
    throw new RuntimeException('PostScript-файл не открыт');
}
ps_begin_page($ps, 595.0, 842.0);
// PostScript-файл и страница уже открыты в этом самодостаточном примере.
$fontId = ps_findfont($ps, 'Helvetica', 'builtin', false);
if ($fontId <= 0) { throw new RuntimeException('Шрифт не найден'); }
ps_setfont($ps, $fontId, 12.0);
$result = ps_setcolor($ps, 'fill', 'rgb', 0.1, 0.4, 0.7, 0.0);
if ($result !== true) { throw new RuntimeException('Операция отклонена'); }
ps_end_page($ps);
ps_close($ps);
ps_delete($ps);
if (!is_file($outputPath) || filesize($outputPath) === 0) {
    throw new RuntimeException('PostScript-файл не создан');
}
echo basename($outputPath), ' bytes=', filesize($outputPath), PHP_EOL;

Для ps_setcolor показаны обязательное состояние и проверяемый эффект; официальный тип возврата — bool. Пример сам создаёт ресурс, открывает файл и страницу, а затем завершает документ. Нативный runtime требует PECL ps и pslib; здесь заявлена только синтаксическая проверка.
Что должно получиться в совместимом окружении: Графическое состояние изменено; эффект проверяется по следующему нарисованному объекту. ps-setcolor-minimal.ps bytes=<положительное число>.

В составе документа: ps_setcolorПример для указанного окружения
<?php
declare(strict_types=1);

if (!extension_loaded('ps')) {
    throw new RuntimeException('Нужно расширение ps');
}

$outputDir = __DIR__ . '/exports';
if (!is_dir($outputDir) && !mkdir($outputDir, 0775, true) && !is_dir($outputDir)) {
    throw new RuntimeException('Не создан каталог exports');
}
$outputPath = $outputDir . '/ps-setcolor-workflow.ps';
$ps = ps_new();
if ($ps === false) { throw new RuntimeException('PS-ресурс не создан'); }
if (!ps_open_file($ps, $outputPath)) {
    ps_delete($ps);
    throw new RuntimeException('PostScript-файл не открыт');
}
ps_begin_page($ps, 595.0, 842.0);
// PostScript-файл и страница уже открыты в этом самодостаточном примере.
$fontId = ps_findfont($ps, 'Helvetica', 'builtin', false);
if ($fontId <= 0) { throw new RuntimeException('Шрифт не найден'); }
ps_setfont($ps, $fontId, 14.0);
$result = ps_setcolor($ps, 'both', 'cmyk', 0.2, 0.1, 0.0, 0.2);
if ($result !== true) { throw new RuntimeException('Операция отклонена'); }
ps_rect($ps, 72.0, 610.0, 180.0, 42.0);
ps_stroke($ps);
ps_show_xy($ps, 'Проверка настройки', 80.0, 625.0);
ps_end_page($ps);
ps_close($ps);
ps_delete($ps);
if (!is_file($outputPath) || filesize($outputPath) === 0) {
    throw new RuntimeException('PostScript-файл не создан');
}
echo basename($outputPath), ' bytes=', filesize($outputPath), PHP_EOL;

Для ps_setcolor показаны обязательное состояние и проверяемый эффект; официальный тип возврата — bool. Во втором варианте изменена задача/геометрия, а результат проверяют по готовому PS, не по синтетическому echo. Нативный runtime требует PECL ps и pslib; здесь заявлена только синтаксическая проверка.
Что должно получиться в совместимом окружении: Графическое состояние изменено; эффект проверяется по следующему нарисованному объекту. Настройка используется следующим нарисованным объектом. ps-setcolor-workflow.ps bytes=<положительное число>.

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

Официальные замечания. The second parameter is currently not always evaluated. The color is sometimes set for filling and drawing just as if fillstroke were passed.

Полный официальный текст карточки на английском

Purpose: Sets current color

Description Sets the color for drawing, filling, or both.

Return: Return Values Returns true on success.

ps_setdashНастроить штриховую линию в текущем PostScript-документе.

PECL ps >= 1.1.0 · ps; pslib

ps_setdash(resource $psdoc, float $on, float $off): bool

Настроить штриховую линию в текущем PostScript-документе.

Официальная сигнатура. ps_setdash(resource $psdoc, float $on, float $off): bool.

Доступность. Точная строка официального versions.xml: PECL ps >= 1.1.0.

ПараметрЧто приходит и зачем
resource $psdocОткрытый документ PS, созданный ps_new() и связанный с файлом через ps_open_file().
Точная формулировка PHP Manual

Resource identifier of the postscript file as returned by ps_new .

float $onДлины видимых и пустых частей штриховой линии; официальный ps_setpolydash пример передаёт массив, несмотря на ошибочный float в старой XML-сигнатуре.
Точная формулировка PHP Manual

The length of the dash.

float $offДлины видимых и пустых частей штриховой линии; официальный ps_setpolydash пример передаёт массив, несмотря на ошибочный float в старой XML-сигнатуре.
Точная формулировка PHP Manual

The length of the gap between dashes.

Возврат. Тип bool. Официальный текст: Return Values Returns true on success.

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

Минимальная операция: ps_setdashПример для указанного окружения
<?php
declare(strict_types=1);

if (!extension_loaded('ps')) {
    throw new RuntimeException('Нужно расширение ps');
}

$outputDir = __DIR__ . '/exports';
if (!is_dir($outputDir) && !mkdir($outputDir, 0775, true) && !is_dir($outputDir)) {
    throw new RuntimeException('Не создан каталог exports');
}
$outputPath = $outputDir . '/ps-setdash-minimal.ps';
$ps = ps_new();
if ($ps === false) { throw new RuntimeException('PS-ресурс не создан'); }
if (!ps_open_file($ps, $outputPath)) {
    ps_delete($ps);
    throw new RuntimeException('PostScript-файл не открыт');
}
ps_begin_page($ps, 595.0, 842.0);
// PostScript-файл и страница уже открыты в этом самодостаточном примере.
$fontId = ps_findfont($ps, 'Helvetica', 'builtin', false);
if ($fontId <= 0) { throw new RuntimeException('Шрифт не найден'); }
ps_setfont($ps, $fontId, 12.0);
$result = ps_setdash($ps, 6.0, 3.0);
if ($result !== true) { throw new RuntimeException('Операция отклонена'); }
ps_end_page($ps);
ps_close($ps);
ps_delete($ps);
if (!is_file($outputPath) || filesize($outputPath) === 0) {
    throw new RuntimeException('PostScript-файл не создан');
}
echo basename($outputPath), ' bytes=', filesize($outputPath), PHP_EOL;

Для ps_setdash показаны обязательное состояние и проверяемый эффект; официальный тип возврата — bool. Пример сам создаёт ресурс, открывает файл и страницу, а затем завершает документ. Нативный runtime требует PECL ps и pslib; здесь заявлена только синтаксическая проверка.
Что должно получиться в совместимом окружении: Графическое состояние изменено; эффект проверяется по следующему нарисованному объекту. ps-setdash-minimal.ps bytes=<положительное число>.

В составе документа: ps_setdashПример для указанного окружения
<?php
declare(strict_types=1);

if (!extension_loaded('ps')) {
    throw new RuntimeException('Нужно расширение ps');
}

$outputDir = __DIR__ . '/exports';
if (!is_dir($outputDir) && !mkdir($outputDir, 0775, true) && !is_dir($outputDir)) {
    throw new RuntimeException('Не создан каталог exports');
}
$outputPath = $outputDir . '/ps-setdash-workflow.ps';
$ps = ps_new();
if ($ps === false) { throw new RuntimeException('PS-ресурс не создан'); }
if (!ps_open_file($ps, $outputPath)) {
    ps_delete($ps);
    throw new RuntimeException('PostScript-файл не открыт');
}
ps_begin_page($ps, 595.0, 842.0);
// PostScript-файл и страница уже открыты в этом самодостаточном примере.
$fontId = ps_findfont($ps, 'Helvetica', 'builtin', false);
if ($fontId <= 0) { throw new RuntimeException('Шрифт не найден'); }
ps_setfont($ps, $fontId, 14.0);
$result = ps_setdash($ps, 10.0, 4.0);
if ($result !== true) { throw new RuntimeException('Операция отклонена'); }
ps_rect($ps, 72.0, 610.0, 180.0, 42.0);
ps_stroke($ps);
ps_show_xy($ps, 'Проверка настройки', 80.0, 625.0);
ps_end_page($ps);
ps_close($ps);
ps_delete($ps);
if (!is_file($outputPath) || filesize($outputPath) === 0) {
    throw new RuntimeException('PostScript-файл не создан');
}
echo basename($outputPath), ' bytes=', filesize($outputPath), PHP_EOL;

Для ps_setdash показаны обязательное состояние и проверяемый эффект; официальный тип возврата — bool. Во втором варианте изменена задача/геометрия, а результат проверяют по готовому PS, не по синтетическому echo. Нативный runtime требует PECL ps и pslib; здесь заявлена только синтаксическая проверка.
Что должно получиться в совместимом окружении: Графическое состояние изменено; эффект проверяется по следующему нарисованному объекту. Настройка используется следующим нарисованным объектом. ps-setdash-workflow.ps bytes=<положительное число>.

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

Полный официальный текст карточки на английском

Purpose: Sets appearance of a dashed line

Description Sets the length of the black and white portions of a dashed line.

Return: Return Values Returns true on success.

Связанные операции: ps_setpolydash.

ps_setflatНастроить точность кривых в текущем PostScript-документе.

PECL ps >= 1.1.0 · ps; pslib

ps_setflat(resource $psdoc, float $value): bool

Настроить точность кривых в текущем PostScript-документе.

Официальная сигнатура. ps_setflat(resource $psdoc, float $value): bool.

Доступность. Точная строка официального versions.xml: PECL ps >= 1.1.0.

ПараметрЧто приходит и зачем
resource $psdocОткрытый документ PS, созданный ps_new() и связанный с файлом через ps_open_file().
Точная формулировка PHP Manual

Resource identifier of the postscript file as returned by ps_new .

float $valueНовое значение по смыслу текущей операции.
Точная формулировка PHP Manual

The value must be between 0.2 and 1.

Возврат. Тип bool. Официальный текст: Return Values Returns true on success.

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

Минимальная операция: ps_setflatПример для указанного окружения
<?php
declare(strict_types=1);

if (!extension_loaded('ps')) {
    throw new RuntimeException('Нужно расширение ps');
}

$outputDir = __DIR__ . '/exports';
if (!is_dir($outputDir) && !mkdir($outputDir, 0775, true) && !is_dir($outputDir)) {
    throw new RuntimeException('Не создан каталог exports');
}
$outputPath = $outputDir . '/ps-setflat-minimal.ps';
$ps = ps_new();
if ($ps === false) { throw new RuntimeException('PS-ресурс не создан'); }
if (!ps_open_file($ps, $outputPath)) {
    ps_delete($ps);
    throw new RuntimeException('PostScript-файл не открыт');
}
ps_begin_page($ps, 595.0, 842.0);
// PostScript-файл и страница уже открыты в этом самодостаточном примере.
$fontId = ps_findfont($ps, 'Helvetica', 'builtin', false);
if ($fontId <= 0) { throw new RuntimeException('Шрифт не найден'); }
ps_setfont($ps, $fontId, 12.0);
$result = ps_setflat($ps, 1.0);
if ($result !== true) { throw new RuntimeException('Операция отклонена'); }
ps_end_page($ps);
ps_close($ps);
ps_delete($ps);
if (!is_file($outputPath) || filesize($outputPath) === 0) {
    throw new RuntimeException('PostScript-файл не создан');
}
echo basename($outputPath), ' bytes=', filesize($outputPath), PHP_EOL;

Для ps_setflat показаны обязательное состояние и проверяемый эффект; официальный тип возврата — bool. Пример сам создаёт ресурс, открывает файл и страницу, а затем завершает документ. Нативный runtime требует PECL ps и pslib; здесь заявлена только синтаксическая проверка.
Что должно получиться в совместимом окружении: Графическое состояние изменено; эффект проверяется по следующему нарисованному объекту. ps-setflat-minimal.ps bytes=<положительное число>.

В составе документа: ps_setflatПример для указанного окружения
<?php
declare(strict_types=1);

if (!extension_loaded('ps')) {
    throw new RuntimeException('Нужно расширение ps');
}

$outputDir = __DIR__ . '/exports';
if (!is_dir($outputDir) && !mkdir($outputDir, 0775, true) && !is_dir($outputDir)) {
    throw new RuntimeException('Не создан каталог exports');
}
$outputPath = $outputDir . '/ps-setflat-workflow.ps';
$ps = ps_new();
if ($ps === false) { throw new RuntimeException('PS-ресурс не создан'); }
if (!ps_open_file($ps, $outputPath)) {
    ps_delete($ps);
    throw new RuntimeException('PostScript-файл не открыт');
}
ps_begin_page($ps, 595.0, 842.0);
// PostScript-файл и страница уже открыты в этом самодостаточном примере.
$fontId = ps_findfont($ps, 'Helvetica', 'builtin', false);
if ($fontId <= 0) { throw new RuntimeException('Шрифт не найден'); }
ps_setfont($ps, $fontId, 14.0);
$result = ps_setflat($ps, 2.0);
if ($result !== true) { throw new RuntimeException('Операция отклонена'); }
ps_rect($ps, 72.0, 610.0, 180.0, 42.0);
ps_stroke($ps);
ps_show_xy($ps, 'Проверка настройки', 80.0, 625.0);
ps_end_page($ps);
ps_close($ps);
ps_delete($ps);
if (!is_file($outputPath) || filesize($outputPath) === 0) {
    throw new RuntimeException('PostScript-файл не создан');
}
echo basename($outputPath), ' bytes=', filesize($outputPath), PHP_EOL;

Для ps_setflat показаны обязательное состояние и проверяемый эффект; официальный тип возврата — bool. Во втором варианте изменена задача/геометрия, а результат проверяют по готовому PS, не по синтетическому echo. Нативный runtime требует PECL ps и pslib; здесь заявлена только синтаксическая проверка.
Что должно получиться в совместимом окружении: Графическое состояние изменено; эффект проверяется по следующему нарисованному объекту. Настройка используется следующим нарисованным объектом. ps-setflat-workflow.ps bytes=<положительное число>.

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

Полный официальный текст карточки на английском

Purpose: Sets flatness

Description

Return: Return Values Returns true on success.

ps_setfontВыбрать шрифт в текущем PostScript-документе.

PECL ps >= 1.1.0 · ps; pslib

ps_setfont(resource $psdoc, int $fontid, float $size): bool

Выбрать шрифт в текущем PostScript-документе.

Официальная сигнатура. ps_setfont(resource $psdoc, int $fontid, float $size): bool.

Доступность. Точная строка официального versions.xml: PECL ps >= 1.1.0.

ПараметрЧто приходит и зачем
resource $psdocОткрытый документ PS, созданный ps_new() и связанный с файлом через ps_open_file().
Точная формулировка PHP Manual

Resource identifier of the postscript file as returned by ps_new .

int $fontidПоложительный идентификатор шрифта, ранее возвращённый ps_findfont().
Точная формулировка PHP Manual

The font identifier as returned by ps_findfont .

float $sizeРазмер/шаг в единицах текущей операции; для геометрии PostScript обычно используются пункты.
Точная формулировка PHP Manual

The size of the font.

Возврат. Тип bool. Официальный текст: Return Values Returns true on success.

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

Минимальная операция: ps_setfontПример для указанного окружения
<?php
declare(strict_types=1);

if (!extension_loaded('ps')) {
    throw new RuntimeException('Нужно расширение ps');
}

$outputDir = __DIR__ . '/exports';
if (!is_dir($outputDir) && !mkdir($outputDir, 0775, true) && !is_dir($outputDir)) {
    throw new RuntimeException('Не создан каталог exports');
}
$outputPath = $outputDir . '/ps-setfont-minimal.ps';
$ps = ps_new();
if ($ps === false) { throw new RuntimeException('PS-ресурс не создан'); }
if (!ps_open_file($ps, $outputPath)) {
    ps_delete($ps);
    throw new RuntimeException('PostScript-файл не открыт');
}
ps_begin_page($ps, 595.0, 842.0);
// PostScript-файл и страница уже открыты в этом самодостаточном примере.
$fontId = ps_findfont($ps, 'Helvetica', 'builtin', false);
if ($fontId <= 0) { throw new RuntimeException('Шрифт не найден'); }
ps_setfont($ps, $fontId, 12.0);
$result = ps_setfont($ps, $fontId, 12.0);
if ($result !== true) { throw new RuntimeException('Операция отклонена'); }
ps_end_page($ps);
ps_close($ps);
ps_delete($ps);
if (!is_file($outputPath) || filesize($outputPath) === 0) {
    throw new RuntimeException('PostScript-файл не создан');
}
echo basename($outputPath), ' bytes=', filesize($outputPath), PHP_EOL;

Для ps_setfont показаны обязательное состояние и проверяемый эффект; официальный тип возврата — bool. Пример сам создаёт ресурс, открывает файл и страницу, а затем завершает документ. Нативный runtime требует PECL ps и pslib; здесь заявлена только синтаксическая проверка.
Что должно получиться в совместимом окружении: Графическое состояние изменено; эффект проверяется по следующему нарисованному объекту. ps-setfont-minimal.ps bytes=<положительное число>.

В составе документа: ps_setfontПример для указанного окружения
<?php
declare(strict_types=1);

if (!extension_loaded('ps')) {
    throw new RuntimeException('Нужно расширение ps');
}

$outputDir = __DIR__ . '/exports';
if (!is_dir($outputDir) && !mkdir($outputDir, 0775, true) && !is_dir($outputDir)) {
    throw new RuntimeException('Не создан каталог exports');
}
$outputPath = $outputDir . '/ps-setfont-workflow.ps';
$ps = ps_new();
if ($ps === false) { throw new RuntimeException('PS-ресурс не создан'); }
if (!ps_open_file($ps, $outputPath)) {
    ps_delete($ps);
    throw new RuntimeException('PostScript-файл не открыт');
}
ps_begin_page($ps, 595.0, 842.0);
// PostScript-файл и страница уже открыты в этом самодостаточном примере.
$fontId = ps_findfont($ps, 'Helvetica', 'builtin', false);
if ($fontId <= 0) { throw new RuntimeException('Шрифт не найден'); }
ps_setfont($ps, $fontId, 14.0);
$result = ps_setfont($ps, $fontId, 18.0);
if ($result !== true) { throw new RuntimeException('Операция отклонена'); }
ps_set_info($ps, 'Subject', 'Операция подтверждена');
ps_end_page($ps);
ps_close($ps);
ps_delete($ps);
if (!is_file($outputPath) || filesize($outputPath) === 0) {
    throw new RuntimeException('PostScript-файл не создан');
}
echo basename($outputPath), ' bytes=', filesize($outputPath), PHP_EOL;

Для ps_setfont показаны обязательное состояние и проверяемый эффект; официальный тип возврата — bool. Во втором варианте изменена задача/геометрия, а результат проверяют по готовому PS, не по синтетическому echo. Нативный runtime требует PECL ps и pslib; здесь заявлена только синтаксическая проверка.
Что должно получиться в совместимом окружении: Графическое состояние изменено; эффект проверяется по следующему нарисованному объекту. Успешный результат отмечен в метаданных документа. ps-setfont-workflow.ps bytes=<положительное число>.

Отказ и граница проверки. успех подтверждает только строгое true. Проверьте SearchPath, шрифт/encoding, активную страницу и наличие glyph; предупреждения направляйте в журнал, а не в бинарный ответ.

Полный официальный текст карточки на английском

Purpose: Sets font to use for following output

Description Sets a font, which has to be loaded before with ps_findfont . Outputting text without setting a font results in an error.

Return: Return Values Returns true on success.

Связанные операции: ps_findfont, ps_set_text_pos.

ps_setgrayВыбрать оттенок серого в текущем PostScript-документе.

PECL ps >= 1.1.0 · ps; pslib

ps_setgray(resource $psdoc, float $gray): bool

Выбрать оттенок серого в текущем PostScript-документе.

Официальная сигнатура. ps_setgray(resource $psdoc, float $gray): bool.

Доступность. Точная строка официального versions.xml: PECL ps >= 1.1.0.

ПараметрЧто приходит и зачем
resource $psdocОткрытый документ PS, созданный ps_new() и связанный с файлом через ps_open_file().
Точная формулировка PHP Manual

Resource identifier of the postscript file as returned by ps_new .

float $grayКомпонента цвета или длина штриха по смыслу функции; допустимый диапазон проверяйте до вызова.
Точная формулировка PHP Manual

The value must be between 0 (white) and 1 (black).

Возврат. Тип bool. Официальный текст: Return Values Returns true on success.

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

Минимальная операция: ps_setgrayПример для указанного окружения
<?php
declare(strict_types=1);

if (!extension_loaded('ps')) {
    throw new RuntimeException('Нужно расширение ps');
}

$outputDir = __DIR__ . '/exports';
if (!is_dir($outputDir) && !mkdir($outputDir, 0775, true) && !is_dir($outputDir)) {
    throw new RuntimeException('Не создан каталог exports');
}
$outputPath = $outputDir . '/ps-setgray-minimal.ps';
$ps = ps_new();
if ($ps === false) { throw new RuntimeException('PS-ресурс не создан'); }
if (!ps_open_file($ps, $outputPath)) {
    ps_delete($ps);
    throw new RuntimeException('PostScript-файл не открыт');
}
ps_begin_page($ps, 595.0, 842.0);
// PostScript-файл и страница уже открыты в этом самодостаточном примере.
$fontId = ps_findfont($ps, 'Helvetica', 'builtin', false);
if ($fontId <= 0) { throw new RuntimeException('Шрифт не найден'); }
ps_setfont($ps, $fontId, 12.0);
$result = ps_setgray($ps, 0.25);
if ($result !== true) { throw new RuntimeException('Операция отклонена'); }
ps_end_page($ps);
ps_close($ps);
ps_delete($ps);
if (!is_file($outputPath) || filesize($outputPath) === 0) {
    throw new RuntimeException('PostScript-файл не создан');
}
echo basename($outputPath), ' bytes=', filesize($outputPath), PHP_EOL;

Для ps_setgray показаны обязательное состояние и проверяемый эффект; официальный тип возврата — bool. Пример сам создаёт ресурс, открывает файл и страницу, а затем завершает документ. Нативный runtime требует PECL ps и pslib; здесь заявлена только синтаксическая проверка.
Что должно получиться в совместимом окружении: Графическое состояние изменено; эффект проверяется по следующему нарисованному объекту. ps-setgray-minimal.ps bytes=<положительное число>.

В составе документа: ps_setgrayПример для указанного окружения
<?php
declare(strict_types=1);

if (!extension_loaded('ps')) {
    throw new RuntimeException('Нужно расширение ps');
}

$outputDir = __DIR__ . '/exports';
if (!is_dir($outputDir) && !mkdir($outputDir, 0775, true) && !is_dir($outputDir)) {
    throw new RuntimeException('Не создан каталог exports');
}
$outputPath = $outputDir . '/ps-setgray-workflow.ps';
$ps = ps_new();
if ($ps === false) { throw new RuntimeException('PS-ресурс не создан'); }
if (!ps_open_file($ps, $outputPath)) {
    ps_delete($ps);
    throw new RuntimeException('PostScript-файл не открыт');
}
ps_begin_page($ps, 595.0, 842.0);
// PostScript-файл и страница уже открыты в этом самодостаточном примере.
$fontId = ps_findfont($ps, 'Helvetica', 'builtin', false);
if ($fontId <= 0) { throw new RuntimeException('Шрифт не найден'); }
ps_setfont($ps, $fontId, 14.0);
$result = ps_setgray($ps, 0.75);
if ($result !== true) { throw new RuntimeException('Операция отклонена'); }
ps_rect($ps, 72.0, 610.0, 180.0, 42.0);
ps_stroke($ps);
ps_show_xy($ps, 'Проверка настройки', 80.0, 625.0);
ps_end_page($ps);
ps_close($ps);
ps_delete($ps);
if (!is_file($outputPath) || filesize($outputPath) === 0) {
    throw new RuntimeException('PostScript-файл не создан');
}
echo basename($outputPath), ' bytes=', filesize($outputPath), PHP_EOL;

Для ps_setgray показаны обязательное состояние и проверяемый эффект; официальный тип возврата — bool. Во втором варианте изменена задача/геометрия, а результат проверяют по готовому PS, не по синтетическому echo. Нативный runtime требует PECL ps и pslib; здесь заявлена только синтаксическая проверка.
Что должно получиться в совместимом окружении: Графическое состояние изменено; эффект проверяется по следующему нарисованному объекту. Настройка используется следующим нарисованным объектом. ps-setgray-workflow.ps bytes=<положительное число>.

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

Полный официальный текст карточки на английском

Purpose: Sets gray value

Description Sets the gray value for all following drawing operations.

Return: Return Values Returns true on success.

Связанные операции: ps_setcolor.

ps_setlinecapНастроить концы линий в текущем PostScript-документе.

PECL ps >= 1.1.0 · ps; pslib

ps_setlinecap(resource $psdoc, int $type): bool

Настроить концы линий в текущем PostScript-документе.

Официальная сигнатура. ps_setlinecap(resource $psdoc, int $type): bool.

Доступность. Точная строка официального versions.xml: PECL ps >= 1.1.0.

ПараметрЧто приходит и зачем
resource $psdocОткрытый документ PS, созданный ps_new() и связанный с файлом через ps_open_file().
Точная формулировка PHP Manual

Resource identifier of the postscript file as returned by ps_new .

int $typeТип операции: формат изображения, тип цвета или другой документированный вариант.
Точная формулировка PHP Manual

The type of line ends. Possible values are PS_LINECAP_BUTT , PS_LINECAP_ROUND , or PS_LINECAP_SQUARED .

Возврат. Тип bool. Официальный текст: Return Values Returns true on success.

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

Минимальная операция: ps_setlinecapПример для указанного окружения
<?php
declare(strict_types=1);

if (!extension_loaded('ps')) {
    throw new RuntimeException('Нужно расширение ps');
}

$outputDir = __DIR__ . '/exports';
if (!is_dir($outputDir) && !mkdir($outputDir, 0775, true) && !is_dir($outputDir)) {
    throw new RuntimeException('Не создан каталог exports');
}
$outputPath = $outputDir . '/ps-setlinecap-minimal.ps';
$ps = ps_new();
if ($ps === false) { throw new RuntimeException('PS-ресурс не создан'); }
if (!ps_open_file($ps, $outputPath)) {
    ps_delete($ps);
    throw new RuntimeException('PostScript-файл не открыт');
}
ps_begin_page($ps, 595.0, 842.0);
// PostScript-файл и страница уже открыты в этом самодостаточном примере.
$fontId = ps_findfont($ps, 'Helvetica', 'builtin', false);
if ($fontId <= 0) { throw new RuntimeException('Шрифт не найден'); }
ps_setfont($ps, $fontId, 12.0);
$result = ps_setlinecap($ps, ps_LINECAP_ROUND);
if ($result !== true) { throw new RuntimeException('Операция отклонена'); }
ps_end_page($ps);
ps_close($ps);
ps_delete($ps);
if (!is_file($outputPath) || filesize($outputPath) === 0) {
    throw new RuntimeException('PostScript-файл не создан');
}
echo basename($outputPath), ' bytes=', filesize($outputPath), PHP_EOL;

Для ps_setlinecap показаны обязательное состояние и проверяемый эффект; официальный тип возврата — bool. Пример сам создаёт ресурс, открывает файл и страницу, а затем завершает документ. Нативный runtime требует PECL ps и pslib; здесь заявлена только синтаксическая проверка.
Что должно получиться в совместимом окружении: Графическое состояние изменено; эффект проверяется по следующему нарисованному объекту. ps-setlinecap-minimal.ps bytes=<положительное число>.

В составе документа: ps_setlinecapПример для указанного окружения
<?php
declare(strict_types=1);

if (!extension_loaded('ps')) {
    throw new RuntimeException('Нужно расширение ps');
}

$outputDir = __DIR__ . '/exports';
if (!is_dir($outputDir) && !mkdir($outputDir, 0775, true) && !is_dir($outputDir)) {
    throw new RuntimeException('Не создан каталог exports');
}
$outputPath = $outputDir . '/ps-setlinecap-workflow.ps';
$ps = ps_new();
if ($ps === false) { throw new RuntimeException('PS-ресурс не создан'); }
if (!ps_open_file($ps, $outputPath)) {
    ps_delete($ps);
    throw new RuntimeException('PostScript-файл не открыт');
}
ps_begin_page($ps, 595.0, 842.0);
// PostScript-файл и страница уже открыты в этом самодостаточном примере.
$fontId = ps_findfont($ps, 'Helvetica', 'builtin', false);
if ($fontId <= 0) { throw new RuntimeException('Шрифт не найден'); }
ps_setfont($ps, $fontId, 14.0);
$result = ps_setlinecap($ps, ps_LINECAP_SQUARED);
if ($result !== true) { throw new RuntimeException('Операция отклонена'); }
ps_rect($ps, 72.0, 610.0, 180.0, 42.0);
ps_stroke($ps);
ps_show_xy($ps, 'Проверка настройки', 80.0, 625.0);
ps_end_page($ps);
ps_close($ps);
ps_delete($ps);
if (!is_file($outputPath) || filesize($outputPath) === 0) {
    throw new RuntimeException('PostScript-файл не создан');
}
echo basename($outputPath), ' bytes=', filesize($outputPath), PHP_EOL;

Для ps_setlinecap показаны обязательное состояние и проверяемый эффект; официальный тип возврата — bool. Во втором варианте изменена задача/геометрия, а результат проверяют по готовому PS, не по синтетическому echo. Нативный runtime требует PECL ps и pslib; здесь заявлена только синтаксическая проверка.
Что должно получиться в совместимом окружении: Графическое состояние изменено; эффект проверяется по следующему нарисованному объекту. Настройка используется следующим нарисованным объектом. ps-setlinecap-workflow.ps bytes=<положительное число>.

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

Полный официальный текст карточки на английском

Purpose: Sets appearance of line ends

Description Sets how line ends look like.

Return: Return Values Returns true on success.

Связанные операции: ps_setlinejoin, ps_setlinewidth, ps_setmiterlimit.

ps_setlinejoinНастроить соединения линий в текущем PostScript-документе.

PECL ps >= 1.1.0 · ps; pslib

ps_setlinejoin(resource $psdoc, int $type): bool

Настроить соединения линий в текущем PostScript-документе.

Официальная сигнатура. ps_setlinejoin(resource $psdoc, int $type): bool.

Доступность. Точная строка официального versions.xml: PECL ps >= 1.1.0.

ПараметрЧто приходит и зачем
resource $psdocОткрытый документ PS, созданный ps_new() и связанный с файлом через ps_open_file().
Точная формулировка PHP Manual

Resource identifier of the postscript file as returned by ps_new .

int $typeТип операции: формат изображения, тип цвета или другой документированный вариант.
Точная формулировка PHP Manual

The way lines are joined. Possible values are PS_LINEJOIN_MITER , PS_LINEJOIN_ROUND , or PS_LINEJOIN_BEVEL .

Возврат. Тип bool. Официальный текст: Return Values Returns true on success.

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

Минимальная операция: ps_setlinejoinПример для указанного окружения
<?php
declare(strict_types=1);

if (!extension_loaded('ps')) {
    throw new RuntimeException('Нужно расширение ps');
}

$outputDir = __DIR__ . '/exports';
if (!is_dir($outputDir) && !mkdir($outputDir, 0775, true) && !is_dir($outputDir)) {
    throw new RuntimeException('Не создан каталог exports');
}
$outputPath = $outputDir . '/ps-setlinejoin-minimal.ps';
$ps = ps_new();
if ($ps === false) { throw new RuntimeException('PS-ресурс не создан'); }
if (!ps_open_file($ps, $outputPath)) {
    ps_delete($ps);
    throw new RuntimeException('PostScript-файл не открыт');
}
ps_begin_page($ps, 595.0, 842.0);
// PostScript-файл и страница уже открыты в этом самодостаточном примере.
$fontId = ps_findfont($ps, 'Helvetica', 'builtin', false);
if ($fontId <= 0) { throw new RuntimeException('Шрифт не найден'); }
ps_setfont($ps, $fontId, 12.0);
$result = ps_setlinejoin($ps, ps_LINEJOIN_ROUND);
if ($result !== true) { throw new RuntimeException('Операция отклонена'); }
ps_end_page($ps);
ps_close($ps);
ps_delete($ps);
if (!is_file($outputPath) || filesize($outputPath) === 0) {
    throw new RuntimeException('PostScript-файл не создан');
}
echo basename($outputPath), ' bytes=', filesize($outputPath), PHP_EOL;

Для ps_setlinejoin показаны обязательное состояние и проверяемый эффект; официальный тип возврата — bool. Пример сам создаёт ресурс, открывает файл и страницу, а затем завершает документ. Нативный runtime требует PECL ps и pslib; здесь заявлена только синтаксическая проверка.
Что должно получиться в совместимом окружении: Графическое состояние изменено; эффект проверяется по следующему нарисованному объекту. ps-setlinejoin-minimal.ps bytes=<положительное число>.

В составе документа: ps_setlinejoinПример для указанного окружения
<?php
declare(strict_types=1);

if (!extension_loaded('ps')) {
    throw new RuntimeException('Нужно расширение ps');
}

$outputDir = __DIR__ . '/exports';
if (!is_dir($outputDir) && !mkdir($outputDir, 0775, true) && !is_dir($outputDir)) {
    throw new RuntimeException('Не создан каталог exports');
}
$outputPath = $outputDir . '/ps-setlinejoin-workflow.ps';
$ps = ps_new();
if ($ps === false) { throw new RuntimeException('PS-ресурс не создан'); }
if (!ps_open_file($ps, $outputPath)) {
    ps_delete($ps);
    throw new RuntimeException('PostScript-файл не открыт');
}
ps_begin_page($ps, 595.0, 842.0);
// PostScript-файл и страница уже открыты в этом самодостаточном примере.
$fontId = ps_findfont($ps, 'Helvetica', 'builtin', false);
if ($fontId <= 0) { throw new RuntimeException('Шрифт не найден'); }
ps_setfont($ps, $fontId, 14.0);
$result = ps_setlinejoin($ps, ps_LINEJOIN_BEVEL);
if ($result !== true) { throw new RuntimeException('Операция отклонена'); }
ps_rect($ps, 72.0, 610.0, 180.0, 42.0);
ps_stroke($ps);
ps_show_xy($ps, 'Проверка настройки', 80.0, 625.0);
ps_end_page($ps);
ps_close($ps);
ps_delete($ps);
if (!is_file($outputPath) || filesize($outputPath) === 0) {
    throw new RuntimeException('PostScript-файл не создан');
}
echo basename($outputPath), ' bytes=', filesize($outputPath), PHP_EOL;

Для ps_setlinejoin показаны обязательное состояние и проверяемый эффект; официальный тип возврата — bool. Во втором варианте изменена задача/геометрия, а результат проверяют по готовому PS, не по синтетическому echo. Нативный runtime требует PECL ps и pslib; здесь заявлена только синтаксическая проверка.
Что должно получиться в совместимом окружении: Графическое состояние изменено; эффект проверяется по следующему нарисованному объекту. Настройка используется следующим нарисованным объектом. ps-setlinejoin-workflow.ps bytes=<положительное число>.

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

Полный официальный текст карточки на английском

Purpose: Sets how contected lines are joined

Description Sets how lines are joined.

Return: Return Values Returns true on success.

Связанные операции: ps_setlinecap, ps_setlinewidth, ps_setmiterlimit.

ps_setlinewidthЗадать толщину линии в текущем PostScript-документе.

PECL ps >= 1.1.0 · ps; pslib

ps_setlinewidth(resource $psdoc, float $width): bool

Задать толщину линии в текущем PostScript-документе.

Официальная сигнатура. ps_setlinewidth(resource $psdoc, float $width): bool.

Доступность. Точная строка официального versions.xml: PECL ps >= 1.1.0.

ПараметрЧто приходит и зачем
resource $psdocОткрытый документ PS, созданный ps_new() и связанный с файлом через ps_open_file().
Точная формулировка PHP Manual

Resource identifier of the postscript file as returned by ps_new .

float $widthРазмер/шаг в единицах текущей операции; для геометрии PostScript обычно используются пункты.
Точная формулировка PHP Manual

The width of lines in points.

Возврат. Тип bool. Официальный текст: Return Values Returns true on success.

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

Минимальная операция: ps_setlinewidthПример для указанного окружения
<?php
declare(strict_types=1);

if (!extension_loaded('ps')) {
    throw new RuntimeException('Нужно расширение ps');
}

$outputDir = __DIR__ . '/exports';
if (!is_dir($outputDir) && !mkdir($outputDir, 0775, true) && !is_dir($outputDir)) {
    throw new RuntimeException('Не создан каталог exports');
}
$outputPath = $outputDir . '/ps-setlinewidth-minimal.ps';
$ps = ps_new();
if ($ps === false) { throw new RuntimeException('PS-ресурс не создан'); }
if (!ps_open_file($ps, $outputPath)) {
    ps_delete($ps);
    throw new RuntimeException('PostScript-файл не открыт');
}
ps_begin_page($ps, 595.0, 842.0);
// PostScript-файл и страница уже открыты в этом самодостаточном примере.
$fontId = ps_findfont($ps, 'Helvetica', 'builtin', false);
if ($fontId <= 0) { throw new RuntimeException('Шрифт не найден'); }
ps_setfont($ps, $fontId, 12.0);
$result = ps_setlinewidth($ps, 1.0);
if ($result !== true) { throw new RuntimeException('Операция отклонена'); }
ps_end_page($ps);
ps_close($ps);
ps_delete($ps);
if (!is_file($outputPath) || filesize($outputPath) === 0) {
    throw new RuntimeException('PostScript-файл не создан');
}
echo basename($outputPath), ' bytes=', filesize($outputPath), PHP_EOL;

Для ps_setlinewidth показаны обязательное состояние и проверяемый эффект; официальный тип возврата — bool. Пример сам создаёт ресурс, открывает файл и страницу, а затем завершает документ. Нативный runtime требует PECL ps и pslib; здесь заявлена только синтаксическая проверка.
Что должно получиться в совместимом окружении: Графическое состояние изменено; эффект проверяется по следующему нарисованному объекту. ps-setlinewidth-minimal.ps bytes=<положительное число>.

В составе документа: ps_setlinewidthПример для указанного окружения
<?php
declare(strict_types=1);

if (!extension_loaded('ps')) {
    throw new RuntimeException('Нужно расширение ps');
}

$outputDir = __DIR__ . '/exports';
if (!is_dir($outputDir) && !mkdir($outputDir, 0775, true) && !is_dir($outputDir)) {
    throw new RuntimeException('Не создан каталог exports');
}
$outputPath = $outputDir . '/ps-setlinewidth-workflow.ps';
$ps = ps_new();
if ($ps === false) { throw new RuntimeException('PS-ресурс не создан'); }
if (!ps_open_file($ps, $outputPath)) {
    ps_delete($ps);
    throw new RuntimeException('PostScript-файл не открыт');
}
ps_begin_page($ps, 595.0, 842.0);
// PostScript-файл и страница уже открыты в этом самодостаточном примере.
$fontId = ps_findfont($ps, 'Helvetica', 'builtin', false);
if ($fontId <= 0) { throw new RuntimeException('Шрифт не найден'); }
ps_setfont($ps, $fontId, 14.0);
$result = ps_setlinewidth($ps, 2.0);
if ($result !== true) { throw new RuntimeException('Операция отклонена'); }
ps_rect($ps, 72.0, 610.0, 180.0, 42.0);
ps_stroke($ps);
ps_show_xy($ps, 'Проверка настройки', 80.0, 625.0);
ps_end_page($ps);
ps_close($ps);
ps_delete($ps);
if (!is_file($outputPath) || filesize($outputPath) === 0) {
    throw new RuntimeException('PostScript-файл не создан');
}
echo basename($outputPath), ' bytes=', filesize($outputPath), PHP_EOL;

Для ps_setlinewidth показаны обязательное состояние и проверяемый эффект; официальный тип возврата — bool. Во втором варианте изменена задача/геометрия, а результат проверяют по готовому PS, не по синтетическому echo. Нативный runtime требует PECL ps и pslib; здесь заявлена только синтаксическая проверка.
Что должно получиться в совместимом окружении: Графическое состояние изменено; эффект проверяется по следующему нарисованному объекту. Настройка используется следующим нарисованным объектом. ps-setlinewidth-workflow.ps bytes=<положительное число>.

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

Полный официальный текст карточки на английском

Purpose: Sets width of a line

Description Sets the line width for all following drawing operations.

Return: Return Values Returns true on success.

Связанные операции: ps_setlinecap, ps_setlinejoin, ps_setmiterlimit.

ps_setmiterlimitОграничить острые соединения в текущем PostScript-документе.

PECL ps >= 1.1.0 · ps; pslib

ps_setmiterlimit(resource $psdoc, float $value): bool

Ограничить острые соединения в текущем PostScript-документе.

Официальная сигнатура. ps_setmiterlimit(resource $psdoc, float $value): bool.

Доступность. Точная строка официального versions.xml: PECL ps >= 1.1.0.

ПараметрЧто приходит и зачем
resource $psdocОткрытый документ PS, созданный ps_new() и связанный с файлом через ps_open_file().
Точная формулировка PHP Manual

Resource identifier of the postscript file as returned by ps_new .

float $valueНовое значение по смыслу текущей операции.
Точная формулировка PHP Manual

The maximum ratio between the miter length and the line width. Larger values ([gt] 10) will result in very long spikes when two lines meet in a small angle. Keep the default unless you know what you are doing.

Возврат. Тип bool. Официальный текст: Return Values Returns true on success.

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

Минимальная операция: ps_setmiterlimitПример для указанного окружения
<?php
declare(strict_types=1);

if (!extension_loaded('ps')) {
    throw new RuntimeException('Нужно расширение ps');
}

$outputDir = __DIR__ . '/exports';
if (!is_dir($outputDir) && !mkdir($outputDir, 0775, true) && !is_dir($outputDir)) {
    throw new RuntimeException('Не создан каталог exports');
}
$outputPath = $outputDir . '/ps-setmiterlimit-minimal.ps';
$ps = ps_new();
if ($ps === false) { throw new RuntimeException('PS-ресурс не создан'); }
if (!ps_open_file($ps, $outputPath)) {
    ps_delete($ps);
    throw new RuntimeException('PostScript-файл не открыт');
}
ps_begin_page($ps, 595.0, 842.0);
// PostScript-файл и страница уже открыты в этом самодостаточном примере.
$fontId = ps_findfont($ps, 'Helvetica', 'builtin', false);
if ($fontId <= 0) { throw new RuntimeException('Шрифт не найден'); }
ps_setfont($ps, $fontId, 12.0);
$result = ps_setmiterlimit($ps, 1.0);
if ($result !== true) { throw new RuntimeException('Операция отклонена'); }
ps_end_page($ps);
ps_close($ps);
ps_delete($ps);
if (!is_file($outputPath) || filesize($outputPath) === 0) {
    throw new RuntimeException('PostScript-файл не создан');
}
echo basename($outputPath), ' bytes=', filesize($outputPath), PHP_EOL;

Для ps_setmiterlimit показаны обязательное состояние и проверяемый эффект; официальный тип возврата — bool. Пример сам создаёт ресурс, открывает файл и страницу, а затем завершает документ. Нативный runtime требует PECL ps и pslib; здесь заявлена только синтаксическая проверка.
Что должно получиться в совместимом окружении: Графическое состояние изменено; эффект проверяется по следующему нарисованному объекту. ps-setmiterlimit-minimal.ps bytes=<положительное число>.

В составе документа: ps_setmiterlimitПример для указанного окружения
<?php
declare(strict_types=1);

if (!extension_loaded('ps')) {
    throw new RuntimeException('Нужно расширение ps');
}

$outputDir = __DIR__ . '/exports';
if (!is_dir($outputDir) && !mkdir($outputDir, 0775, true) && !is_dir($outputDir)) {
    throw new RuntimeException('Не создан каталог exports');
}
$outputPath = $outputDir . '/ps-setmiterlimit-workflow.ps';
$ps = ps_new();
if ($ps === false) { throw new RuntimeException('PS-ресурс не создан'); }
if (!ps_open_file($ps, $outputPath)) {
    ps_delete($ps);
    throw new RuntimeException('PostScript-файл не открыт');
}
ps_begin_page($ps, 595.0, 842.0);
// PostScript-файл и страница уже открыты в этом самодостаточном примере.
$fontId = ps_findfont($ps, 'Helvetica', 'builtin', false);
if ($fontId <= 0) { throw new RuntimeException('Шрифт не найден'); }
ps_setfont($ps, $fontId, 14.0);
$result = ps_setmiterlimit($ps, 2.0);
if ($result !== true) { throw new RuntimeException('Операция отклонена'); }
ps_rect($ps, 72.0, 610.0, 180.0, 42.0);
ps_stroke($ps);
ps_show_xy($ps, 'Проверка настройки', 80.0, 625.0);
ps_end_page($ps);
ps_close($ps);
ps_delete($ps);
if (!is_file($outputPath) || filesize($outputPath) === 0) {
    throw new RuntimeException('PostScript-файл не создан');
}
echo basename($outputPath), ' bytes=', filesize($outputPath), PHP_EOL;

Для ps_setmiterlimit показаны обязательное состояние и проверяемый эффект; официальный тип возврата — bool. Во втором варианте изменена задача/геометрия, а результат проверяют по готовому PS, не по синтетическому echo. Нативный runtime требует PECL ps и pslib; здесь заявлена только синтаксическая проверка.
Что должно получиться в совместимом окружении: Графическое состояние изменено; эффект проверяется по следующему нарисованному объекту. Настройка используется следующим нарисованным объектом. ps-setmiterlimit-workflow.ps bytes=<положительное число>.

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

Полный официальный текст карточки на английском

Purpose: Sets the miter limit

Description If two lines join in a small angle and the line join is set to PS_LINEJOIN_MITER , then the resulting spike will be very long. The miter limit is the maximum ratio of the miter length (the length of the spike) and the line width.

Return: Return Values Returns true on success.

Связанные операции: ps_setlinecap, ps_setlinejoin, ps_setlinewidth.

ps_setoverprintmodeНастроить наложение красок в текущем PostScript-документе.

PECL ps >= 1.3.0 · ps; pslib

ps_setoverprintmode(resource $psdoc, int $mode): bool

Настроить наложение красок в текущем PostScript-документе.

Официальная сигнатура. ps_setoverprintmode(resource $psdoc, int $mode): bool.

Доступность. Точная строка официального versions.xml: PECL ps >= 1.3.0.

ПараметрЧто приходит и зачем
resource $psdocОткрытый документ PS, созданный ps_new() и связанный с файлом через ps_open_file().
Точная формулировка PHP Manual

Resource identifier of the postscript file as returned by ps_new .

int $modeДокументированный числовой режим текущей операции; случайные числа не взаимозаменяемы.

Возврат. Тип bool. Официальный текст: Return Values Returns true on success.

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

Минимальная операция: ps_setoverprintmodeПример для указанного окружения
<?php
declare(strict_types=1);

if (!extension_loaded('ps')) {
    throw new RuntimeException('Нужно расширение ps');
}

$outputDir = __DIR__ . '/exports';
if (!is_dir($outputDir) && !mkdir($outputDir, 0775, true) && !is_dir($outputDir)) {
    throw new RuntimeException('Не создан каталог exports');
}
$outputPath = $outputDir . '/ps-setoverprintmode-minimal.ps';
$ps = ps_new();
if ($ps === false) { throw new RuntimeException('PS-ресурс не создан'); }
if (!ps_open_file($ps, $outputPath)) {
    ps_delete($ps);
    throw new RuntimeException('PostScript-файл не открыт');
}
ps_begin_page($ps, 595.0, 842.0);
// PostScript-файл и страница уже открыты в этом самодостаточном примере.
$fontId = ps_findfont($ps, 'Helvetica', 'builtin', false);
if ($fontId <= 0) { throw new RuntimeException('Шрифт не найден'); }
ps_setfont($ps, $fontId, 12.0);
$result = ps_setoverprintmode($ps, 1);
if ($result !== true) { throw new RuntimeException('Операция отклонена'); }
ps_end_page($ps);
ps_close($ps);
ps_delete($ps);
if (!is_file($outputPath) || filesize($outputPath) === 0) {
    throw new RuntimeException('PostScript-файл не создан');
}
echo basename($outputPath), ' bytes=', filesize($outputPath), PHP_EOL;

Для ps_setoverprintmode показаны обязательное состояние и проверяемый эффект; официальный тип возврата — bool. Пример сам создаёт ресурс, открывает файл и страницу, а затем завершает документ. Нативный runtime требует PECL ps и pslib; здесь заявлена только синтаксическая проверка.
Что должно получиться в совместимом окружении: Графическое состояние изменено; эффект проверяется по следующему нарисованному объекту. ps-setoverprintmode-minimal.ps bytes=<положительное число>.

В составе документа: ps_setoverprintmodeПример для указанного окружения
<?php
declare(strict_types=1);

if (!extension_loaded('ps')) {
    throw new RuntimeException('Нужно расширение ps');
}

$outputDir = __DIR__ . '/exports';
if (!is_dir($outputDir) && !mkdir($outputDir, 0775, true) && !is_dir($outputDir)) {
    throw new RuntimeException('Не создан каталог exports');
}
$outputPath = $outputDir . '/ps-setoverprintmode-workflow.ps';
$ps = ps_new();
if ($ps === false) { throw new RuntimeException('PS-ресурс не создан'); }
if (!ps_open_file($ps, $outputPath)) {
    ps_delete($ps);
    throw new RuntimeException('PostScript-файл не открыт');
}
ps_begin_page($ps, 595.0, 842.0);
// PostScript-файл и страница уже открыты в этом самодостаточном примере.
$fontId = ps_findfont($ps, 'Helvetica', 'builtin', false);
if ($fontId <= 0) { throw new RuntimeException('Шрифт не найден'); }
ps_setfont($ps, $fontId, 14.0);
$result = ps_setoverprintmode($ps, 0);
if ($result !== true) { throw new RuntimeException('Операция отклонена'); }
ps_rect($ps, 72.0, 610.0, 180.0, 42.0);
ps_stroke($ps);
ps_show_xy($ps, 'Проверка настройки', 80.0, 625.0);
ps_end_page($ps);
ps_close($ps);
ps_delete($ps);
if (!is_file($outputPath) || filesize($outputPath) === 0) {
    throw new RuntimeException('PostScript-файл не создан');
}
echo basename($outputPath), ' bytes=', filesize($outputPath), PHP_EOL;

Для ps_setoverprintmode показаны обязательное состояние и проверяемый эффект; официальный тип возврата — bool. Во втором варианте изменена задача/геометрия, а результат проверяют по готовому PS, не по синтетическому echo. Нативный runtime требует PECL ps и pslib; здесь заявлена только синтаксическая проверка.
Что должно получиться в совместимом окружении: Графическое состояние изменено; эффект проверяется по следующему нарисованному объекту. Настройка используется следующим нарисованным объектом. ps-setoverprintmode-workflow.ps bytes=<положительное число>.

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

Полный официальный текст карточки на английском

Purpose: Sets overprint mode

Description

Return: Return Values Returns true on success.

ps_setpolydashЗадать сложный штрих в текущем PostScript-документе.

PECL ps >= 1.1.0 · ps; pslib

ps_setpolydash(resource $psdoc, float $arr): bool

Задать сложный штрих в текущем PostScript-документе.

Официальная сигнатура. ps_setpolydash(resource $psdoc, float $arr): bool.

Доступность. Точная строка официального versions.xml: PECL ps >= 1.1.0.

ПараметрЧто приходит и зачем
resource $psdocОткрытый документ PS, созданный ps_new() и связанный с файлом через ps_open_file().
Точная формулировка PHP Manual

Resource identifier of the postscript file as returned by ps_new .

float $arrДлины видимых и пустых частей штриховой линии; официальный ps_setpolydash пример передаёт массив, несмотря на ошибочный float в старой XML-сигнатуре.
Точная формулировка PHP Manual

arr is a list of length elements alternately for the black and white portion.

Возврат. Тип bool. Официальный текст: Return Values Returns true on success.

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

Минимальная операция: ps_setpolydashПример для указанного окружения
<?php
declare(strict_types=1);

if (!extension_loaded('ps')) {
    throw new RuntimeException('Нужно расширение ps');
}

$outputDir = __DIR__ . '/exports';
if (!is_dir($outputDir) && !mkdir($outputDir, 0775, true) && !is_dir($outputDir)) {
    throw new RuntimeException('Не создан каталог exports');
}
$outputPath = $outputDir . '/ps-setpolydash-minimal.ps';
$ps = ps_new();
if ($ps === false) { throw new RuntimeException('PS-ресурс не создан'); }
if (!ps_open_file($ps, $outputPath)) {
    ps_delete($ps);
    throw new RuntimeException('PostScript-файл не открыт');
}
ps_begin_page($ps, 595.0, 842.0);
// PostScript-файл и страница уже открыты в этом самодостаточном примере.
$fontId = ps_findfont($ps, 'Helvetica', 'builtin', false);
if ($fontId <= 0) { throw new RuntimeException('Шрифт не найден'); }
ps_setfont($ps, $fontId, 12.0);
// Официальная XML-сигнатура помечает arr как float, но её же пример передаёт массив длин.
$result = ps_setpolydash($ps, [10.0, 5.0, 2.0, 5.0]);
if ($result !== true) { throw new RuntimeException('Операция отклонена'); }
ps_end_page($ps);
ps_close($ps);
ps_delete($ps);
if (!is_file($outputPath) || filesize($outputPath) === 0) {
    throw new RuntimeException('PostScript-файл не создан');
}
echo basename($outputPath), ' bytes=', filesize($outputPath), PHP_EOL;

Для ps_setpolydash показаны обязательное состояние и проверяемый эффект; официальный тип возврата — bool. Пример сам создаёт ресурс, открывает файл и страницу, а затем завершает документ. Нативный runtime требует PECL ps и pslib; здесь заявлена только синтаксическая проверка.
Что должно получиться в совместимом окружении: Графическое состояние изменено; эффект проверяется по следующему нарисованному объекту. ps-setpolydash-minimal.ps bytes=<положительное число>.

В составе документа: ps_setpolydashПример для указанного окружения
<?php
declare(strict_types=1);

if (!extension_loaded('ps')) {
    throw new RuntimeException('Нужно расширение ps');
}

$outputDir = __DIR__ . '/exports';
if (!is_dir($outputDir) && !mkdir($outputDir, 0775, true) && !is_dir($outputDir)) {
    throw new RuntimeException('Не создан каталог exports');
}
$outputPath = $outputDir . '/ps-setpolydash-workflow.ps';
$ps = ps_new();
if ($ps === false) { throw new RuntimeException('PS-ресурс не создан'); }
if (!ps_open_file($ps, $outputPath)) {
    ps_delete($ps);
    throw new RuntimeException('PostScript-файл не открыт');
}
ps_begin_page($ps, 595.0, 842.0);
// PostScript-файл и страница уже открыты в этом самодостаточном примере.
$fontId = ps_findfont($ps, 'Helvetica', 'builtin', false);
if ($fontId <= 0) { throw new RuntimeException('Шрифт не найден'); }
ps_setfont($ps, $fontId, 14.0);
// Официальная XML-сигнатура помечает arr как float, но её же пример передаёт массив длин.
$result = ps_setpolydash($ps, [3.0, 2.0]);
if ($result !== true) { throw new RuntimeException('Операция отклонена'); }
ps_rect($ps, 72.0, 610.0, 180.0, 42.0);
ps_stroke($ps);
ps_show_xy($ps, 'Проверка настройки', 80.0, 625.0);
ps_end_page($ps);
ps_close($ps);
ps_delete($ps);
if (!is_file($outputPath) || filesize($outputPath) === 0) {
    throw new RuntimeException('PostScript-файл не создан');
}
echo basename($outputPath), ' bytes=', filesize($outputPath), PHP_EOL;

Для ps_setpolydash показаны обязательное состояние и проверяемый эффект; официальный тип возврата — bool. Во втором варианте изменена задача/геометрия, а результат проверяют по готовому PS, не по синтетическому echo. Нативный runtime требует PECL ps и pslib; здесь заявлена только синтаксическая проверка.
Что должно получиться в совместимом окружении: Графическое состояние изменено; эффект проверяется по следующему нарисованному объекту. Настройка используется следующим нарисованным объектом. ps-setpolydash-workflow.ps bytes=<положительное число>.

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

Полный официальный текст карточки на английском

Purpose: Sets appearance of a dashed line

Description Sets the length of the black and white portions of a dashed line. ps_setpolydash is used to set more complicated dash patterns.

Return: Return Values Returns true on success.

Связанные операции: ps_setdash.

ps_shadingСоздать градиент в текущем PostScript-документе.

PECL ps >= 1.3.0 · ps; pslib

ps_shading(resource $psdoc, string $type, float $x0, float $y0, float $x1, float $y1, float $c1, float $c2, float $c3, float $c4, string $optlist): int|false

Создать градиент в текущем PostScript-документе.

Официальная сигнатура. ps_shading(resource $psdoc, string $type, float $x0, float $y0, float $x1, float $y1, float $c1, float $c2, float $c3, float $c4, string $optlist): int|false.

Доступность. Точная строка официального versions.xml: PECL ps >= 1.3.0.

ПараметрЧто приходит и зачем
resource $psdocОткрытый документ PS, созданный ps_new() и связанный с файлом через ps_open_file().
Точная формулировка PHP Manual

Resource identifier of the postscript file as returned by ps_new .

string $typeТип операции: формат изображения, тип цвета или другой документированный вариант.
Точная формулировка PHP Manual

The type of shading can be either radial or axial . Each shading starts with the current fill color and ends with the given color values passed in the parameters c1 to c4 (see ps_setcolor for their meaning).

float $x0Координата X в пунктах PostScript; начало системы координат по умолчанию находится слева снизу.
float $y0Координата Y в пунктах PostScript; значение растёт снизу вверх до преобразования системы координат.
float $x1Координата X в пунктах PostScript; начало системы координат по умолчанию находится слева снизу.
float $y1Координата Y в пунктах PostScript; значение растёт снизу вверх до преобразования системы координат.
float $c1Компонента цвета или длина штриха по смыслу функции; допустимый диапазон проверяйте до вызова.
float $c2Компонента цвета или длина штриха по смыслу функции; допустимый диапазон проверяйте до вызова.
float $c3Компонента цвета или длина штриха по смыслу функции; допустимый диапазон проверяйте до вызова.
float $c4Компонента цвета или длина штриха по смыслу функции; допустимый диапазон проверяйте до вызова.
string $optlistСтрока опций pslib в синтаксисе этой библиотеки; пустая строка использует значения по умолчанию.
Точная формулировка PHP Manual

If the shading is of type radial the optlist must also contain the parameters r0 and r1 with the radius of the start and end circle.

Возврат. Тип int|false. Официальный текст: Return Values Returns the identifier of the pattern [return.falseforfailure].

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

Минимальная операция: ps_shadingПример для указанного окружения
<?php
declare(strict_types=1);

if (!extension_loaded('ps')) {
    throw new RuntimeException('Нужно расширение ps');
}

$outputDir = __DIR__ . '/exports';
if (!is_dir($outputDir) && !mkdir($outputDir, 0775, true) && !is_dir($outputDir)) {
    throw new RuntimeException('Не создан каталог exports');
}
$outputPath = $outputDir . '/ps-shading-minimal.ps';
$ps = ps_new();
if ($ps === false) { throw new RuntimeException('PS-ресурс не создан'); }
if (!ps_open_file($ps, $outputPath)) {
    ps_delete($ps);
    throw new RuntimeException('PostScript-файл не открыт');
}
ps_begin_page($ps, 595.0, 842.0);
// PostScript-файл и страница уже открыты в этом самодостаточном примере.
$fontId = ps_findfont($ps, 'Helvetica', 'builtin', false);
if ($fontId <= 0) { throw new RuntimeException('Шрифт не найден'); }
ps_setfont($ps, $fontId, 12.0);
$result = ps_shading($ps, 'axial', 24.0, 24.0, 120.0, 160.0, 0.1, 0.4, 0.7, 0.0, '');
if ($result === false || $result === 0) { throw new RuntimeException('Идентификатор/значение не получено'); }
ps_end_page($ps);
ps_close($ps);
ps_delete($ps);
if (!is_file($outputPath) || filesize($outputPath) === 0) {
    throw new RuntimeException('PostScript-файл не создан');
}
echo basename($outputPath), ' bytes=', filesize($outputPath), PHP_EOL;

Для ps_shading показаны обязательное состояние и проверяемый эффект; официальный тип возврата — int|false. Пример сам создаёт ресурс, открывает файл и страницу, а затем завершает документ. Нативный runtime требует PECL ps и pslib; здесь заявлена только синтаксическая проверка.
Что должно получиться в совместимом окружении: Изменение видно в итоговом PostScript после завершения страницы и документа. ps-shading-minimal.ps bytes=<положительное число>.

В составе документа: ps_shadingПример для указанного окружения
<?php
declare(strict_types=1);

if (!extension_loaded('ps')) {
    throw new RuntimeException('Нужно расширение ps');
}

$outputDir = __DIR__ . '/exports';
if (!is_dir($outputDir) && !mkdir($outputDir, 0775, true) && !is_dir($outputDir)) {
    throw new RuntimeException('Не создан каталог exports');
}
$outputPath = $outputDir . '/ps-shading-workflow.ps';
$ps = ps_new();
if ($ps === false) { throw new RuntimeException('PS-ресурс не создан'); }
if (!ps_open_file($ps, $outputPath)) {
    ps_delete($ps);
    throw new RuntimeException('PostScript-файл не открыт');
}
ps_begin_page($ps, 595.0, 842.0);
// PostScript-файл и страница уже открыты в этом самодостаточном примере.
$fontId = ps_findfont($ps, 'Helvetica', 'builtin', false);
if ($fontId <= 0) { throw new RuntimeException('Шрифт не найден'); }
ps_setfont($ps, $fontId, 14.0);
$result = ps_shading($ps, 'radial', 72.0, 72.0, 180.0, 260.0, 0.2, 0.1, 0.0, 0.2, '');
if ($result === false || $result === 0) { throw new RuntimeException('Идентификатор/значение не получено'); }
ps_shfill($ps, $result);
ps_end_page($ps);
ps_close($ps);
ps_delete($ps);
if (!is_file($outputPath) || filesize($outputPath) === 0) {
    throw new RuntimeException('PostScript-файл не создан');
}
echo basename($outputPath), ' bytes=', filesize($outputPath), PHP_EOL;

Для ps_shading показаны обязательное состояние и проверяемый эффект; официальный тип возврата — int|false. Во втором варианте изменена задача/геометрия, а результат проверяют по готовому PS, не по синтетическому echo. Нативный runtime требует PECL ps и pslib; здесь заявлена только синтаксическая проверка.
Что должно получиться в совместимом окружении: Изменение видно в итоговом PostScript после завершения страницы и документа. Возвращённый градиент сразу залил текущую страницу. ps-shading-workflow.ps bytes=<положительное число>.

Отказ и граница проверки. false — документированный сигнал отказа. Начатый шаблон/узор нужно завершить, полученный id проверить и применить до закрытия страницы.

Полный официальный текст карточки на английском

Purpose: Creates a shading for later use

Description Creates a shading, which can be used by ps_shfill or ps_shading_pattern . The color of the shading can be in any color space except for pattern .

Return: Return Values Returns the identifier of the pattern [return.falseforfailure].

Связанные операции: ps_shading_pattern, ps_shfill.

ps_shading_patternСоздать градиент узор в текущем PostScript-документе.

PECL ps >= 1.3.0 · ps; pslib

ps_shading_pattern(resource $psdoc, int $shadingid, string $optlist): int|false

Создать градиент узор в текущем PostScript-документе.

Официальная сигнатура. ps_shading_pattern(resource $psdoc, int $shadingid, string $optlist): int|false.

Доступность. Точная строка официального versions.xml: PECL ps >= 1.3.0.

ПараметрЧто приходит и зачем
resource $psdocОткрытый документ PS, созданный ps_new() и связанный с файлом через ps_open_file().
Точная формулировка PHP Manual

Resource identifier of the postscript file as returned by ps_new .

int $shadingidПоложительный идентификатор градиента, ранее возвращённый ps_shading().
Точная формулировка PHP Manual

The identifier of a shading previously created with ps_shading .

string $optlistСтрока опций pslib в синтаксисе этой библиотеки; пустая строка использует значения по умолчанию.
Точная формулировка PHP Manual

This argument is not currently used.

Возврат. Тип int|false. Официальный текст: Return Values The identifier of the pattern [return.falseforfailure].

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

Минимальная операция: ps_shading_patternПример для указанного окружения
<?php
declare(strict_types=1);

if (!extension_loaded('ps')) {
    throw new RuntimeException('Нужно расширение ps');
}

$outputDir = __DIR__ . '/exports';
if (!is_dir($outputDir) && !mkdir($outputDir, 0775, true) && !is_dir($outputDir)) {
    throw new RuntimeException('Не создан каталог exports');
}
$outputPath = $outputDir . '/ps-shading-pattern-minimal.ps';
$ps = ps_new();
if ($ps === false) { throw new RuntimeException('PS-ресурс не создан'); }
if (!ps_open_file($ps, $outputPath)) {
    ps_delete($ps);
    throw new RuntimeException('PostScript-файл не открыт');
}
ps_begin_page($ps, 595.0, 842.0);
// PostScript-файл и страница уже открыты в этом самодостаточном примере.
$fontId = ps_findfont($ps, 'Helvetica', 'builtin', false);
if ($fontId <= 0) { throw new RuntimeException('Шрифт не найден'); }
ps_setfont($ps, $fontId, 12.0);
$shadingId = ps_shading($ps, 'axial', 72.0, 500.0, 320.0, 500.0, 0.1, 0.4, 0.8, 0.0, '');
if ($shadingId === false) { throw new RuntimeException('Градиент не создан'); }
// По официальному описанию optlist пока не используется, поэтому передаётся пустая строка.
$result = ps_shading_pattern($ps, $shadingId, '');
if ($result === false || $result === 0) { throw new RuntimeException('Идентификатор/значение не получено'); }
ps_end_page($ps);
ps_close($ps);
ps_delete($ps);
if (!is_file($outputPath) || filesize($outputPath) === 0) {
    throw new RuntimeException('PostScript-файл не создан');
}
echo basename($outputPath), ' bytes=', filesize($outputPath), PHP_EOL;

Для ps_shading_pattern показаны обязательное состояние и проверяемый эффект; официальный тип возврата — int|false. Пример сам создаёт ресурс, открывает файл и страницу, а затем завершает документ. Нативный runtime требует PECL ps и pslib; здесь заявлена только синтаксическая проверка.
Что должно получиться в совместимом окружении: Изменение видно в итоговом PostScript после завершения страницы и документа. ps-shading-pattern-minimal.ps bytes=<положительное число>.

В составе документа: ps_shading_patternПример для указанного окружения
<?php
declare(strict_types=1);

if (!extension_loaded('ps')) {
    throw new RuntimeException('Нужно расширение ps');
}

$outputDir = __DIR__ . '/exports';
if (!is_dir($outputDir) && !mkdir($outputDir, 0775, true) && !is_dir($outputDir)) {
    throw new RuntimeException('Не создан каталог exports');
}
$outputPath = $outputDir . '/ps-shading-pattern-workflow.ps';
$ps = ps_new();
if ($ps === false) { throw new RuntimeException('PS-ресурс не создан'); }
if (!ps_open_file($ps, $outputPath)) {
    ps_delete($ps);
    throw new RuntimeException('PostScript-файл не открыт');
}
ps_begin_page($ps, 595.0, 842.0);
// PostScript-файл и страница уже открыты в этом самодостаточном примере.
$fontId = ps_findfont($ps, 'Helvetica', 'builtin', false);
if ($fontId <= 0) { throw new RuntimeException('Шрифт не найден'); }
ps_setfont($ps, $fontId, 14.0);
$shadingId = ps_shading($ps, 'axial', 72.0, 500.0, 320.0, 500.0, 0.1, 0.4, 0.8, 0.0, '');
if ($shadingId === false) { throw new RuntimeException('Градиент не создан'); }
// По официальному описанию optlist пока не используется, поэтому передаётся пустая строка.
$result = ps_shading_pattern($ps, $shadingId, '');
if ($result === false || $result === 0) { throw new RuntimeException('Идентификатор/значение не получено'); }
ps_setcolor($ps, 'fill', 'pattern', $result, 0.0, 0.0, 0.0);
ps_rect($ps, 72.0, 560.0, 220.0, 70.0);
ps_fill($ps);
ps_end_page($ps);
ps_close($ps);
ps_delete($ps);
if (!is_file($outputPath) || filesize($outputPath) === 0) {
    throw new RuntimeException('PostScript-файл не создан');
}
echo basename($outputPath), ' bytes=', filesize($outputPath), PHP_EOL;

Для ps_shading_pattern показаны обязательное состояние и проверяемый эффект; официальный тип возврата — int|false. Во втором варианте изменена задача/геометрия, а результат проверяют по готовому PS, не по синтетическому echo. Нативный runtime требует PECL ps и pslib; здесь заявлена только синтаксическая проверка.
Что должно получиться в совместимом окружении: Изменение видно в итоговом PostScript после завершения страницы и документа. Возвращённый узор использован для заливки прямоугольника. ps-shading-pattern-workflow.ps bytes=<положительное число>.

Отказ и граница проверки. false — документированный сигнал отказа. Начатый шаблон/узор нужно завершить, полученный id проверить и применить до закрытия страницы.

Полный официальный текст карточки на английском

Purpose: Creates a pattern based on a shading

Description Creates a pattern based on a shading, which has to be created before with ps_shading . Shading patterns can be used like regular patterns.

Return: Return Values The identifier of the pattern [return.falseforfailure].

Связанные операции: ps_shading, ps_shfill.

ps_shfillЗалить градиентом в текущем PostScript-документе.

PECL ps >= 1.3.0 · ps; pslib

ps_shfill(resource $psdoc, int $shadingid): bool

Залить градиентом в текущем PostScript-документе.

Официальная сигнатура. ps_shfill(resource $psdoc, int $shadingid): bool.

Доступность. Точная строка официального versions.xml: PECL ps >= 1.3.0.

ПараметрЧто приходит и зачем
resource $psdocОткрытый документ PS, созданный ps_new() и связанный с файлом через ps_open_file().
Точная формулировка PHP Manual

Resource identifier of the postscript file as returned by ps_new .

int $shadingidПоложительный идентификатор градиента, ранее возвращённый ps_shading().
Точная формулировка PHP Manual

The identifier of a shading previously created with ps_shading .

Возврат. Тип bool. Официальный текст: Return Values Returns true on success.

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

Минимальная операция: ps_shfillПример для указанного окружения
<?php
declare(strict_types=1);

if (!extension_loaded('ps')) {
    throw new RuntimeException('Нужно расширение ps');
}

$outputDir = __DIR__ . '/exports';
if (!is_dir($outputDir) && !mkdir($outputDir, 0775, true) && !is_dir($outputDir)) {
    throw new RuntimeException('Не создан каталог exports');
}
$outputPath = $outputDir . '/ps-shfill-minimal.ps';
$ps = ps_new();
if ($ps === false) { throw new RuntimeException('PS-ресурс не создан'); }
if (!ps_open_file($ps, $outputPath)) {
    ps_delete($ps);
    throw new RuntimeException('PostScript-файл не открыт');
}
ps_begin_page($ps, 595.0, 842.0);
// PostScript-файл и страница уже открыты в этом самодостаточном примере.
$fontId = ps_findfont($ps, 'Helvetica', 'builtin', false);
if ($fontId <= 0) { throw new RuntimeException('Шрифт не найден'); }
ps_setfont($ps, $fontId, 12.0);
$shadingId = ps_shading($ps, 'axial', 72.0, 500.0, 320.0, 500.0, 0.1, 0.4, 0.8, 0.0, '');
if ($shadingId === false) { throw new RuntimeException('Градиент не создан'); }
$result = ps_shfill($ps, $shadingId);
if ($result !== true) { throw new RuntimeException('Операция отклонена'); }
ps_end_page($ps);
ps_close($ps);
ps_delete($ps);
if (!is_file($outputPath) || filesize($outputPath) === 0) {
    throw new RuntimeException('PostScript-файл не создан');
}
echo basename($outputPath), ' bytes=', filesize($outputPath), PHP_EOL;

Для ps_shfill показаны обязательное состояние и проверяемый эффект; официальный тип возврата — bool. Пример сам создаёт ресурс, открывает файл и страницу, а затем завершает документ. Нативный runtime требует PECL ps и pslib; здесь заявлена только синтаксическая проверка.
Что должно получиться в совместимом окружении: Изменение видно в итоговом PostScript после завершения страницы и документа. ps-shfill-minimal.ps bytes=<положительное число>.

В составе документа: ps_shfillПример для указанного окружения
<?php
declare(strict_types=1);

if (!extension_loaded('ps')) {
    throw new RuntimeException('Нужно расширение ps');
}

$outputDir = __DIR__ . '/exports';
if (!is_dir($outputDir) && !mkdir($outputDir, 0775, true) && !is_dir($outputDir)) {
    throw new RuntimeException('Не создан каталог exports');
}
$outputPath = $outputDir . '/ps-shfill-workflow.ps';
$ps = ps_new();
if ($ps === false) { throw new RuntimeException('PS-ресурс не создан'); }
if (!ps_open_file($ps, $outputPath)) {
    ps_delete($ps);
    throw new RuntimeException('PostScript-файл не открыт');
}
ps_begin_page($ps, 595.0, 842.0);
// PostScript-файл и страница уже открыты в этом самодостаточном примере.
$fontId = ps_findfont($ps, 'Helvetica', 'builtin', false);
if ($fontId <= 0) { throw new RuntimeException('Шрифт не найден'); }
ps_setfont($ps, $fontId, 14.0);
$shadingId = ps_shading($ps, 'axial', 72.0, 500.0, 320.0, 500.0, 0.1, 0.4, 0.8, 0.0, '');
if ($shadingId === false) { throw new RuntimeException('Градиент не создан'); }
$result = ps_shfill($ps, $shadingId);
if ($result !== true) { throw new RuntimeException('Операция отклонена'); }
ps_setgray_stroke($ps, 0.2);
ps_rect($ps, 72.0, 500.0, 248.0, 90.0);
ps_stroke($ps);
ps_end_page($ps);
ps_close($ps);
ps_delete($ps);
if (!is_file($outputPath) || filesize($outputPath) === 0) {
    throw new RuntimeException('PostScript-файл не создан');
}
echo basename($outputPath), ' bytes=', filesize($outputPath), PHP_EOL;

Для ps_shfill показаны обязательное состояние и проверяемый эффект; официальный тип возврата — bool. Во втором варианте изменена задача/геометрия, а результат проверяют по готовому PS, не по синтетическому echo. Нативный runtime требует PECL ps и pslib; здесь заявлена только синтаксическая проверка.
Что должно получиться в совместимом окружении: Изменение видно в итоговом PostScript после завершения страницы и документа. Область градиентной заливки обведена для проверки. ps-shfill-workflow.ps bytes=<положительное число>.

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

Полный официальный текст карточки на английском

Purpose: Fills an area with a shading

Description Fills an area with a shading, which has to be created before with ps_shading . This is an alternative way to creating a pattern from a shading ps_shading_pattern and using the pattern as the filling color.

Return: Return Values Returns true on success.

Связанные операции: ps_shading, ps_shading_pattern.

ps_showВывести текст в текущем PostScript-документе.

PECL ps >= 1.1.0 · ps; pslib

ps_show(resource $psdoc, string $text): bool

Вывести текст в текущем PostScript-документе.

Официальная сигнатура. ps_show(resource $psdoc, string $text): bool.

Доступность. Точная строка официального versions.xml: PECL ps >= 1.1.0.

ПараметрЧто приходит и зачем
resource $psdocОткрытый документ PS, созданный ps_new() и связанный с файлом через ps_open_file().
Точная формулировка PHP Manual

Resource identifier of the postscript file as returned by ps_new .

string $textТекст, который попадёт в документ или будет измерен.
Точная формулировка PHP Manual

The text to be output.

Возврат. Тип bool. Официальный текст: Return Values Returns true on success.

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

Минимальная операция: ps_showПример для указанного окружения
<?php
declare(strict_types=1);

if (!extension_loaded('ps')) {
    throw new RuntimeException('Нужно расширение ps');
}

$outputDir = __DIR__ . '/exports';
if (!is_dir($outputDir) && !mkdir($outputDir, 0775, true) && !is_dir($outputDir)) {
    throw new RuntimeException('Не создан каталог exports');
}
$outputPath = $outputDir . '/ps-show-minimal.ps';
$ps = ps_new();
if ($ps === false) { throw new RuntimeException('PS-ресурс не создан'); }
if (!ps_open_file($ps, $outputPath)) {
    ps_delete($ps);
    throw new RuntimeException('PostScript-файл не открыт');
}
ps_begin_page($ps, 595.0, 842.0);
// PostScript-файл и страница уже открыты в этом самодостаточном примере.
$fontId = ps_findfont($ps, 'Helvetica', 'builtin', false);
if ($fontId <= 0) { throw new RuntimeException('Шрифт не найден'); }
ps_setfont($ps, $fontId, 12.0);
ps_set_text_pos($ps, 72.0, 760.0);
$result = ps_show($ps, 'Order #42');
if ($result !== true) { throw new RuntimeException('Операция отклонена'); }
ps_end_page($ps);
ps_close($ps);
ps_delete($ps);
if (!is_file($outputPath) || filesize($outputPath) === 0) {
    throw new RuntimeException('PostScript-файл не создан');
}
echo basename($outputPath), ' bytes=', filesize($outputPath), PHP_EOL;

Для ps_show показаны обязательное состояние и проверяемый эффект; официальный тип возврата — bool. Пример сам создаёт ресурс, открывает файл и страницу, а затем завершает документ. Нативный runtime требует PECL ps и pslib; здесь заявлена только синтаксическая проверка.
Что должно получиться в совместимом окружении: На странице появляется заданный текст или символ выбранным шрифтом. ps-show-minimal.ps bytes=<положительное число>.

В составе документа: ps_showПример для указанного окружения
<?php
declare(strict_types=1);

if (!extension_loaded('ps')) {
    throw new RuntimeException('Нужно расширение ps');
}

$outputDir = __DIR__ . '/exports';
if (!is_dir($outputDir) && !mkdir($outputDir, 0775, true) && !is_dir($outputDir)) {
    throw new RuntimeException('Не создан каталог exports');
}
$outputPath = $outputDir . '/ps-show-workflow.ps';
$ps = ps_new();
if ($ps === false) { throw new RuntimeException('PS-ресурс не создан'); }
if (!ps_open_file($ps, $outputPath)) {
    ps_delete($ps);
    throw new RuntimeException('PostScript-файл не открыт');
}
ps_begin_page($ps, 595.0, 842.0);
// PostScript-файл и страница уже открыты в этом самодостаточном примере.
$fontId = ps_findfont($ps, 'Helvetica', 'builtin', false);
if ($fontId <= 0) { throw new RuntimeException('Шрифт не найден'); }
ps_setfont($ps, $fontId, 14.0);
ps_set_text_pos($ps, 72.0, 760.0);
$result = ps_show($ps, 'Delivery act #73');
if ($result !== true) { throw new RuntimeException('Операция отклонена'); }
ps_setgray_stroke($ps, 0.6);
ps_moveto($ps, 72.0, 680.0);
ps_lineto($ps, 360.0, 680.0);
ps_stroke($ps);
ps_end_page($ps);
ps_close($ps);
ps_delete($ps);
if (!is_file($outputPath) || filesize($outputPath) === 0) {
    throw new RuntimeException('PostScript-файл не создан');
}
echo basename($outputPath), ' bytes=', filesize($outputPath), PHP_EOL;

Для ps_show показаны обязательное состояние и проверяемый эффект; официальный тип возврата — bool. Во втором варианте изменена задача/геометрия, а результат проверяют по готовому PS, не по синтетическому echo. Нативный runtime требует PECL ps и pslib; здесь заявлена только синтаксическая проверка.
Что должно получиться в совместимом окружении: На странице появляется заданный текст или символ выбранным шрифтом. Контрольная линия показывает базовую область текста. ps-show-workflow.ps bytes=<положительное число>.

Отказ и граница проверки. успех подтверждает только строгое true. Проверьте SearchPath, шрифт/encoding, активную страницу и наличие glyph; предупреждения направляйте в журнал, а не в бинарный ответ.

Полный официальный текст карточки на английском

Purpose: Output text

Description Output a text at the current text position. The text position can be set by storing the x and y coordinates into the values textx and texty with the function ps_set_value . The function will issue an error if a font was not set before with ps_setfont . ps_show evaluates the following parameters and values as set by ps_set_parameter and ps_set_value . charspacing (value) Distance between two consecutive glyphs. If this value is unequal to zero then all ligatures will be resolved. Values less than zero are allowed. kerning (parameter) Setting this parameter to "false" will turn off kerning. Kerning is turned on by default. ligatures (parameter) Setting this parameter to "false" will turn off the use of ligatures. Ligatures are turned on by default. underline (parameter) Setting this parameter to "true" will turn on underlining. Underlining is turned off by default. overline (parameter) Setting this parameter to "true" will turn on overlining. Overlining is turned off by default. strikeout (parameter) Setting this parameter to "true" will turn on striking out. Striking out is turned off by default.

Return: Return Values Returns true on success.

Связанные операции: ps_continue_text, ps_show_xy, ps_setfont.

ps_show_boxedВывести текст boxed в текущем PostScript-документе.

PECL ps >= 1.1.0 · ps; pslib

ps_show_boxed(resource $psdoc, string $text, float $left, float $bottom, float $width, float $height, string $hmode, string $feature = ?): int

Вывести текст boxed в текущем PostScript-документе.

Официальная сигнатура. ps_show_boxed(resource $psdoc, string $text, float $left, float $bottom, float $width, float $height, string $hmode, string $feature = ?): int.

Доступность. Точная строка официального versions.xml: PECL ps >= 1.1.0.

ПараметрЧто приходит и зачем
resource $psdocОткрытый документ PS, созданный ps_new() и связанный с файлом через ps_open_file().
Точная формулировка PHP Manual

Resource identifier of the postscript file as returned by ps_new .

string $textТекст, который попадёт в документ или будет измерен.
Точная формулировка PHP Manual

The text to be output into the given box.

float $leftКоордината X в пунктах PostScript; начало системы координат по умолчанию находится слева снизу.
Точная формулировка PHP Manual

x-coordinate of the lower left corner of the box.

float $bottomКоордината Y в пунктах PostScript; значение растёт снизу вверх до преобразования системы координат.
Точная формулировка PHP Manual

y-coordinate of the lower left corner of the box.

float $widthРазмер/шаг в единицах текущей операции; для геометрии PostScript обычно используются пункты.
Точная формулировка PHP Manual

Width of the box.

float $heightРазмер/шаг в единицах текущей операции; для геометрии PostScript обычно используются пункты.
Точная формулировка PHP Manual

Height of the box.

string $hmodeРежим горизонтального размещения boxed-текста, например left или justify.
Точная формулировка PHP Manual

The parameter hmode can be justify , fulljustify , right , left , or center . The difference of justify and fulljustify just affects the last line of the box. In fulljustify mode the last line will be left and right justified unless this is also the last line of paragraph. In justify mode it will always be left justified.

string $feature = значение по умолчаниюПараметр $feature типа string именно для операции ps_show_boxed.

Возврат. Тип int. Официальный текст: Return Values Number of characters that could not be written.

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

Минимальная операция: ps_show_boxedПример для указанного окружения
<?php
declare(strict_types=1);

if (!extension_loaded('ps')) {
    throw new RuntimeException('Нужно расширение ps');
}

$outputDir = __DIR__ . '/exports';
if (!is_dir($outputDir) && !mkdir($outputDir, 0775, true) && !is_dir($outputDir)) {
    throw new RuntimeException('Не создан каталог exports');
}
$outputPath = $outputDir . '/ps-show-boxed-minimal.ps';
$ps = ps_new();
if ($ps === false) { throw new RuntimeException('PS-ресурс не создан'); }
if (!ps_open_file($ps, $outputPath)) {
    ps_delete($ps);
    throw new RuntimeException('PostScript-файл не открыт');
}
ps_begin_page($ps, 595.0, 842.0);
// PostScript-файл и страница уже открыты в этом самодостаточном примере.
$fontId = ps_findfont($ps, 'Helvetica', 'builtin', false);
if ($fontId <= 0) { throw new RuntimeException('Шрифт не найден'); }
ps_setfont($ps, $fontId, 12.0);
ps_set_text_pos($ps, 72.0, 760.0);
$result = ps_show_boxed($ps, 'Order #42', 48.0, 500.0, 595.0, 842.0, 'justify', 'blind');
if ($result === false || $result === 0) { throw new RuntimeException('Идентификатор/значение не получено'); }
ps_end_page($ps);
ps_close($ps);
ps_delete($ps);
if (!is_file($outputPath) || filesize($outputPath) === 0) {
    throw new RuntimeException('PostScript-файл не создан');
}
echo basename($outputPath), ' bytes=', filesize($outputPath), PHP_EOL;

Для ps_show_boxed показаны обязательное состояние и проверяемый эффект; официальный тип возврата — int. Пример сам создаёт ресурс, открывает файл и страницу, а затем завершает документ. Нативный runtime требует PECL ps и pslib; здесь заявлена только синтаксическая проверка.
Что должно получиться в совместимом окружении: На странице появляется заданный текст или символ выбранным шрифтом. ps-show-boxed-minimal.ps bytes=<положительное число>.

В составе документа: ps_show_boxedПример для указанного окружения
<?php
declare(strict_types=1);

if (!extension_loaded('ps')) {
    throw new RuntimeException('Нужно расширение ps');
}

$outputDir = __DIR__ . '/exports';
if (!is_dir($outputDir) && !mkdir($outputDir, 0775, true) && !is_dir($outputDir)) {
    throw new RuntimeException('Не создан каталог exports');
}
$outputPath = $outputDir . '/ps-show-boxed-workflow.ps';
$ps = ps_new();
if ($ps === false) { throw new RuntimeException('PS-ресурс не создан'); }
if (!ps_open_file($ps, $outputPath)) {
    ps_delete($ps);
    throw new RuntimeException('PostScript-файл не открыт');
}
ps_begin_page($ps, 595.0, 842.0);
// PostScript-файл и страница уже открыты в этом самодостаточном примере.
$fontId = ps_findfont($ps, 'Helvetica', 'builtin', false);
if ($fontId <= 0) { throw new RuntimeException('Шрифт не найден'); }
ps_setfont($ps, $fontId, 14.0);
ps_set_text_pos($ps, 72.0, 760.0);
$result = ps_show_boxed($ps, 'Delivery act #73', 64.0, 420.0, 420.0, 297.0, 'left', 'hyphenation');
if ($result === false || $result === 0) { throw new RuntimeException('Идентификатор/значение не получено'); }
ps_setgray_stroke($ps, 0.6);
ps_moveto($ps, 72.0, 680.0);
ps_lineto($ps, 360.0, 680.0);
ps_stroke($ps);
ps_end_page($ps);
ps_close($ps);
ps_delete($ps);
if (!is_file($outputPath) || filesize($outputPath) === 0) {
    throw new RuntimeException('PostScript-файл не создан');
}
echo basename($outputPath), ' bytes=', filesize($outputPath), PHP_EOL;

Для ps_show_boxed показаны обязательное состояние и проверяемый эффект; официальный тип возврата — int. Во втором варианте изменена задача/геометрия, а результат проверяют по готовому PS, не по синтетическому echo. Нативный runtime требует PECL ps и pslib; здесь заявлена только синтаксическая проверка.
Что должно получиться в совместимом окружении: На странице появляется заданный текст или символ выбранным шрифтом. Контрольная линия показывает базовую область текста. ps-show-boxed-workflow.ps bytes=<положительное число>.

Отказ и граница проверки. сначала проверяется заявленный тип результата. Проверьте SearchPath, шрифт/encoding, активную страницу и наличие glyph; предупреждения направляйте в журнал, а не в бинарный ответ.

Полный официальный текст карточки на английском

Purpose: Output text in a box

Description Outputs a text in a given box. The lower left corner of the box is at ( left , bottom ). Line breaks will be inserted where needed. Multiple spaces are treated as one. Tabulators are treated as spaces. The text will be hyphenated if the parameter hyphenation is set to true and the parameter hyphendict contains a valid filename for a hyphenation file. The line spacing is taken from the value leading . Paragraphs can be separated by an empty line just like in TeX. If the value parindent is set to value [gt] 0.0 then the first n lines will be indented. The number n of lines is set by the parameter numindentlines . In order to prevent indenting of the first m paragraphs set the value parindentskip to a positive number.

Return: Return Values Number of characters that could not be written.

Связанные операции: ps_continue_text.

ps_show_xyВывести текст xy в текущем PostScript-документе.

PECL ps >= 1.1.0 · ps; pslib

ps_show_xy(resource $psdoc, string $text, float $x, float $y): bool

Вывести текст xy в текущем PostScript-документе.

Официальная сигнатура. ps_show_xy(resource $psdoc, string $text, float $x, float $y): bool.

Доступность. Точная строка официального versions.xml: PECL ps >= 1.1.0.

ПараметрЧто приходит и зачем
resource $psdocОткрытый документ PS, созданный ps_new() и связанный с файлом через ps_open_file().
Точная формулировка PHP Manual

Resource identifier of the postscript file as returned by ps_new .

string $textТекст, который попадёт в документ или будет измерен.
Точная формулировка PHP Manual

The text to be output.

float $xКоордината X в пунктах PostScript; начало системы координат по умолчанию находится слева снизу.
Точная формулировка PHP Manual

x-coordinate of the lower left corner of the box surrounding the text.

float $yКоордината Y в пунктах PostScript; значение растёт снизу вверх до преобразования системы координат.
Точная формулировка PHP Manual

y-coordinate of the lower left corner of the box surrounding the text.

Возврат. Тип bool. Официальный текст: Return Values Returns true on success.

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

Минимальная операция: ps_show_xyПример для указанного окружения
<?php
declare(strict_types=1);

if (!extension_loaded('ps')) {
    throw new RuntimeException('Нужно расширение ps');
}

$outputDir = __DIR__ . '/exports';
if (!is_dir($outputDir) && !mkdir($outputDir, 0775, true) && !is_dir($outputDir)) {
    throw new RuntimeException('Не создан каталог exports');
}
$outputPath = $outputDir . '/ps-show-xy-minimal.ps';
$ps = ps_new();
if ($ps === false) { throw new RuntimeException('PS-ресурс не создан'); }
if (!ps_open_file($ps, $outputPath)) {
    ps_delete($ps);
    throw new RuntimeException('PostScript-файл не открыт');
}
ps_begin_page($ps, 595.0, 842.0);
// PostScript-файл и страница уже открыты в этом самодостаточном примере.
$fontId = ps_findfont($ps, 'Helvetica', 'builtin', false);
if ($fontId <= 0) { throw new RuntimeException('Шрифт не найден'); }
ps_setfont($ps, $fontId, 12.0);
ps_set_text_pos($ps, 72.0, 760.0);
$result = ps_show_xy($ps, 'Order #42', 100.0, 120.0);
if ($result !== true) { throw new RuntimeException('Операция отклонена'); }
ps_end_page($ps);
ps_close($ps);
ps_delete($ps);
if (!is_file($outputPath) || filesize($outputPath) === 0) {
    throw new RuntimeException('PostScript-файл не создан');
}
echo basename($outputPath), ' bytes=', filesize($outputPath), PHP_EOL;

Для ps_show_xy показаны обязательное состояние и проверяемый эффект; официальный тип возврата — bool. Пример сам создаёт ресурс, открывает файл и страницу, а затем завершает документ. Нативный runtime требует PECL ps и pslib; здесь заявлена только синтаксическая проверка.
Что должно получиться в совместимом окружении: На странице появляется заданный текст или символ выбранным шрифтом. ps-show-xy-minimal.ps bytes=<положительное число>.

В составе документа: ps_show_xyПример для указанного окружения
<?php
declare(strict_types=1);

if (!extension_loaded('ps')) {
    throw new RuntimeException('Нужно расширение ps');
}

$outputDir = __DIR__ . '/exports';
if (!is_dir($outputDir) && !mkdir($outputDir, 0775, true) && !is_dir($outputDir)) {
    throw new RuntimeException('Не создан каталог exports');
}
$outputPath = $outputDir . '/ps-show-xy-workflow.ps';
$ps = ps_new();
if ($ps === false) { throw new RuntimeException('PS-ресурс не создан'); }
if (!ps_open_file($ps, $outputPath)) {
    ps_delete($ps);
    throw new RuntimeException('PostScript-файл не открыт');
}
ps_begin_page($ps, 595.0, 842.0);
// PostScript-файл и страница уже открыты в этом самодостаточном примере.
$fontId = ps_findfont($ps, 'Helvetica', 'builtin', false);
if ($fontId <= 0) { throw new RuntimeException('Шрифт не найден'); }
ps_setfont($ps, $fontId, 14.0);
ps_set_text_pos($ps, 72.0, 760.0);
$result = ps_show_xy($ps, 'Delivery act #73', 160.0, 240.0);
if ($result !== true) { throw new RuntimeException('Операция отклонена'); }
ps_setgray_stroke($ps, 0.6);
ps_moveto($ps, 72.0, 680.0);
ps_lineto($ps, 360.0, 680.0);
ps_stroke($ps);
ps_end_page($ps);
ps_close($ps);
ps_delete($ps);
if (!is_file($outputPath) || filesize($outputPath) === 0) {
    throw new RuntimeException('PostScript-файл не создан');
}
echo basename($outputPath), ' bytes=', filesize($outputPath), PHP_EOL;

Для ps_show_xy показаны обязательное состояние и проверяемый эффект; официальный тип возврата — bool. Во втором варианте изменена задача/геометрия, а результат проверяют по готовому PS, не по синтетическому echo. Нативный runtime требует PECL ps и pslib; здесь заявлена только синтаксическая проверка.
Что должно получиться в совместимом окружении: На странице появляется заданный текст или символ выбранным шрифтом. Контрольная линия показывает базовую область текста. ps-show-xy-workflow.ps bytes=<положительное число>.

Отказ и граница проверки. успех подтверждает только строгое true. Проверьте SearchPath, шрифт/encoding, активную страницу и наличие glyph; предупреждения направляйте в журнал, а не в бинарный ответ.

Полный официальный текст карточки на английском

Purpose: Output text at given position

Description Output a text at the given text position.

Return: Return Values Returns true on success.

Связанные операции: ps_continue_text, ps_show.

ps_show_xy2Вывести текст xy2 в текущем PostScript-документе.

PECL ps >= 1.1.0 · ps; pslib

ps_show_xy2(resource $psdoc, string $text, int $len, float $xcoor, float $ycoor): bool

Вывести текст xy2 в текущем PostScript-документе.

Официальная сигнатура. ps_show_xy2(resource $psdoc, string $text, int $len, float $xcoor, float $ycoor): bool.

Доступность. Точная строка официального versions.xml: PECL ps >= 1.1.0.

ПараметрЧто приходит и зачем
resource $psdocОткрытый документ PS, созданный ps_new() и связанный с файлом через ps_open_file().
string $textТекст, который попадёт в документ или будет измерен.
int $lenЧисло байтов текста, которое функция должна обработать; не смешивайте с количеством Unicode-символов.
float $xcoorКоордината X в пунктах PostScript; начало системы координат по умолчанию находится слева снизу.
float $ycoorКоордината Y в пунктах PostScript; значение растёт снизу вверх до преобразования системы координат.

Возврат. Тип bool. Официальный текст: Return Values Returns true on success.

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

Минимальная операция: ps_show_xy2Пример для указанного окружения
<?php
declare(strict_types=1);

if (!extension_loaded('ps')) {
    throw new RuntimeException('Нужно расширение ps');
}

$outputDir = __DIR__ . '/exports';
if (!is_dir($outputDir) && !mkdir($outputDir, 0775, true) && !is_dir($outputDir)) {
    throw new RuntimeException('Не создан каталог exports');
}
$outputPath = $outputDir . '/ps-show-xy2-minimal.ps';
$ps = ps_new();
if ($ps === false) { throw new RuntimeException('PS-ресурс не создан'); }
if (!ps_open_file($ps, $outputPath)) {
    ps_delete($ps);
    throw new RuntimeException('PostScript-файл не открыт');
}
ps_begin_page($ps, 595.0, 842.0);
// PostScript-файл и страница уже открыты в этом самодостаточном примере.
$fontId = ps_findfont($ps, 'Helvetica', 'builtin', false);
if ($fontId <= 0) { throw new RuntimeException('Шрифт не найден'); }
ps_setfont($ps, $fontId, 12.0);
ps_set_text_pos($ps, 72.0, 760.0);
$text = 'Order #42';
$result = ps_show_xy2($ps, $text, strlen($text), 72.0, 760.0);
if ($result !== true) { throw new RuntimeException('Операция отклонена'); }
ps_end_page($ps);
ps_close($ps);
ps_delete($ps);
if (!is_file($outputPath) || filesize($outputPath) === 0) {
    throw new RuntimeException('PostScript-файл не создан');
}
echo basename($outputPath), ' bytes=', filesize($outputPath), PHP_EOL;

Для ps_show_xy2 показаны обязательное состояние и проверяемый эффект; официальный тип возврата — bool. Пример сам создаёт ресурс, открывает файл и страницу, а затем завершает документ. Нативный runtime требует PECL ps и pslib; здесь заявлена только синтаксическая проверка.
Что должно получиться в совместимом окружении: На странице появляется заданный текст или символ выбранным шрифтом. ps-show-xy2-minimal.ps bytes=<положительное число>.

В составе документа: ps_show_xy2Пример для указанного окружения
<?php
declare(strict_types=1);

if (!extension_loaded('ps')) {
    throw new RuntimeException('Нужно расширение ps');
}

$outputDir = __DIR__ . '/exports';
if (!is_dir($outputDir) && !mkdir($outputDir, 0775, true) && !is_dir($outputDir)) {
    throw new RuntimeException('Не создан каталог exports');
}
$outputPath = $outputDir . '/ps-show-xy2-workflow.ps';
$ps = ps_new();
if ($ps === false) { throw new RuntimeException('PS-ресурс не создан'); }
if (!ps_open_file($ps, $outputPath)) {
    ps_delete($ps);
    throw new RuntimeException('PostScript-файл не открыт');
}
ps_begin_page($ps, 595.0, 842.0);
// PostScript-файл и страница уже открыты в этом самодостаточном примере.
$fontId = ps_findfont($ps, 'Helvetica', 'builtin', false);
if ($fontId <= 0) { throw new RuntimeException('Шрифт не найден'); }
ps_setfont($ps, $fontId, 14.0);
ps_set_text_pos($ps, 72.0, 760.0);
$text = 'Delivery act #73';
$result = ps_show_xy2($ps, $text, strlen($text), 90.0, 700.0);
if ($result !== true) { throw new RuntimeException('Операция отклонена'); }
ps_setgray_stroke($ps, 0.6);
ps_moveto($ps, 72.0, 680.0);
ps_lineto($ps, 360.0, 680.0);
ps_stroke($ps);
ps_end_page($ps);
ps_close($ps);
ps_delete($ps);
if (!is_file($outputPath) || filesize($outputPath) === 0) {
    throw new RuntimeException('PostScript-файл не создан');
}
echo basename($outputPath), ' bytes=', filesize($outputPath), PHP_EOL;

Для ps_show_xy2 показаны обязательное состояние и проверяемый эффект; официальный тип возврата — bool. Во втором варианте изменена задача/геометрия, а результат проверяют по готовому PS, не по синтетическому echo. Нативный runtime требует PECL ps и pslib; здесь заявлена только синтаксическая проверка.
Что должно получиться в совместимом окружении: На странице появляется заданный текст или символ выбранным шрифтом. Контрольная линия показывает базовую область текста. ps-show-xy2-workflow.ps bytes=<положительное число>.

Отказ и граница проверки. успех подтверждает только строгое true. Проверьте SearchPath, шрифт/encoding, активную страницу и наличие glyph; предупреждения направляйте в журнал, а не в бинарный ответ.

Полный официальный текст карточки на английском

Purpose: Output text at position

Description

Return: Return Values Returns true on success.

ps_show2Вывести у текущей позиции ограниченное число байтов текста.

PECL ps >= 1.1.0 · ps; pslib

ps_show2(resource $psdoc, string $text, int $len): bool

Вывести у текущей позиции ограниченное число байтов текста.

Официальная сигнатура. ps_show2(resource $psdoc, string $text, int $len): bool.

Доступность. Точная строка официального versions.xml: PECL ps >= 1.1.0.

ПараметрЧто приходит и зачем
resource $psdocОткрытый документ PS, созданный ps_new() и связанный с файлом через ps_open_file().
Точная формулировка PHP Manual

Resource identifier of the postscript file as returned by ps_new .

string $textТекст, который попадёт в документ или будет измерен.
Точная формулировка PHP Manual

The text to be output.

int $lenЧисло байтов текста, которое функция должна обработать; не смешивайте с количеством Unicode-символов.
Точная формулировка PHP Manual

The maximum number of characters to print.

Возврат. Тип bool. Официальный текст: Return Values Returns true on success.

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

Минимальная операция: ps_show2Пример для указанного окружения
<?php
declare(strict_types=1);

if (!extension_loaded('ps')) {
    throw new RuntimeException('Нужно расширение ps');
}

$outputDir = __DIR__ . '/exports';
if (!is_dir($outputDir) && !mkdir($outputDir, 0775, true) && !is_dir($outputDir)) {
    throw new RuntimeException('Не создан каталог exports');
}
$outputPath = $outputDir . '/ps-show2-minimal.ps';
$ps = ps_new();
if ($ps === false) { throw new RuntimeException('PS-ресурс не создан'); }
if (!ps_open_file($ps, $outputPath)) {
    ps_delete($ps);
    throw new RuntimeException('PostScript-файл не открыт');
}
ps_begin_page($ps, 595.0, 842.0);
// PostScript-файл и страница уже открыты в этом самодостаточном примере.
$fontId = ps_findfont($ps, 'Helvetica', 'builtin', false);
if ($fontId <= 0) { throw new RuntimeException('Шрифт не найден'); }
ps_setfont($ps, $fontId, 12.0);
ps_set_text_pos($ps, 72.0, 760.0);
$text = 'Order #42';
$result = ps_show2($ps, $text, strlen($text));
if ($result !== true) { throw new RuntimeException('Операция отклонена'); }
ps_end_page($ps);
ps_close($ps);
ps_delete($ps);
if (!is_file($outputPath) || filesize($outputPath) === 0) {
    throw new RuntimeException('PostScript-файл не создан');
}
echo basename($outputPath), ' bytes=', filesize($outputPath), PHP_EOL;

Для ps_show2 показаны обязательное состояние и проверяемый эффект; официальный тип возврата — bool. Пример сам создаёт ресурс, открывает файл и страницу, а затем завершает документ. Нативный runtime требует PECL ps и pslib; здесь заявлена только синтаксическая проверка.
Что должно получиться в совместимом окружении: На странице появляется заданный текст или символ выбранным шрифтом. ps-show2-minimal.ps bytes=<положительное число>.

В составе документа: ps_show2Пример для указанного окружения
<?php
declare(strict_types=1);

if (!extension_loaded('ps')) {
    throw new RuntimeException('Нужно расширение ps');
}

$outputDir = __DIR__ . '/exports';
if (!is_dir($outputDir) && !mkdir($outputDir, 0775, true) && !is_dir($outputDir)) {
    throw new RuntimeException('Не создан каталог exports');
}
$outputPath = $outputDir . '/ps-show2-workflow.ps';
$ps = ps_new();
if ($ps === false) { throw new RuntimeException('PS-ресурс не создан'); }
if (!ps_open_file($ps, $outputPath)) {
    ps_delete($ps);
    throw new RuntimeException('PostScript-файл не открыт');
}
ps_begin_page($ps, 595.0, 842.0);
// PostScript-файл и страница уже открыты в этом самодостаточном примере.
$fontId = ps_findfont($ps, 'Helvetica', 'builtin', false);
if ($fontId <= 0) { throw new RuntimeException('Шрифт не найден'); }
ps_setfont($ps, $fontId, 14.0);
ps_set_text_pos($ps, 72.0, 760.0);
$text = 'Delivery act #73';
$result = ps_show2($ps, $text, strlen($text));
if ($result !== true) { throw new RuntimeException('Операция отклонена'); }
ps_setgray_stroke($ps, 0.6);
ps_moveto($ps, 72.0, 680.0);
ps_lineto($ps, 360.0, 680.0);
ps_stroke($ps);
ps_end_page($ps);
ps_close($ps);
ps_delete($ps);
if (!is_file($outputPath) || filesize($outputPath) === 0) {
    throw new RuntimeException('PostScript-файл не создан');
}
echo basename($outputPath), ' bytes=', filesize($outputPath), PHP_EOL;

Для ps_show2 показаны обязательное состояние и проверяемый эффект; официальный тип возврата — bool. Во втором варианте изменена задача/геометрия, а результат проверяют по готовому PS, не по синтетическому echo. Нативный runtime требует PECL ps и pslib; здесь заявлена только синтаксическая проверка.
Что должно получиться в совместимом окружении: На странице появляется заданный текст или символ выбранным шрифтом. Контрольная линия показывает базовую область текста. ps-show2-workflow.ps bytes=<положительное число>.

Отказ и граница проверки. успех подтверждает только строгое true. Проверьте SearchPath, шрифт/encoding, активную страницу и наличие glyph; предупреждения направляйте в журнал, а не в бинарный ответ.

Полный официальный текст карточки на английском

Purpose: Output a text at current position

Description Output text at the current position. Do not print more than len characters.

Return: Return Values Returns true on success.

ps_string_geometryИзмерить текст геометрию текста в текущем PostScript-документе.

PECL ps >= 1.2.0 · ps; pslib

ps_string_geometry(resource $psdoc, string $text, int $fontid = 0, float $size = 0.0): array

Измерить текст геометрию текста в текущем PostScript-документе.

Официальная сигнатура. ps_string_geometry(resource $psdoc, string $text, int $fontid = 0, float $size = 0.0): array.

Доступность. Точная строка официального versions.xml: PECL ps >= 1.2.0.

ПараметрЧто приходит и зачем
resource $psdocОткрытый документ PS, созданный ps_new() и связанный с файлом через ps_open_file().
Точная формулировка PHP Manual

Resource identifier of the postscript file as returned by ps_new .

string $textТекст, который попадёт в документ или будет измерен.
Точная формулировка PHP Manual

The text for which the geometry is to be calculated.

int $fontid = 0Положительный идентификатор шрифта, ранее возвращённый ps_findfont().
Точная формулировка PHP Manual

The identifier of the font to be used. If not font is specified the current font will be used.

float $size = 0.0Размер/шаг в единицах текущей операции; для геометрии PostScript обычно используются пункты.
Точная формулировка PHP Manual

The size of the font. If no size is specified the current size is used.

Возврат. Тип array. Официальный текст: Return Values An array of the dimensions of a string. The element 'width' contains the width of the string as returned by ps_stringwidth . The element 'descender' contains the maximum descender and 'ascender' the maximum ascender of the string.

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

Минимальная операция: ps_string_geometryПример для указанного окружения
<?php
declare(strict_types=1);

if (!extension_loaded('ps')) {
    throw new RuntimeException('Нужно расширение ps');
}

$outputDir = __DIR__ . '/exports';
if (!is_dir($outputDir) && !mkdir($outputDir, 0775, true) && !is_dir($outputDir)) {
    throw new RuntimeException('Не создан каталог exports');
}
$outputPath = $outputDir . '/ps-string-geometry-minimal.ps';
$ps = ps_new();
if ($ps === false) { throw new RuntimeException('PS-ресурс не создан'); }
if (!ps_open_file($ps, $outputPath)) {
    ps_delete($ps);
    throw new RuntimeException('PostScript-файл не открыт');
}
ps_begin_page($ps, 595.0, 842.0);
// PostScript-файл и страница уже открыты в этом самодостаточном примере.
$fontId = ps_findfont($ps, 'Helvetica', 'builtin', false);
if ($fontId <= 0) { throw new RuntimeException('Шрифт не найден'); }
ps_setfont($ps, $fontId, 12.0);
$result = ps_string_geometry($ps, 'Order #42', $fontId, 12.0);
ps_end_page($ps);
ps_close($ps);
ps_delete($ps);
if (!is_file($outputPath) || filesize($outputPath) === 0) {
    throw new RuntimeException('PostScript-файл не создан');
}
echo basename($outputPath), ' bytes=', filesize($outputPath), PHP_EOL;

Для ps_string_geometry показаны обязательное состояние и проверяемый эффект; официальный тип возврата — array. Пример сам создаёт ресурс, открывает файл и страницу, а затем завершает документ. Нативный runtime требует PECL ps и pslib; здесь заявлена только синтаксическая проверка.
Что должно получиться в совместимом окружении: Изменение видно в итоговом PostScript после завершения страницы и документа. ps-string-geometry-minimal.ps bytes=<положительное число>.

В составе документа: ps_string_geometryПример для указанного окружения
<?php
declare(strict_types=1);

if (!extension_loaded('ps')) {
    throw new RuntimeException('Нужно расширение ps');
}

$outputDir = __DIR__ . '/exports';
if (!is_dir($outputDir) && !mkdir($outputDir, 0775, true) && !is_dir($outputDir)) {
    throw new RuntimeException('Не создан каталог exports');
}
$outputPath = $outputDir . '/ps-string-geometry-workflow.ps';
$ps = ps_new();
if ($ps === false) { throw new RuntimeException('PS-ресурс не создан'); }
if (!ps_open_file($ps, $outputPath)) {
    ps_delete($ps);
    throw new RuntimeException('PostScript-файл не открыт');
}
ps_begin_page($ps, 595.0, 842.0);
// PostScript-файл и страница уже открыты в этом самодостаточном примере.
$fontId = ps_findfont($ps, 'Helvetica', 'builtin', false);
if ($fontId <= 0) { throw new RuntimeException('Шрифт не найден'); }
ps_setfont($ps, $fontId, 14.0);
$result = ps_string_geometry($ps, 'Delivery act #73', $fontId, 18.0);
if (!is_array($result)) { throw new RuntimeException('Ожидался массив результата'); }
ps_show_xy($ps, 'Элементов: ' . count($result), 72.0, 650.0);
ps_end_page($ps);
ps_close($ps);
ps_delete($ps);
if (!is_file($outputPath) || filesize($outputPath) === 0) {
    throw new RuntimeException('PostScript-файл не создан');
}
echo basename($outputPath), ' bytes=', filesize($outputPath), PHP_EOL;

Для ps_string_geometry показаны обязательное состояние и проверяемый эффект; официальный тип возврата — array. Во втором варианте изменена задача/геометрия, а результат проверяют по готовому PS, не по синтетическому echo. Нативный runtime требует PECL ps и pslib; здесь заявлена только синтаксическая проверка.
Что должно получиться в совместимом окружении: Изменение видно в итоговом PostScript после завершения страницы и документа. Возвращённый массив используется в подписи страницы. ps-string-geometry-workflow.ps bytes=<положительное число>.

Отказ и граница проверки. сначала проверяется заявленный тип результата. Операция зависит от открытого документа, активной страницы и графического состояния; проверяйте готовый PS независимым инструментом.

Полный официальный текст карточки на английском

Purpose: Gets geometry of a string

Description This function is similar to ps_stringwidth but returns an array of dimensions containing the width, ascender, and descender of the text.

Return: Return Values An array of the dimensions of a string. The element 'width' contains the width of the string as returned by ps_stringwidth . The element 'descender' contains the maximum descender and 'ascender' the maximum ascender of the string.

Связанные операции: ps_continue_text, ps_stringwidth.

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

PECL ps >= 1.1.0 · ps; pslib

ps_stringwidth(resource $psdoc, string $text, int $fontid = 0, float $size = 0.0): float

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

Официальная сигнатура. ps_stringwidth(resource $psdoc, string $text, int $fontid = 0, float $size = 0.0): float.

Доступность. Точная строка официального versions.xml: PECL ps >= 1.1.0.

ПараметрЧто приходит и зачем
resource $psdocОткрытый документ PS, созданный ps_new() и связанный с файлом через ps_open_file().
Точная формулировка PHP Manual

Resource identifier of the postscript file as returned by ps_new .

string $textТекст, который попадёт в документ или будет измерен.
Точная формулировка PHP Manual

The text for which the width is to be calculated.

int $fontid = 0Положительный идентификатор шрифта, ранее возвращённый ps_findfont().
Точная формулировка PHP Manual

The identifier of the font to be used. If not font is specified the current font will be used.

float $size = 0.0Размер/шаг в единицах текущей операции; для геометрии PostScript обычно используются пункты.
Точная формулировка PHP Manual

The size of the font. If no size is specified the current size is used.

Возврат. Тип float. Официальный текст: Return Values Width of a string in points.

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

Минимальная операция: ps_stringwidthПример для указанного окружения
<?php
declare(strict_types=1);

if (!extension_loaded('ps')) {
    throw new RuntimeException('Нужно расширение ps');
}

$outputDir = __DIR__ . '/exports';
if (!is_dir($outputDir) && !mkdir($outputDir, 0775, true) && !is_dir($outputDir)) {
    throw new RuntimeException('Не создан каталог exports');
}
$outputPath = $outputDir . '/ps-stringwidth-minimal.ps';
$ps = ps_new();
if ($ps === false) { throw new RuntimeException('PS-ресурс не создан'); }
if (!ps_open_file($ps, $outputPath)) {
    ps_delete($ps);
    throw new RuntimeException('PostScript-файл не открыт');
}
ps_begin_page($ps, 595.0, 842.0);
// PostScript-файл и страница уже открыты в этом самодостаточном примере.
$fontId = ps_findfont($ps, 'Helvetica', 'builtin', false);
if ($fontId <= 0) { throw new RuntimeException('Шрифт не найден'); }
ps_setfont($ps, $fontId, 12.0);
$result = ps_stringwidth($ps, 'Order #42', $fontId, 12.0);
ps_end_page($ps);
ps_close($ps);
ps_delete($ps);
if (!is_file($outputPath) || filesize($outputPath) === 0) {
    throw new RuntimeException('PostScript-файл не создан');
}
echo basename($outputPath), ' bytes=', filesize($outputPath), PHP_EOL;

Для ps_stringwidth показаны обязательное состояние и проверяемый эффект; официальный тип возврата — float. Пример сам создаёт ресурс, открывает файл и страницу, а затем завершает документ. Нативный runtime требует PECL ps и pslib; здесь заявлена только синтаксическая проверка.
Что должно получиться в совместимом окружении: Изменение видно в итоговом PostScript после завершения страницы и документа. ps-stringwidth-minimal.ps bytes=<положительное число>.

В составе документа: ps_stringwidthПример для указанного окружения
<?php
declare(strict_types=1);

if (!extension_loaded('ps')) {
    throw new RuntimeException('Нужно расширение ps');
}

$outputDir = __DIR__ . '/exports';
if (!is_dir($outputDir) && !mkdir($outputDir, 0775, true) && !is_dir($outputDir)) {
    throw new RuntimeException('Не создан каталог exports');
}
$outputPath = $outputDir . '/ps-stringwidth-workflow.ps';
$ps = ps_new();
if ($ps === false) { throw new RuntimeException('PS-ресурс не создан'); }
if (!ps_open_file($ps, $outputPath)) {
    ps_delete($ps);
    throw new RuntimeException('PostScript-файл не открыт');
}
ps_begin_page($ps, 595.0, 842.0);
// PostScript-файл и страница уже открыты в этом самодостаточном примере.
$fontId = ps_findfont($ps, 'Helvetica', 'builtin', false);
if ($fontId <= 0) { throw new RuntimeException('Шрифт не найден'); }
ps_setfont($ps, $fontId, 14.0);
$result = ps_stringwidth($ps, 'Delivery act #73', $fontId, 18.0);
if (!is_float($result) && !is_int($result)) { throw new RuntimeException('Ожидалось измерение'); }
ps_moveto($ps, 72.0, 660.0);
ps_lineto($ps, 72.0 + max(1.0, (float) $result), 660.0);
ps_stroke($ps);
ps_end_page($ps);
ps_close($ps);
ps_delete($ps);
if (!is_file($outputPath) || filesize($outputPath) === 0) {
    throw new RuntimeException('PostScript-файл не создан');
}
echo basename($outputPath), ' bytes=', filesize($outputPath), PHP_EOL;

Для ps_stringwidth показаны обязательное состояние и проверяемый эффект; официальный тип возврата — float. Во втором варианте изменена задача/геометрия, а результат проверяют по готовому PS, не по синтетическому echo. Нативный runtime требует PECL ps и pslib; здесь заявлена только синтаксическая проверка.
Что должно получиться в совместимом окружении: Изменение видно в итоговом PostScript после завершения страницы и документа. Возвращённое измерение задаёт длину контрольной линии. ps-stringwidth-workflow.ps bytes=<положительное число>.

Отказ и граница проверки. сначала проверяется заявленный тип результата. Операция зависит от открытого документа, активной страницы и графического состояния; проверяйте готовый PS независимым инструментом.

Полный официальный текст карточки на английском

Purpose: Gets width of a string

Description Calculates the width of a string in points if it was output in the given font and font size. This function needs an Adobe font metrics file to calculate the precise width. If kerning is turned on, it will be taken into account.

Return: Return Values Width of a string in points.

Связанные операции: ps_string_geometry.

ps_strokeОбвести текущий контур в текущем PostScript-документе.

PECL ps >= 1.1.0 · ps; pslib

ps_stroke(resource $psdoc): bool

Обвести текущий контур в текущем PostScript-документе.

Официальная сигнатура. ps_stroke(resource $psdoc): bool.

Доступность. Точная строка официального versions.xml: PECL ps >= 1.1.0.

ПараметрЧто приходит и зачем
resource $psdocОткрытый документ PS, созданный ps_new() и связанный с файлом через ps_open_file().
Точная формулировка PHP Manual

Resource identifier of the postscript file as returned by ps_new .

Возврат. Тип bool. Официальный текст: Return Values Returns true on success.

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

Минимальная операция: ps_strokeПример для указанного окружения
<?php
declare(strict_types=1);

if (!extension_loaded('ps')) {
    throw new RuntimeException('Нужно расширение ps');
}

$outputDir = __DIR__ . '/exports';
if (!is_dir($outputDir) && !mkdir($outputDir, 0775, true) && !is_dir($outputDir)) {
    throw new RuntimeException('Не создан каталог exports');
}
$outputPath = $outputDir . '/ps-stroke-minimal.ps';
$ps = ps_new();
if ($ps === false) { throw new RuntimeException('PS-ресурс не создан'); }
if (!ps_open_file($ps, $outputPath)) {
    ps_delete($ps);
    throw new RuntimeException('PostScript-файл не открыт');
}
ps_begin_page($ps, 595.0, 842.0);
// PostScript-файл и страница уже открыты в этом самодостаточном примере.
$fontId = ps_findfont($ps, 'Helvetica', 'builtin', false);
if ($fontId <= 0) { throw new RuntimeException('Шрифт не найден'); }
ps_setfont($ps, $fontId, 12.0);
ps_rect($ps, 72.0, 500.0, 240.0, 90.0);
$result = ps_stroke($ps);
if ($result !== true) { throw new RuntimeException('Операция отклонена'); }
ps_end_page($ps);
ps_close($ps);
ps_delete($ps);
if (!is_file($outputPath) || filesize($outputPath) === 0) {
    throw new RuntimeException('PostScript-файл не создан');
}
echo basename($outputPath), ' bytes=', filesize($outputPath), PHP_EOL;

Для ps_stroke показаны обязательное состояние и проверяемый эффект; официальный тип возврата — bool. Пример сам создаёт ресурс, открывает файл и страницу, а затем завершает документ. Нативный runtime требует PECL ps и pslib; здесь заявлена только синтаксическая проверка.
Что должно получиться в совместимом окружении: Прямоугольный контур залит и/или обведён согласно выбранной операции. ps-stroke-minimal.ps bytes=<положительное число>.

В составе документа: ps_strokeПример для указанного окружения
<?php
declare(strict_types=1);

if (!extension_loaded('ps')) {
    throw new RuntimeException('Нужно расширение ps');
}

$outputDir = __DIR__ . '/exports';
if (!is_dir($outputDir) && !mkdir($outputDir, 0775, true) && !is_dir($outputDir)) {
    throw new RuntimeException('Не создан каталог exports');
}
$outputPath = $outputDir . '/ps-stroke-workflow.ps';
$ps = ps_new();
if ($ps === false) { throw new RuntimeException('PS-ресурс не создан'); }
if (!ps_open_file($ps, $outputPath)) {
    ps_delete($ps);
    throw new RuntimeException('PostScript-файл не открыт');
}
ps_begin_page($ps, 595.0, 842.0);
// PostScript-файл и страница уже открыты в этом самодостаточном примере.
$fontId = ps_findfont($ps, 'Helvetica', 'builtin', false);
if ($fontId <= 0) { throw new RuntimeException('Шрифт не найден'); }
ps_setfont($ps, $fontId, 14.0);
ps_rect($ps, 72.0, 500.0, 240.0, 90.0);
$result = ps_stroke($ps);
if ($result !== true) { throw new RuntimeException('Операция отклонена'); }
ps_setgray_stroke($ps, 0.25);
ps_rect($ps, 68.0, 496.0, 248.0, 98.0);
ps_stroke($ps);
ps_end_page($ps);
ps_close($ps);
ps_delete($ps);
if (!is_file($outputPath) || filesize($outputPath) === 0) {
    throw new RuntimeException('PostScript-файл не создан');
}
echo basename($outputPath), ' bytes=', filesize($outputPath), PHP_EOL;

Для ps_stroke показаны обязательное состояние и проверяемый эффект; официальный тип возврата — bool. Во втором варианте изменена задача/геометрия, а результат проверяют по готовому PS, не по синтетическому echo. Нативный runtime требует PECL ps и pslib; здесь заявлена только синтаксическая проверка.
Что должно получиться в совместимом окружении: Прямоугольный контур залит и/или обведён согласно выбранной операции. Поверх результата добавлена контрольная рамка. ps-stroke-workflow.ps bytes=<положительное число>.

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

Полный официальный текст карточки на английском

Purpose: Draws the current path

Description Draws the path constructed with previously called drawing functions like ps_lineto .

Return: Return Values Returns true on success.

Связанные операции: ps_closepath_stroke, ps_fill, ps_fill_stroke.

ps_symbolВывести символ в текущем PostScript-документе.

PECL ps >= 1.2.0 · ps; pslib

ps_symbol(resource $psdoc, int $ord): bool

Вывести символ в текущем PostScript-документе.

Официальная сигнатура. ps_symbol(resource $psdoc, int $ord): bool.

Доступность. Точная строка официального versions.xml: PECL ps >= 1.2.0.

ПараметрЧто приходит и зачем
resource $psdocОткрытый документ PS, созданный ps_new() и связанный с файлом через ps_open_file().
Точная формулировка PHP Manual

Resource identifier of the postscript file as returned by ps_new .

int $ordКод glyph/символа в выбранном шрифте.
Точная формулировка PHP Manual

The position of the glyph in the font encoding vector.

Возврат. Тип bool. Официальный текст: Return Values Returns true on success.

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

Минимальная операция: ps_symbolПример для указанного окружения
<?php
declare(strict_types=1);

if (!extension_loaded('ps')) {
    throw new RuntimeException('Нужно расширение ps');
}

$outputDir = __DIR__ . '/exports';
if (!is_dir($outputDir) && !mkdir($outputDir, 0775, true) && !is_dir($outputDir)) {
    throw new RuntimeException('Не создан каталог exports');
}
$outputPath = $outputDir . '/ps-symbol-minimal.ps';
$ps = ps_new();
if ($ps === false) { throw new RuntimeException('PS-ресурс не создан'); }
if (!ps_open_file($ps, $outputPath)) {
    ps_delete($ps);
    throw new RuntimeException('PostScript-файл не открыт');
}
ps_begin_page($ps, 595.0, 842.0);
// PostScript-файл и страница уже открыты в этом самодостаточном примере.
$fontId = ps_findfont($ps, 'Helvetica', 'builtin', false);
if ($fontId <= 0) { throw new RuntimeException('Шрифт не найден'); }
ps_setfont($ps, $fontId, 12.0);
ps_set_text_pos($ps, 72.0, 760.0);
$result = ps_symbol($ps, 65);
if ($result !== true) { throw new RuntimeException('Операция отклонена'); }
ps_end_page($ps);
ps_close($ps);
ps_delete($ps);
if (!is_file($outputPath) || filesize($outputPath) === 0) {
    throw new RuntimeException('PostScript-файл не создан');
}
echo basename($outputPath), ' bytes=', filesize($outputPath), PHP_EOL;

Для ps_symbol показаны обязательное состояние и проверяемый эффект; официальный тип возврата — bool. Пример сам создаёт ресурс, открывает файл и страницу, а затем завершает документ. Нативный runtime требует PECL ps и pslib; здесь заявлена только синтаксическая проверка.
Что должно получиться в совместимом окружении: На странице появляется заданный текст или символ выбранным шрифтом. ps-symbol-minimal.ps bytes=<положительное число>.

В составе документа: ps_symbolПример для указанного окружения
<?php
declare(strict_types=1);

if (!extension_loaded('ps')) {
    throw new RuntimeException('Нужно расширение ps');
}

$outputDir = __DIR__ . '/exports';
if (!is_dir($outputDir) && !mkdir($outputDir, 0775, true) && !is_dir($outputDir)) {
    throw new RuntimeException('Не создан каталог exports');
}
$outputPath = $outputDir . '/ps-symbol-workflow.ps';
$ps = ps_new();
if ($ps === false) { throw new RuntimeException('PS-ресурс не создан'); }
if (!ps_open_file($ps, $outputPath)) {
    ps_delete($ps);
    throw new RuntimeException('PostScript-файл не открыт');
}
ps_begin_page($ps, 595.0, 842.0);
// PostScript-файл и страница уже открыты в этом самодостаточном примере.
$fontId = ps_findfont($ps, 'Helvetica', 'builtin', false);
if ($fontId <= 0) { throw new RuntimeException('Шрифт не найден'); }
ps_setfont($ps, $fontId, 14.0);
ps_set_text_pos($ps, 72.0, 760.0);
$result = ps_symbol($ps, 66);
if ($result !== true) { throw new RuntimeException('Операция отклонена'); }
ps_setgray_stroke($ps, 0.6);
ps_moveto($ps, 72.0, 680.0);
ps_lineto($ps, 360.0, 680.0);
ps_stroke($ps);
ps_end_page($ps);
ps_close($ps);
ps_delete($ps);
if (!is_file($outputPath) || filesize($outputPath) === 0) {
    throw new RuntimeException('PostScript-файл не создан');
}
echo basename($outputPath), ' bytes=', filesize($outputPath), PHP_EOL;

Для ps_symbol показаны обязательное состояние и проверяемый эффект; официальный тип возврата — bool. Во втором варианте изменена задача/геометрия, а результат проверяют по готовому PS, не по синтетическому echo. Нативный runtime требует PECL ps и pslib; здесь заявлена только синтаксическая проверка.
Что должно получиться в совместимом окружении: На странице появляется заданный текст или символ выбранным шрифтом. Контрольная линия показывает базовую область текста. ps-symbol-workflow.ps bytes=<положительное число>.

Отказ и граница проверки. успех подтверждает только строгое true. Проверьте SearchPath, шрифт/encoding, активную страницу и наличие glyph; предупреждения направляйте в журнал, а не в бинарный ответ.

Полный официальный текст карточки на английском

Purpose: Output a glyph

Description Output the glyph at position ord in the font encoding vector of the current font. The font encoding for a font can be set when loading the font with ps_findfont .

Return: Return Values Returns true on success.

Связанные операции: ps_symbol_name, ps_symbol_width.

ps_symbol_nameВывести символ name в текущем PostScript-документе.

PECL ps >= 1.2.0 · ps; pslib

ps_symbol_name(resource $psdoc, int $ord, int $fontid = 0): string

Вывести символ name в текущем PostScript-документе.

Официальная сигнатура. ps_symbol_name(resource $psdoc, int $ord, int $fontid = 0): string.

Доступность. Точная строка официального versions.xml: PECL ps >= 1.2.0.

ПараметрЧто приходит и зачем
resource $psdocОткрытый документ PS, созданный ps_new() и связанный с файлом через ps_open_file().
Точная формулировка PHP Manual

Resource identifier of the postscript file as returned by ps_new .

int $ordКод glyph/символа в выбранном шрифте.
Точная формулировка PHP Manual

The parameter ord is the position of the glyph in the font encoding vector.

int $fontid = 0Положительный идентификатор шрифта, ранее возвращённый ps_findfont().
Точная формулировка PHP Manual

The identifier of the font to be used. If not font is specified the current font will be used.

Возврат. Тип string. Официальный текст: Return Values The name of a glyph in the given font.

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

Минимальная операция: ps_symbol_nameПример для указанного окружения
<?php
declare(strict_types=1);

if (!extension_loaded('ps')) {
    throw new RuntimeException('Нужно расширение ps');
}

$outputDir = __DIR__ . '/exports';
if (!is_dir($outputDir) && !mkdir($outputDir, 0775, true) && !is_dir($outputDir)) {
    throw new RuntimeException('Не создан каталог exports');
}
$outputPath = $outputDir . '/ps-symbol-name-minimal.ps';
$ps = ps_new();
if ($ps === false) { throw new RuntimeException('PS-ресурс не создан'); }
if (!ps_open_file($ps, $outputPath)) {
    ps_delete($ps);
    throw new RuntimeException('PostScript-файл не открыт');
}
ps_begin_page($ps, 595.0, 842.0);
// PostScript-файл и страница уже открыты в этом самодостаточном примере.
$fontId = ps_findfont($ps, 'Helvetica', 'builtin', false);
if ($fontId <= 0) { throw new RuntimeException('Шрифт не найден'); }
ps_setfont($ps, $fontId, 12.0);
$result = ps_symbol_name($ps, 65, $fontId);
ps_end_page($ps);
ps_close($ps);
ps_delete($ps);
if (!is_file($outputPath) || filesize($outputPath) === 0) {
    throw new RuntimeException('PostScript-файл не создан');
}
echo basename($outputPath), ' bytes=', filesize($outputPath), PHP_EOL;

Для ps_symbol_name показаны обязательное состояние и проверяемый эффект; официальный тип возврата — string. Пример сам создаёт ресурс, открывает файл и страницу, а затем завершает документ. Нативный runtime требует PECL ps и pslib; здесь заявлена только синтаксическая проверка.
Что должно получиться в совместимом окружении: Изменение видно в итоговом PostScript после завершения страницы и документа. ps-symbol-name-minimal.ps bytes=<положительное число>.

В составе документа: ps_symbol_nameПример для указанного окружения
<?php
declare(strict_types=1);

if (!extension_loaded('ps')) {
    throw new RuntimeException('Нужно расширение ps');
}

$outputDir = __DIR__ . '/exports';
if (!is_dir($outputDir) && !mkdir($outputDir, 0775, true) && !is_dir($outputDir)) {
    throw new RuntimeException('Не создан каталог exports');
}
$outputPath = $outputDir . '/ps-symbol-name-workflow.ps';
$ps = ps_new();
if ($ps === false) { throw new RuntimeException('PS-ресурс не создан'); }
if (!ps_open_file($ps, $outputPath)) {
    ps_delete($ps);
    throw new RuntimeException('PostScript-файл не открыт');
}
ps_begin_page($ps, 595.0, 842.0);
// PostScript-файл и страница уже открыты в этом самодостаточном примере.
$fontId = ps_findfont($ps, 'Helvetica', 'builtin', false);
if ($fontId <= 0) { throw new RuntimeException('Шрифт не найден'); }
ps_setfont($ps, $fontId, 14.0);
$result = ps_symbol_name($ps, 66, $fontId);
if (!is_string($result) || $result === '') { throw new RuntimeException('Ожидалась строка'); }
ps_set_info($ps, 'Subject', $result);
ps_end_page($ps);
ps_close($ps);
ps_delete($ps);
if (!is_file($outputPath) || filesize($outputPath) === 0) {
    throw new RuntimeException('PostScript-файл не создан');
}
echo basename($outputPath), ' bytes=', filesize($outputPath), PHP_EOL;

Для ps_symbol_name показаны обязательное состояние и проверяемый эффект; официальный тип возврата — string. Во втором варианте изменена задача/геометрия, а результат проверяют по готовому PS, не по синтетическому echo. Нативный runtime требует PECL ps и pslib; здесь заявлена только синтаксическая проверка.
Что должно получиться в совместимом окружении: Изменение видно в итоговом PostScript после завершения страницы и документа. Полученная строка записана в метаданные документа. ps-symbol-name-workflow.ps bytes=<положительное число>.

Отказ и граница проверки. сначала проверяется заявленный тип результата. Операция зависит от открытого документа, активной страницы и графического состояния; проверяйте готовый PS независимым инструментом.

Полный официальный текст карточки на английском

Purpose: Gets name of a glyph

Description This function needs an Adobe font metrics file to know which glyphs are available.

Return: Return Values The name of a glyph in the given font.

Связанные операции: ps_symbol, ps_symbol_width.

ps_symbol_widthВывести символ ширину текста в текущем PostScript-документе.

PECL ps >= 1.2.0 · ps; pslib

ps_symbol_width(resource $psdoc, int $ord, int $fontid = 0, float $size = 0.0): float

Вывести символ ширину текста в текущем PostScript-документе.

Официальная сигнатура. ps_symbol_width(resource $psdoc, int $ord, int $fontid = 0, float $size = 0.0): float.

Доступность. Точная строка официального versions.xml: PECL ps >= 1.2.0.

ПараметрЧто приходит и зачем
resource $psdocОткрытый документ PS, созданный ps_new() и связанный с файлом через ps_open_file().
Точная формулировка PHP Manual

Resource identifier of the postscript file as returned by ps_new .

int $ordКод glyph/символа в выбранном шрифте.
Точная формулировка PHP Manual

The position of the glyph in the font encoding vector.

int $fontid = 0Положительный идентификатор шрифта, ранее возвращённый ps_findfont().
Точная формулировка PHP Manual

The identifier of the font to be used. If not font is specified the current font will be used.

float $size = 0.0Размер/шаг в единицах текущей операции; для геометрии PostScript обычно используются пункты.
Точная формулировка PHP Manual

The size of the font. If no size is specified the current size is used.

Возврат. Тип float. Официальный текст: Return Values The width of a glyph in points.

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

Минимальная операция: ps_symbol_widthПример для указанного окружения
<?php
declare(strict_types=1);

if (!extension_loaded('ps')) {
    throw new RuntimeException('Нужно расширение ps');
}

$outputDir = __DIR__ . '/exports';
if (!is_dir($outputDir) && !mkdir($outputDir, 0775, true) && !is_dir($outputDir)) {
    throw new RuntimeException('Не создан каталог exports');
}
$outputPath = $outputDir . '/ps-symbol-width-minimal.ps';
$ps = ps_new();
if ($ps === false) { throw new RuntimeException('PS-ресурс не создан'); }
if (!ps_open_file($ps, $outputPath)) {
    ps_delete($ps);
    throw new RuntimeException('PostScript-файл не открыт');
}
ps_begin_page($ps, 595.0, 842.0);
// PostScript-файл и страница уже открыты в этом самодостаточном примере.
$fontId = ps_findfont($ps, 'Helvetica', 'builtin', false);
if ($fontId <= 0) { throw new RuntimeException('Шрифт не найден'); }
ps_setfont($ps, $fontId, 12.0);
$result = ps_symbol_width($ps, 65, $fontId, 12.0);
ps_end_page($ps);
ps_close($ps);
ps_delete($ps);
if (!is_file($outputPath) || filesize($outputPath) === 0) {
    throw new RuntimeException('PostScript-файл не создан');
}
echo basename($outputPath), ' bytes=', filesize($outputPath), PHP_EOL;

Для ps_symbol_width показаны обязательное состояние и проверяемый эффект; официальный тип возврата — float. Пример сам создаёт ресурс, открывает файл и страницу, а затем завершает документ. Нативный runtime требует PECL ps и pslib; здесь заявлена только синтаксическая проверка.
Что должно получиться в совместимом окружении: Изменение видно в итоговом PostScript после завершения страницы и документа. ps-symbol-width-minimal.ps bytes=<положительное число>.

В составе документа: ps_symbol_widthПример для указанного окружения
<?php
declare(strict_types=1);

if (!extension_loaded('ps')) {
    throw new RuntimeException('Нужно расширение ps');
}

$outputDir = __DIR__ . '/exports';
if (!is_dir($outputDir) && !mkdir($outputDir, 0775, true) && !is_dir($outputDir)) {
    throw new RuntimeException('Не создан каталог exports');
}
$outputPath = $outputDir . '/ps-symbol-width-workflow.ps';
$ps = ps_new();
if ($ps === false) { throw new RuntimeException('PS-ресурс не создан'); }
if (!ps_open_file($ps, $outputPath)) {
    ps_delete($ps);
    throw new RuntimeException('PostScript-файл не открыт');
}
ps_begin_page($ps, 595.0, 842.0);
// PostScript-файл и страница уже открыты в этом самодостаточном примере.
$fontId = ps_findfont($ps, 'Helvetica', 'builtin', false);
if ($fontId <= 0) { throw new RuntimeException('Шрифт не найден'); }
ps_setfont($ps, $fontId, 14.0);
$result = ps_symbol_width($ps, 66, $fontId, 18.0);
if (!is_float($result) && !is_int($result)) { throw new RuntimeException('Ожидалось измерение'); }
ps_moveto($ps, 72.0, 660.0);
ps_lineto($ps, 72.0 + max(1.0, (float) $result), 660.0);
ps_stroke($ps);
ps_end_page($ps);
ps_close($ps);
ps_delete($ps);
if (!is_file($outputPath) || filesize($outputPath) === 0) {
    throw new RuntimeException('PostScript-файл не создан');
}
echo basename($outputPath), ' bytes=', filesize($outputPath), PHP_EOL;

Для ps_symbol_width показаны обязательное состояние и проверяемый эффект; официальный тип возврата — float. Во втором варианте изменена задача/геометрия, а результат проверяют по готовому PS, не по синтетическому echo. Нативный runtime требует PECL ps и pslib; здесь заявлена только синтаксическая проверка.
Что должно получиться в совместимом окружении: Изменение видно в итоговом PostScript после завершения страницы и документа. Возвращённое измерение задаёт длину контрольной линии. ps-symbol-width-workflow.ps bytes=<положительное число>.

Отказ и граница проверки. сначала проверяется заявленный тип результата. Операция зависит от открытого документа, активной страницы и графического состояния; проверяйте готовый PS независимым инструментом.

Полный официальный текст карточки на английском

Purpose: Gets width of a glyph

Description Calculates the width of a glyph in points if it was output in the given font and font size. This function needs an Adobe font metrics file to calculate the precise width.

Return: Return Values The width of a glyph in points.

Связанные операции: ps_symbol, ps_symbol_name.

ps_translateСместить систему координат в текущем PostScript-документе.

PECL ps >= 1.1.0 · ps; pslib

ps_translate(resource $psdoc, float $x, float $y): bool

Сместить систему координат в текущем PostScript-документе.

Официальная сигнатура. ps_translate(resource $psdoc, float $x, float $y): bool.

Доступность. Точная строка официального versions.xml: PECL ps >= 1.1.0.

ПараметрЧто приходит и зачем
resource $psdocОткрытый документ PS, созданный ps_new() и связанный с файлом через ps_open_file().
Точная формулировка PHP Manual

Resource identifier of the postscript file as returned by ps_new .

float $xКоордината X в пунктах PostScript; начало системы координат по умолчанию находится слева снизу.
Точная формулировка PHP Manual

x-coordinate of the origin of the translated coordinate system.

float $yКоордината Y в пунктах PostScript; значение растёт снизу вверх до преобразования системы координат.
Точная формулировка PHP Manual

y-coordinate of the origin of the translated coordinate system.

Возврат. Тип bool. Официальный текст: Return Values Returns true on success.

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

Минимальная операция: ps_translateПример для указанного окружения
<?php
declare(strict_types=1);

if (!extension_loaded('ps')) {
    throw new RuntimeException('Нужно расширение ps');
}

$outputDir = __DIR__ . '/exports';
if (!is_dir($outputDir) && !mkdir($outputDir, 0775, true) && !is_dir($outputDir)) {
    throw new RuntimeException('Не создан каталог exports');
}
$outputPath = $outputDir . '/ps-translate-minimal.ps';
$ps = ps_new();
if ($ps === false) { throw new RuntimeException('PS-ресурс не создан'); }
if (!ps_open_file($ps, $outputPath)) {
    ps_delete($ps);
    throw new RuntimeException('PostScript-файл не открыт');
}
ps_begin_page($ps, 595.0, 842.0);
// PostScript-файл и страница уже открыты в этом самодостаточном примере.
$fontId = ps_findfont($ps, 'Helvetica', 'builtin', false);
if ($fontId <= 0) { throw new RuntimeException('Шрифт не найден'); }
ps_setfont($ps, $fontId, 12.0);
$result = ps_translate($ps, 100.0, 120.0);
if ($result !== true) { throw new RuntimeException('Операция отклонена'); }
ps_end_page($ps);
ps_close($ps);
ps_delete($ps);
if (!is_file($outputPath) || filesize($outputPath) === 0) {
    throw new RuntimeException('PostScript-файл не создан');
}
echo basename($outputPath), ' bytes=', filesize($outputPath), PHP_EOL;

Для ps_translate показаны обязательное состояние и проверяемый эффект; официальный тип возврата — bool. Пример сам создаёт ресурс, открывает файл и страницу, а затем завершает документ. Нативный runtime требует PECL ps и pslib; здесь заявлена только синтаксическая проверка.
Что должно получиться в совместимом окружении: Графическое состояние изменено; эффект проверяется по следующему нарисованному объекту. ps-translate-minimal.ps bytes=<положительное число>.

В составе документа: ps_translateПример для указанного окружения
<?php
declare(strict_types=1);

if (!extension_loaded('ps')) {
    throw new RuntimeException('Нужно расширение ps');
}

$outputDir = __DIR__ . '/exports';
if (!is_dir($outputDir) && !mkdir($outputDir, 0775, true) && !is_dir($outputDir)) {
    throw new RuntimeException('Не создан каталог exports');
}
$outputPath = $outputDir . '/ps-translate-workflow.ps';
$ps = ps_new();
if ($ps === false) { throw new RuntimeException('PS-ресурс не создан'); }
if (!ps_open_file($ps, $outputPath)) {
    ps_delete($ps);
    throw new RuntimeException('PostScript-файл не открыт');
}
ps_begin_page($ps, 595.0, 842.0);
// PostScript-файл и страница уже открыты в этом самодостаточном примере.
$fontId = ps_findfont($ps, 'Helvetica', 'builtin', false);
if ($fontId <= 0) { throw new RuntimeException('Шрифт не найден'); }
ps_setfont($ps, $fontId, 14.0);
$result = ps_translate($ps, 160.0, 240.0);
if ($result !== true) { throw new RuntimeException('Операция отклонена'); }
ps_rect($ps, 72.0, 610.0, 180.0, 42.0);
ps_stroke($ps);
ps_show_xy($ps, 'Проверка настройки', 80.0, 625.0);
ps_end_page($ps);
ps_close($ps);
ps_delete($ps);
if (!is_file($outputPath) || filesize($outputPath) === 0) {
    throw new RuntimeException('PostScript-файл не создан');
}
echo basename($outputPath), ' bytes=', filesize($outputPath), PHP_EOL;

Для ps_translate показаны обязательное состояние и проверяемый эффект; официальный тип возврата — bool. Во втором варианте изменена задача/геометрия, а результат проверяют по готовому PS, не по синтетическому echo. Нативный runtime требует PECL ps и pslib; здесь заявлена только синтаксическая проверка.
Что должно получиться в совместимом окружении: Графическое состояние изменено; эффект проверяется по следующему нарисованному объекту. Настройка используется следующим нарисованным объектом. ps-translate-workflow.ps bytes=<положительное число>.

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

Полный официальный текст карточки на английском

Purpose: Sets translation

Description Sets a new initial point of the coordinate system.

Return: Return Values Returns true on success.

Связанные операции: ps_scale, ps_rotate.

Источники и обсуждения

Код и руководство с собой

Скачайте самостоятельные примеры с исходными данными, инструкциями и ожидаемыми результатами. Примеры HTTP и фрагменты для проекта помечены отдельно: им нужно указанное окружение.

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

Материалы сверены 2026-10-12. Примеры и объяснения написаны для этого руководства; источники и обсуждения доступны в каждой главе.