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

Дерево руководства
Глава 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-конвейера
- Проверить расширение и каталог записи
- Создать ресурс и открыть файл
- Начать страницу, настроить шрифт и рисовать
- Завершить страницу и документ, затем освободить ресурс
- Проверить сигнатуру, размер и открытие независимым PS/PDF-инструментом
Официальная страница: Installing/Configuring.
Дерево всех функций ps
Функции расположены по задачам: жизненный цикл документа, страницы и графическое состояние, геометрия, цвет, текст и шрифты, изображения, шаблоны/узоры/градиенты и интерактивные ссылки.
| Операция | Официальное назначение |
|---|---|
ps_add_bookmark | Add bookmark to current page |
ps_add_launchlink | Adds link which launches file |
ps_add_locallink | Adds link to a page in the same document |
ps_add_note | Adds note to current page |
ps_add_pdflink | Adds link to a page in a second pdf document |
ps_add_weblink | Adds link to a web location |
ps_arc | Draws an arc counterclockwise |
ps_arcn | Draws an arc clockwise |
ps_begin_page | Start a new page |
ps_begin_pattern | Start a new pattern |
ps_begin_template | Start a new template |
ps_circle | Draws a circle |
ps_clip | Clips drawing to current path |
ps_close | Closes a PostScript document |
ps_close_image | Closes image and frees memory |
ps_closepath | Closes path |
ps_closepath_stroke | Closes and strokes path |
ps_continue_text | Continue text in next line |
ps_curveto | Draws a curve |
ps_delete | Deletes all resources of a PostScript document |
ps_end_page | End a page |
ps_end_pattern | End a pattern |
ps_end_template | End a template |
ps_fill | Fills the current path |
ps_fill_stroke | Fills and strokes the current path |
ps_findfont | Loads a font |
ps_get_buffer | Fetches the full buffer containig the generated PS data |
ps_get_parameter | Gets certain parameters |
ps_get_value | Gets certain values |
ps_hyphenate | Hyphenates a word |
ps_include_file | Reads an external file with raw PostScript code |
ps_lineto | Draws a line |
ps_makespotcolor | Create spot color |
ps_moveto | Sets current point |
ps_new | Creates a new PostScript document object |
ps_open_file | Opens a file for output |
ps_open_image | Reads an image for later placement |
ps_open_image_file | Opens image from file |
ps_open_memory_image | Takes an GD image and returns an image for placement in a PS document |
ps_place_image | Places image on the page |
ps_rect | Draws a rectangle |
ps_restore | Restore previously save context |
ps_rotate | Sets rotation factor |
ps_save | Save current context |
ps_scale | Sets scaling factor |
ps_set_border_color | Sets color of border for annotations |
ps_set_border_dash | Sets length of dashes for border of annotations |
ps_set_border_style | Sets border style of annotations |
ps_set_info | Sets information fields of document |
ps_set_parameter | Sets certain parameters |
ps_set_text_pos | Sets position for text output |
ps_set_value | Sets certain values |
ps_setcolor | Sets current color |
ps_setdash | Sets appearance of a dashed line |
ps_setflat | Sets flatness |
ps_setfont | Sets font to use for following output |
ps_setgray | Sets gray value |
ps_setlinecap | Sets appearance of line ends |
ps_setlinejoin | Sets how contected lines are joined |
ps_setlinewidth | Sets width of a line |
ps_setmiterlimit | Sets the miter limit |
ps_setoverprintmode | Sets overprint mode |
ps_setpolydash | Sets appearance of a dashed line |
ps_shading | Creates a shading for later use |
ps_shading_pattern | Creates a pattern based on a shading |
ps_shfill | Fills an area with a shading |
ps_show | Output text |
ps_show_boxed | Output text in a box |
ps_show_xy | Output text at given position |
ps_show_xy2 | Output text at position |
ps_show2 | Output a text at current position |
ps_string_geometry | Gets geometry of a string |
ps_stringwidth | Gets width of a string |
ps_stroke | Draws the current path |
ps_symbol | Output a glyph |
ps_symbol_name | Gets name of a glyph |
ps_symbol_width | Gets width of a glyph |
ps_translate | Sets translation |
Официальная страница: PS Functions.
Лист, координаты и состояние рисования
PostScript похож на сценарий для печатной машины: команды последовательно меняют текущую точку, цвет, толщину линии и шрифт. Координаты начинаются снизу слева; 72 пункта соответствуют одному дюйму. A4 обычно задают примерно как 595 × 842 пункта.
- Создать документ и связать его с файлом
- Начать страницу заданного размера
- Выбрать шрифт и графические параметры
- Нарисовать текст и контуры
- Завершить страницу, документ и освободить ресурс
Практика: печатный бланк заказа
<?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 ManualResource identifier of the postscript file as returned by ps_new . |
string $text | Текст, который попадёт в документ или будет измерен. Точная формулировка PHP ManualThe text used for displaying the bookmark. |
int $parent = 0 | Идентификатор родительской закладки; 0 создаёт закладку верхнего уровня. Точная формулировка PHP ManualA bookmark previously created by this function which is used as the parent of the new bookmark. |
int $open = 0 | Флаг поведения текущего объекта; передавайте bool либо документированное 0/1. Точная формулировка PHP ManualIf 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.
Где увидеть в целой задаче. цельный жизненный цикл печатного бланка. Что знать до примера: переменные, вызов функций и возврат, исключения и обработка отказа, файлы и каталоги.
<?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=<положительное число>.
<?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_launchlinkДобавить ссылку запуска файла в текущем PostScript-документе.
PECL ps >= 1.1.0 · ps; pslib
ps_add_launchlink(resource $psdoc, float $llx, float $lly, float $urx, float $ury, string $filename): boolДобавить ссылку запуска файла в текущем PostScript-документе.
Официальная сигнатура. ps_add_launchlink(resource $psdoc, float $llx, float $lly, float $urx, float $ury, string $filename): bool.
Доступность. Точная строка официального versions.xml: PECL ps >= 1.1.0.
| Параметр | Что приходит и зачем |
|---|---|
resource $psdoc | Открытый документ PS, созданный ps_new() и связанный с файлом через ps_open_file(). Точная формулировка PHP ManualResource identifier of the postscript file as returned by ps_new . |
float $llx | Координата X в пунктах PostScript; начало системы координат по умолчанию находится слева снизу. Точная формулировка PHP ManualThe x-coordinate of the lower left corner. |
float $lly | Координата Y в пунктах PostScript; значение растёт снизу вверх до преобразования системы координат. Точная формулировка PHP ManualThe y-coordinate of the lower left corner. |
float $urx | Координата X в пунктах PostScript; начало системы координат по умолчанию находится слева снизу. Точная формулировка PHP ManualThe x-coordinate of the upper right corner. |
float $ury | Координата Y в пунктах PostScript; значение растёт снизу вверх до преобразования системы координат. Точная формулировка PHP ManualThe y-coordinate of the upper right corner. |
string $filename | Путь к локальному файлу. Для пользовательского ввода заранее ограничивают разрешённый каталог. Точная формулировка PHP ManualThe path of the program to be started, when the link is clicked on. |
Возврат. Тип bool. Официальный текст: Return Values Returns true on success.
Где увидеть в целой задаче. цельный жизненный цикл печатного бланка. Что знать до примера: переменные, вызов функций и возврат, исключения и обработка отказа, файлы и каталоги.
<?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-launchlink-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_launchlink($ps, 48.0, 690.0, 240.0, 720.0, 'manual.pdf');
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_launchlink показаны обязательное состояние и проверяемый эффект; официальный тип возврата — bool. Пример сам создаёт ресурс, открывает файл и страницу, а затем завершает документ. Нативный runtime требует PECL ps и pslib; здесь заявлена только синтаксическая проверка.
Что должно получиться в совместимом окружении: Интерактивная область появится после преобразования PostScript в PDF.
ps-add-launchlink-minimal.ps bytes=<положительное число>.
<?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-launchlink-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_launchlink($ps, 64.0, 620.0, 310.0, 655.0, 'delivery-guide.pdf');
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_launchlink показаны обязательное состояние и проверяемый эффект; официальный тип возврата — bool. Во втором варианте изменена задача/геометрия, а результат проверяют по готовому PS, не по синтетическому echo. Нативный runtime требует PECL ps и pslib; здесь заявлена только синтаксическая проверка.
Что должно получиться в совместимом окружении: Интерактивная область появится после преобразования PostScript в PDF. Граница интерактивной области отмечена на странице.
ps-add-launchlink-workflow.ps bytes=<положительное число>.
Отказ и граница проверки. успех подтверждает только строгое true. Интерактивная область требует текущей страницы, корректных координат и допустимого родителя; эффект проверяется после преобразования в PDF.
Полный официальный текст карточки на английском
Purpose: Adds link which launches file
Description Places a hyperlink at the given position pointing to a file program which is being started when clicked on. The hyperlink's source position is a rectangle with its lower left corner at (llx, lly) and its upper right corner at (urx, ury). The rectangle has by default a thin blue border. [ps.note.visible]
Return: Return Values Returns true on success.
Связанные операции: ps_add_locallink, ps_add_pdflink, ps_add_weblink.
ps_add_locallinkДобавить ссылку внутри документа в текущем PostScript-документе.
PECL ps >= 1.1.0 · ps; pslib
ps_add_locallink(resource $psdoc, float $llx, float $lly, float $urx, float $ury, int $page, string $dest): boolДобавить ссылку внутри документа в текущем PostScript-документе.
Официальная сигнатура. ps_add_locallink(resource $psdoc, float $llx, float $lly, float $urx, float $ury, int $page, string $dest): bool.
Доступность. Точная строка официального versions.xml: PECL ps >= 1.1.0.
| Параметр | Что приходит и зачем |
|---|---|
resource $psdoc | Открытый документ PS, созданный ps_new() и связанный с файлом через ps_open_file(). Точная формулировка PHP ManualResource identifier of the postscript file as returned by ps_new . |
float $llx | Координата X в пунктах PostScript; начало системы координат по умолчанию находится слева снизу. Точная формулировка PHP ManualThe x-coordinate of the lower left corner. |
float $lly | Координата Y в пунктах PostScript; значение растёт снизу вверх до преобразования системы координат. Точная формулировка PHP ManualThe y-coordinate of the lower left corner. |
float $urx | Координата X в пунктах PostScript; начало системы координат по умолчанию находится слева снизу. Точная формулировка PHP ManualThe x-coordinate of the upper right corner. |
float $ury | Координата Y в пунктах PostScript; значение растёт снизу вверх до преобразования системы координат. Точная формулировка PHP ManualThe y-coordinate of the upper right corner. |
int $page | Номер целевой страницы; уточняйте, начинается ли счёт с 0 или 1 у конкретной операции. Точная формулировка PHP ManualThe number of the page displayed when clicking on the link. |
string $dest | Параметр $dest типа string именно для операции ps_add_locallink. Точная формулировка PHP ManualThe parameter dest determines how the document is being viewed. It can be fitpage , fitwidth , fitheight , or fitbbox . |
Возврат. Тип bool. Официальный текст: Return Values Returns true on success.
Где увидеть в целой задаче. цельный жизненный цикл печатного бланка. Что знать до примера: переменные, вызов функций и возврат, исключения и обработка отказа, файлы и каталоги.
<?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-locallink-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_locallink($ps, 48.0, 690.0, 240.0, 720.0, 1, 'fitpage');
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_locallink показаны обязательное состояние и проверяемый эффект; официальный тип возврата — bool. Пример сам создаёт ресурс, открывает файл и страницу, а затем завершает документ. Нативный runtime требует PECL ps и pslib; здесь заявлена только синтаксическая проверка.
Что должно получиться в совместимом окружении: Интерактивная область появится после преобразования PostScript в PDF.
ps-add-locallink-minimal.ps bytes=<положительное число>.
<?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-locallink-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_locallink($ps, 64.0, 620.0, 310.0, 655.0, 2, 'fitwidth');
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_locallink показаны обязательное состояние и проверяемый эффект; официальный тип возврата — bool. Во втором варианте изменена задача/геометрия, а результат проверяют по готовому PS, не по синтетическому echo. Нативный runtime требует PECL ps и pslib; здесь заявлена только синтаксическая проверка.
Что должно получиться в совместимом окружении: Интерактивная область появится после преобразования PostScript в PDF. Граница интерактивной области отмечена на странице.
ps-add-locallink-workflow.ps bytes=<положительное число>.
Отказ и граница проверки. успех подтверждает только строгое true. Интерактивная область требует текущей страницы, корректных координат и допустимого родителя; эффект проверяется после преобразования в PDF.
Полный официальный текст карточки на английском
Purpose: Adds link to a page in the same document
Description Places a hyperlink at the given position pointing to a page in the same document. Clicking on the link will jump to the given page. The first page in a document has number 1. The hyperlink's source position is a rectangle with its lower left corner at ( llx , lly ) and its upper right corner at ( urx , ury ). The rectangle has by default a thin blue border. [ps.note.visible]
Return: Return Values Returns true on success.
Связанные операции: 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 ManualResource identifier of the postscript file as returned by ps_new . |
float $llx | Координата X в пунктах PostScript; начало системы координат по умолчанию находится слева снизу. Точная формулировка PHP ManualThe x-coordinate of the lower left corner. |
float $lly | Координата Y в пунктах PostScript; значение растёт снизу вверх до преобразования системы координат. Точная формулировка PHP ManualThe y-coordinate of the lower left corner. |
float $urx | Координата X в пунктах PostScript; начало системы координат по умолчанию находится слева снизу. Точная формулировка PHP ManualThe x-coordinate of the upper right corner. |
float $ury | Координата Y в пунктах PostScript; значение растёт снизу вверх до преобразования системы координат. Точная формулировка PHP ManualThe y-coordinate of the upper right corner. |
string $contents | Параметр $contents типа string именно для операции ps_add_note. Точная формулировка PHP ManualThe text of the note. |
string $title | Заголовок заметки, документа или другого объекта текущей операции. Точная формулировка PHP ManualThe title of the note as displayed in the header of the note. |
string $icon | Имя значка PDF-заметки, поддерживаемое pslib/целевым PDF-процессором. Точная формулировка PHP ManualThe 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 ManualIf 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.
Где увидеть в целой задаче. цельный жизненный цикл печатного бланка. Что знать до примера: переменные, вызов функций и возврат, исключения и обработка отказа, файлы и каталоги.
<?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=<положительное число>.
<?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_add_pdflinkДобавить ссылку на PDF в текущем PostScript-документе.
PECL ps >= 1.1.0 · ps; pslib
ps_add_pdflink(resource $psdoc, float $llx, float $lly, float $urx, float $ury, string $filename, int $page, string $dest): boolДобавить ссылку на PDF в текущем PostScript-документе.
Официальная сигнатура. ps_add_pdflink(resource $psdoc, float $llx, float $lly, float $urx, float $ury, string $filename, int $page, string $dest): bool.
Доступность. Точная строка официального versions.xml: PECL ps >= 1.1.0.
| Параметр | Что приходит и зачем |
|---|---|
resource $psdoc | Открытый документ PS, созданный ps_new() и связанный с файлом через ps_open_file(). Точная формулировка PHP ManualResource identifier of the postscript file as returned by ps_new . |
float $llx | Координата X в пунктах PostScript; начало системы координат по умолчанию находится слева снизу. Точная формулировка PHP ManualThe x-coordinate of the lower left corner. |
float $lly | Координата Y в пунктах PostScript; значение растёт снизу вверх до преобразования системы координат. Точная формулировка PHP ManualThe y-coordinate of the lower left corner. |
float $urx | Координата X в пунктах PostScript; начало системы координат по умолчанию находится слева снизу. Точная формулировка PHP ManualThe x-coordinate of the upper right corner. |
float $ury | Координата Y в пунктах PostScript; значение растёт снизу вверх до преобразования системы координат. Точная формулировка PHP ManualThe y-coordinate of the upper right corner. |
string $filename | Путь к локальному файлу. Для пользовательского ввода заранее ограничивают разрешённый каталог. Точная формулировка PHP ManualThe name of the pdf document to be opened when clicking on this link. |
int $page | Номер целевой страницы; уточняйте, начинается ли счёт с 0 или 1 у конкретной операции. Точная формулировка PHP ManualThe page number of the destination pdf document |
string $dest | Параметр $dest типа string именно для операции ps_add_pdflink. Точная формулировка PHP ManualThe parameter dest determines how the document is being viewed. It can be fitpage , fitwidth , fitheight , or fitbbox . |
Возврат. Тип bool. Официальный текст: Return Values Returns true on success.
Где увидеть в целой задаче. цельный жизненный цикл печатного бланка. Что знать до примера: переменные, вызов функций и возврат, исключения и обработка отказа, файлы и каталоги.
<?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-pdflink-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_pdflink($ps, 48.0, 690.0, 240.0, 720.0, 'appendix.pdf', 1, 'fitpage');
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_pdflink показаны обязательное состояние и проверяемый эффект; официальный тип возврата — bool. Пример сам создаёт ресурс, открывает файл и страницу, а затем завершает документ. Нативный runtime требует PECL ps и pslib; здесь заявлена только синтаксическая проверка.
Что должно получиться в совместимом окружении: Интерактивная область появится после преобразования PostScript в PDF.
ps-add-pdflink-minimal.ps bytes=<положительное число>.
<?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-pdflink-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_pdflink($ps, 64.0, 620.0, 310.0, 655.0, 'contract.pdf', 2, 'fitwidth');
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_pdflink показаны обязательное состояние и проверяемый эффект; официальный тип возврата — bool. Во втором варианте изменена задача/геометрия, а результат проверяют по готовому PS, не по синтетическому echo. Нативный runtime требует PECL ps и pslib; здесь заявлена только синтаксическая проверка.
Что должно получиться в совместимом окружении: Интерактивная область появится после преобразования PostScript в PDF. Граница интерактивной области отмечена на странице.
ps-add-pdflink-workflow.ps bytes=<положительное число>.
Отказ и граница проверки. успех подтверждает только строгое true. Интерактивная область требует текущей страницы, корректных координат и допустимого родителя; эффект проверяется после преобразования в PDF.
Полный официальный текст карточки на английском
Purpose: Adds link to a page in a second pdf document
Description Places a hyperlink at the given position pointing to a second pdf document. Clicking on the link will branch to the document at the given page. The first page in a document has number 1. The hyperlink's source position is a rectangle with its lower left corner at ( llx , lly ) and its upper right corner at ( urx , ury ). The rectangle has by default a thin blue border. [ps.note.visible]
Return: Return Values Returns true on success.
Связанные операции: ps_add_launchlink, ps_add_locallink, ps_add_weblink.
ps_add_weblinkДобавить веб-ссылку в текущем PostScript-документе.
PECL ps >= 1.1.0 · ps; pslib
ps_add_weblink(resource $psdoc, float $llx, float $lly, float $urx, float $ury, string $url): boolДобавить веб-ссылку в текущем PostScript-документе.
Официальная сигнатура. ps_add_weblink(resource $psdoc, float $llx, float $lly, float $urx, float $ury, string $url): bool.
Доступность. Точная строка официального versions.xml: PECL ps >= 1.1.0.
| Параметр | Что приходит и зачем |
|---|---|
resource $psdoc | Открытый документ PS, созданный ps_new() и связанный с файлом через ps_open_file(). Точная формулировка PHP ManualResource identifier of the postscript file as returned by ps_new . |
float $llx | Координата X в пунктах PostScript; начало системы координат по умолчанию находится слева снизу. Точная формулировка PHP ManualThe x-coordinate of the lower left corner. |
float $lly | Координата Y в пунктах PostScript; значение растёт снизу вверх до преобразования системы координат. Точная формулировка PHP ManualThe y-coordinate of the lower left corner. |
float $urx | Координата X в пунктах PostScript; начало системы координат по умолчанию находится слева снизу. Точная формулировка PHP ManualThe x-coordinate of the upper right corner. |
float $ury | Координата Y в пунктах PostScript; значение растёт снизу вверх до преобразования системы координат. Точная формулировка PHP ManualThe y-coordinate of the upper right corner. |
string $url | Адрес связанного PDF или веб-ссылки. Для внешнего ввода разрешайте только ожидаемые схемы/хосты. Точная формулировка PHP ManualThe url of the hyperlink to be opened when clicking on this link, e.g. http://www.php.net . |
Возврат. Тип bool. Официальный текст: Return Values Returns true on success.
Где увидеть в целой задаче. цельный жизненный цикл печатного бланка. Что знать до примера: переменные, вызов функций и возврат, исключения и обработка отказа, файлы и каталоги.
<?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-weblink-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_weblink($ps, 48.0, 690.0, 240.0, 720.0, 'https://example.test/orders/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_add_weblink показаны обязательное состояние и проверяемый эффект; официальный тип возврата — bool. Пример сам создаёт ресурс, открывает файл и страницу, а затем завершает документ. Нативный runtime требует PECL ps и pslib; здесь заявлена только синтаксическая проверка.
Что должно получиться в совместимом окружении: Интерактивная область появится после преобразования PostScript в PDF.
ps-add-weblink-minimal.ps bytes=<положительное число>.
<?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-weblink-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_weblink($ps, 64.0, 620.0, 310.0, 655.0, 'https://example.test/delivery/73');
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_weblink показаны обязательное состояние и проверяемый эффект; официальный тип возврата — bool. Во втором варианте изменена задача/геометрия, а результат проверяют по готовому PS, не по синтетическому echo. Нативный runtime требует PECL ps и pslib; здесь заявлена только синтаксическая проверка.
Что должно получиться в совместимом окружении: Интерактивная область появится после преобразования PostScript в PDF. Граница интерактивной области отмечена на странице.
ps-add-weblink-workflow.ps bytes=<положительное число>.
Отказ и граница проверки. успех подтверждает только строгое true. Интерактивная область требует текущей страницы, корректных координат и допустимого родителя; эффект проверяется после преобразования в PDF.
Полный официальный текст карточки на английском
Purpose: Adds link to a web location
Description Places a hyperlink at the given position pointing to a web page. The hyperlink's source position is a rectangle with its lower left corner at ( llx , lly ) and its upper right corner at ( urx , ury ). The rectangle has by default a thin blue border. [ps.note.visible]
Return: Return Values Returns true on success.
Связанные операции: ps_add_launchlink, ps_add_locallink, ps_add_pdflink.
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 ManualResource identifier of the postscript file as returned by ps_new . |
float $x | Координата X в пунктах PostScript; начало системы координат по умолчанию находится слева снизу. Точная формулировка PHP ManualThe x-coordinate of the circle's middle point. |
float $y | Координата Y в пунктах PostScript; значение растёт снизу вверх до преобразования системы координат. Точная формулировка PHP ManualThe y-coordinate of the circle's middle point. |
float $radius | Размер/шаг в единицах текущей операции; для геометрии PostScript обычно используются пункты. Точная формулировка PHP ManualThe radius of the circle |
float $alpha | Угол в градусах; знак и направление задаются системой координат PostScript. Точная формулировка PHP ManualThe start angle given in degrees. |
float $beta | Угол в градусах; знак и направление задаются системой координат PostScript. Точная формулировка PHP ManualThe end angle given in degrees. |
Возврат. Тип bool. Официальный текст: Return Values Returns true on success.
Где увидеть в целой задаче. цельный жизненный цикл печатного бланка. Что знать до примера: переменные, вызов функций и возврат, исключения и обработка отказа, файлы и каталоги.
<?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=<положительное число>.
<?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 ManualResource identifier of the postscript file as returned by ps_new . |
float $x | Координата X в пунктах PostScript; начало системы координат по умолчанию находится слева снизу. Точная формулировка PHP ManualThe x-coordinate of the circle's middle point. |
float $y | Координата Y в пунктах PostScript; значение растёт снизу вверх до преобразования системы координат. Точная формулировка PHP ManualThe y-coordinate of the circle's middle point. |
float $radius | Размер/шаг в единицах текущей операции; для геометрии PostScript обычно используются пункты. Точная формулировка PHP ManualThe radius of the circle |
float $alpha | Угол в градусах; знак и направление задаются системой координат PostScript. Точная формулировка PHP ManualThe starting angle given in degrees. |
float $beta | Угол в градусах; знак и направление задаются системой координат PostScript. Точная формулировка PHP ManualThe end angle given in degrees. |
Возврат. Тип bool. Официальный текст: Return Values Returns true on success.
Где увидеть в целой задаче. цельный жизненный цикл печатного бланка. Что знать до примера: переменные, вызов функций и возврат, исключения и обработка отказа, файлы и каталоги.
<?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=<положительное число>.
<?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 ManualResource identifier of the postscript file as returned by ps_new . |
float $width | Размер/шаг в единицах текущей операции; для геометрии PostScript обычно используются пункты. Точная формулировка PHP ManualThe width of the page in pixel, e.g. 596 for A4 format. |
float $height | Размер/шаг в единицах текущей операции; для геометрии PostScript обычно используются пункты. Точная формулировка PHP ManualThe height of the page in pixel, e.g. 842 for A4 format. |
Возврат. Тип bool. Официальный текст: Return Values Returns true on success.
Где увидеть в целой задаче. цельный жизненный цикл печатного бланка. Что знать до примера: переменные, вызов функций и возврат, исключения и обработка отказа, файлы и каталоги.
<?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
<?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 ManualResource identifier of the postscript file as returned by ps_new . |
float $width | Размер/шаг в единицах текущей операции; для геометрии PostScript обычно используются пункты. Точная формулировка PHP ManualThe width of the pattern in pixel. |
float $height | Размер/шаг в единицах текущей операции; для геометрии PostScript обычно используются пункты. Точная формулировка PHP ManualThe height of the pattern in pixel. |
float $xstep | Размер/шаг в единицах текущей операции; для геометрии PostScript обычно используются пункты. Точная формулировка PHP ManualThe distance in pixel of placements of the pattern in horizontal direction. |
float $ystep | Размер/шаг в единицах текущей операции; для геометрии PostScript обычно используются пункты. Точная формулировка PHP ManualThe distance in pixel of placements of the pattern in vertical direction. |
int $painttype | Режим окрашивания PostScript-узора согласно pslib. Точная формулировка PHP ManualMust be 1 or 2. |
Возврат. Тип int|false. Официальный текст: Return Values The identifier of the pattern [return.falseforfailure].
Где увидеть в целой задаче. цельный жизненный цикл печатного бланка. Что знать до примера: переменные, вызов функций и возврат, исключения и обработка отказа, файлы и каталоги.
<?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=<положительное число>.
<?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 ManualResource identifier of the postscript file as returned by ps_new . |
float $width | Размер/шаг в единицах текущей операции; для геометрии PostScript обычно используются пункты. Точная формулировка PHP ManualThe width of the template in pixel. |
float $height | Размер/шаг в единицах текущей операции; для геометрии PostScript обычно используются пункты. Точная формулировка PHP ManualThe height of the template in pixel. |
Возврат. Тип int. Официальный текст: Return Values Returns true on success.
Где увидеть в целой задаче. цельный жизненный цикл печатного бланка. Что знать до примера: переменные, вызов функций и возврат, исключения и обработка отказа, файлы и каталоги.
<?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=<положительное число>.
<?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 ManualResource identifier of the postscript file as returned by ps_new . |
float $x | Координата X в пунктах PostScript; начало системы координат по умолчанию находится слева снизу. Точная формулировка PHP ManualThe x-coordinate of the circle's middle point. |
float $y | Координата Y в пунктах PostScript; значение растёт снизу вверх до преобразования системы координат. Точная формулировка PHP ManualThe y-coordinate of the circle's middle point. |
float $radius | Размер/шаг в единицах текущей операции; для геометрии PostScript обычно используются пункты. Точная формулировка PHP ManualThe radius of the circle |
Возврат. Тип bool. Официальный текст: Return Values Returns true on success.
Где увидеть в целой задаче. цельный жизненный цикл печатного бланка. Что знать до примера: переменные, вызов функций и возврат, исключения и обработка отказа, файлы и каталоги.
<?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=<положительное число>.
<?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_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 ManualResource identifier of the postscript file as returned by ps_new . |
Возврат. Тип bool. Официальный текст: Return Values Returns true on success.
Где увидеть в целой задаче. цельный жизненный цикл печатного бланка. Что знать до примера: переменные, вызов функций и возврат, исключения и обработка отказа, файлы и каталоги.
<?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=<положительное число>.
<?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 ManualResource identifier of the postscript file as returned by ps_new . |
Возврат. Тип bool. Официальный текст: Return Values Returns true on success.
Где увидеть в целой задаче. цельный жизненный цикл печатного бланка. Что знать до примера: переменные, вызов функций и возврат, исключения и обработка отказа, файлы и каталоги.
<?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
<?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 ManualResource identifier of the postscript file as returned by ps_new . |
int $imageid | Положительный идентификатор изображения, возвращённый одной из ps_open_image*(). Точная формулировка PHP ManualResource 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].
Где увидеть в целой задаче. цельный жизненный цикл печатного бланка. Что знать до примера: переменные, вызов функций и возврат, исключения и обработка отказа, файлы и каталоги.
<?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=<положительное число>.
<?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 ManualResource identifier of the postscript file as returned by ps_new . |
Возврат. Тип bool. Официальный текст: Return Values Returns true on success.
Где увидеть в целой задаче. цельный жизненный цикл печатного бланка. Что знать до примера: переменные, вызов функций и возврат, исключения и обработка отказа, файлы и каталоги.
<?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=<положительное число>.
<?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 ManualResource identifier of the postscript file as returned by ps_new . |
Возврат. Тип bool. Официальный текст: Return Values Returns true on success.
Где увидеть в целой задаче. цельный жизненный цикл печатного бланка. Что знать до примера: переменные, вызов функций и возврат, исключения и обработка отказа, файлы и каталоги.
<?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=<положительное число>.
<?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 ManualResource identifier of the postscript file as returned by ps_new . |
string $text | Текст, который попадёт в документ или будет измерен. Точная формулировка PHP ManualThe text to output. |
Возврат. Тип bool. Официальный текст: Return Values Returns true on success.
Где увидеть в целой задаче. цельный жизненный цикл печатного бланка. Что знать до примера: переменные, вызов функций и возврат, исключения и обработка отказа, файлы и каталоги.
<?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=<положительное число>.
<?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 ManualResource identifier of the postscript file as returned by ps_new . |
float $x1 | Координата X в пунктах PostScript; начало системы координат по умолчанию находится слева снизу. Точная формулировка PHP Manualx-coordinate of first control point. |
float $y1 | Координата Y в пунктах PostScript; значение растёт снизу вверх до преобразования системы координат. Точная формулировка PHP Manualy-coordinate of first control point. |
float $x2 | Координата X в пунктах PostScript; начало системы координат по умолчанию находится слева снизу. Точная формулировка PHP Manualx-coordinate of second control point. |
float $y2 | Координата Y в пунктах PostScript; значение растёт снизу вверх до преобразования системы координат. Точная формулировка PHP Manualy-coordinate of second control point. |
float $x3 | Координата X в пунктах PostScript; начало системы координат по умолчанию находится слева снизу. Точная формулировка PHP Manualx-coordinate of third control point. |
float $y3 | Координата Y в пунктах PostScript; значение растёт снизу вверх до преобразования системы координат. Точная формулировка PHP Manualy-coordinate of third control point. |
Возврат. Тип bool. Официальный текст: Return Values Returns true on success.
Где увидеть в целой задаче. цельный жизненный цикл печатного бланка. Что знать до примера: переменные, вызов функций и возврат, исключения и обработка отказа, файлы и каталоги.
<?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=<положительное число>.
<?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 ManualResource identifier of the postscript file as returned by ps_new . |
Возврат. Тип bool. Официальный текст: Return Values Returns true on success.
Где увидеть в целой задаче. цельный жизненный цикл печатного бланка. Что знать до примера: переменные, вызов функций и возврат, исключения и обработка отказа, файлы и каталоги.
<?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
<?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 ManualResource identifier of the postscript file as returned by ps_new . |
Возврат. Тип bool. Официальный текст: Return Values Returns true on success.
Где увидеть в целой задаче. цельный жизненный цикл печатного бланка. Что знать до примера: переменные, вызов функций и возврат, исключения и обработка отказа, файлы и каталоги.
<?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
<?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 ManualResource identifier of the postscript file as returned by ps_new . |
Возврат. Тип bool. Официальный текст: Return Values Returns true on success.
Где увидеть в целой задаче. цельный жизненный цикл печатного бланка. Что знать до примера: переменные, вызов функций и возврат, исключения и обработка отказа, файлы и каталоги.
<?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=<положительное число>.
<?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 ManualResource identifier of the postscript file as returned by ps_new . |
Возврат. Тип bool. Официальный текст: Return Values Returns true on success.
Где увидеть в целой задаче. цельный жизненный цикл печатного бланка. Что знать до примера: переменные, вызов функций и возврат, исключения и обработка отказа, файлы и каталоги.
<?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=<положительное число>.
<?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 ManualResource identifier of the postscript file as returned by ps_new . |
Возврат. Тип bool. Официальный текст: Return Values Returns true on success.
Где увидеть в целой задаче. цельный жизненный цикл печатного бланка. Что знать до примера: переменные, вызов функций и возврат, исключения и обработка отказа, файлы и каталоги.
<?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=<положительное число>.
<?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 ManualResource identifier of the postscript file as returned by ps_new . |
Возврат. Тип bool. Официальный текст: Return Values Returns true on success.
Где увидеть в целой задаче. цельный жизненный цикл печатного бланка. Что знать до примера: переменные, вызов функций и возврат, исключения и обработка отказа, файлы и каталоги.
<?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=<положительное число>.
<?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_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 ManualResource identifier of the postscript file as returned by ps_new . |
string $fontname | Имя доступного PostScript-шрифта, например Helvetica; это не произвольный CSS font-family. Точная формулировка PHP ManualThe name of the font. |
string $encoding | Имя кодировки, которую понимает конкретное расширение и связанная нативная библиотека. Точная формулировка PHP Manualps_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 ManualIf 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.
Где увидеть в целой задаче. цельный жизненный цикл печатного бланка. Что знать до примера: переменные, вызов функций и возврат, исключения и обработка отказа, файлы и каталоги.
<?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=<положительное число>.
<?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 ManualResource identifier of the postscript file as returned by ps_new . |
Возврат. Тип string. Официальная страница не содержит отдельного абзаца о возврате; ориентируйтесь на сигнатуру, предупреждения и реальный артефакт.
Где увидеть в целой задаче. диагностику пустого или испорченного документа. Что знать до примера: переменные, вызов функций и возврат, исключения и обработка отказа, файлы и каталоги.
<?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) ""
<?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 ManualResource identifier of the postscript file as returned by ps_new . |
string $name | Имя параметра, макроса, цвета или другого объекта по договору выбранной функции. Точная формулировка PHP ManualName of the parameter. |
float $modifier = значение по умолчанию | Дополнительный числовой модификатор параметра pslib; значение зависит от имени параметра. Точная формулировка PHP ManualAn 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].
Где увидеть в целой задаче. цельный жизненный цикл печатного бланка. Что знать до примера: переменные, вызов функций и возврат, исключения и обработка отказа, файлы и каталоги.
<?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=<положительное число>.
<?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 ManualResource identifier of the postscript file as returned by ps_new . |
string $name | Имя параметра, макроса, цвета или другого объекта по договору выбранной функции. Точная формулировка PHP ManualName of the value. |
float $modifier = значение по умолчанию | Дополнительный числовой модификатор параметра pslib; значение зависит от имени параметра. Точная формулировка PHP ManualThe 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.
Где увидеть в целой задаче. цельный жизненный цикл печатного бланка. Что знать до примера: переменные, вызов функций и возврат, исключения и обработка отказа, файлы и каталоги.
<?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=<положительное число>.
<?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 ManualResource identifier of the postscript file as returned by ps_new . |
string $text | Текст, который попадёт в документ или будет измерен. Точная формулировка PHP Manualtext 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].
Где увидеть в целой задаче. цельный жизненный цикл печатного бланка. Что знать до примера: переменные, вызов функций и возврат, исключения и обработка отказа, файлы и каталоги.
<?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=<положительное число>.
<?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 ManualResource identifier of the postscript file as returned by ps_new . |
string $file | Путь к существующему файлу, который включается в текущий PostScript-документ. |
Возврат. Тип bool. Официальный текст: Return Values Returns true on success.
Где увидеть в целой задаче. цельный жизненный цикл печатного бланка. Что знать до примера: переменные, вызов функций и возврат, исключения и обработка отказа, файлы и каталоги.
<?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=<положительное число>.
<?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 ManualResource identifier of the postscript file as returned by ps_new . |
float $x | Координата X в пунктах PostScript; начало системы координат по умолчанию находится слева снизу. Точная формулировка PHP Manualx-coordinate of the end point of the line. |
float $y | Координата Y в пунктах PostScript; значение растёт снизу вверх до преобразования системы координат. Точная формулировка PHP Manualy-coordinate of the end point of the line. |
Возврат. Тип bool. Официальный текст: Return Values Returns true on success.
Где увидеть в целой задаче. цельный жизненный цикл печатного бланка. Что знать до примера: переменные, вызов функций и возврат, исключения и обработка отказа, файлы и каталоги.
<?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=<положительное число>.
<?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 ManualResource identifier of the postscript file as returned by ps_new . |
string $name | Имя параметра, макроса, цвета или другого объекта по договору выбранной функции. Точная формулировка PHP ManualName 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.
Где увидеть в целой задаче. цельный жизненный цикл печатного бланка. Что знать до примера: переменные, вызов функций и возврат, исключения и обработка отказа, файлы и каталоги.
<?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=<положительное число>.
<?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 ManualResource identifier of the postscript file as returned by ps_new . |
float $x | Координата X в пунктах PostScript; начало системы координат по умолчанию находится слева снизу. Точная формулировка PHP Manualx-coordinate of the point to move to. |
float $y | Координата Y в пунктах PostScript; значение растёт снизу вверх до преобразования системы координат. Точная формулировка PHP Manualy-coordinate of the point to move to. |
Возврат. Тип bool. Официальный текст: Return Values Returns true on success.
Где увидеть в целой задаче. цельный жизненный цикл печатного бланка. Что знать до примера: переменные, вызов функций и возврат, исключения и обработка отказа, файлы и каталоги.
<?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=<положительное число>.
<?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.
Где увидеть в целой задаче. цельный жизненный цикл печатного бланка. Что знать до примера: переменные, вызов функций и возврат, исключения и обработка отказа, файлы и каталоги.
<?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
<?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 ManualResource identifier of the postscript file as returned by ps_new . |
string $filename = значение по умолчанию | Путь к локальному файлу. Для пользовательского ввода заранее ограничивают разрешённый каталог. Точная формулировка PHP ManualThe 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.
Где увидеть в целой задаче. цельный жизненный цикл печатного бланка. Что знать до примера: переменные, вызов функций и возврат, исключения и обработка отказа, файлы и каталоги.
<?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
<?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 ManualResource identifier of the postscript file as returned by ps_new . |
string $type | Тип операции: формат изображения, тип цвета или другой документированный вариант. Точная формулировка PHP ManualThe type of the image. Possible values are png , jpeg , or eps . |
string $source | Источник изображения по договору pslib, например file или memory. Точная формулировка PHP ManualNot used. |
string $data | Двумерный массив строк таблицы: внешний массив — строки, внутренний — значения столбцов. Точная формулировка PHP ManualThe image data. |
int $length | Длина бинарного буфера в байтах. Точная формулировка PHP ManualThe length of the image data. |
int $width | Размер/шаг в единицах текущей операции; для геометрии PostScript обычно используются пункты. Точная формулировка PHP ManualThe width of the image. |
int $height | Размер/шаг в единицах текущей операции; для геометрии PostScript обычно используются пункты. Точная формулировка PHP ManualThe height of the image. |
int $components | Описание сырого изображения: число бит на компонент/число цветовых компонентов. Точная формулировка PHP ManualThe number of components for each pixel. This can be 1 (gray scale images), 3 (rgb images), or 4 (cmyk, rgba images). |
int $bpc | Описание сырого изображения: число бит на компонент/число цветовых компонентов. Точная формулировка PHP ManualNumber 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.
Где увидеть в целой задаче. цельный жизненный цикл печатного бланка. Что знать до примера: переменные, вызов функций и возврат, исключения и обработка отказа, файлы и каталоги.
<?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=<положительное число>.
<?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 ManualResource identifier of the postscript file as returned by ps_new . |
string $type | Тип операции: формат изображения, тип цвета или другой документированный вариант. Точная формулировка PHP ManualThe type of the image. Possible values are png , jpeg , or eps . |
string $filename | Путь к локальному файлу. Для пользовательского ввода заранее ограничивают разрешённый каталог. Точная формулировка PHP ManualThe name of the file containing the image data. |
string $stringparam = значение по умолчанию | Дополнительная строка декодера изображения; пустая строка оставляет значение по умолчанию. Точная формулировка PHP ManualNot used. |
int $intparam = 0 | Дополнительный целочисленный параметр декодера изображения; 0 оставляет режим по умолчанию. Точная формулировка PHP ManualNot used. |
Возврат. Тип int. Официальный текст: Return Values Returns identifier of image or zero in case of an error. The identifier is a positive number greater than 0.
Где увидеть в целой задаче. цельный жизненный цикл печатного бланка. Что знать до примера: переменные, вызов функций и возврат, исключения и обработка отказа, файлы и каталоги.
<?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=<положительное число>.
<?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 ManualResource identifier of the postscript file as returned by ps_new . |
int $gd | Идентификатор/ресурс GD-изображения в историческом API ext/ps. |
Возврат. Тип int. Официальная страница не содержит отдельного абзаца о возврате; ориентируйтесь на сигнатуру, предупреждения и реальный артефакт.
Где увидеть в целой задаче. цельный жизненный цикл печатного бланка. Что знать до примера: переменные, вызов функций и возврат, исключения и обработка отказа, файлы и каталоги.
<?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=<положительное число>.
<?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 ManualResource identifier of the postscript file as returned by ps_new . |
int $imageid | Положительный идентификатор изображения, возвращённый одной из ps_open_image*(). Точная формулировка PHP ManualThe resource identifier of the image as returned by ps_open_image or ps_open_image_file . |
float $x | Координата X в пунктах PostScript; начало системы координат по умолчанию находится слева снизу. Точная формулировка PHP Manualx-coordinate of the lower left corner of the image. |
float $y | Координата Y в пунктах PostScript; значение растёт снизу вверх до преобразования системы координат. Точная формулировка PHP Manualy-coordinate of the lower left corner of the image. |
float $scale | Размер/шаг в единицах текущей операции; для геометрии PostScript обычно используются пункты. Точная формулировка PHP ManualThe 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.
Где увидеть в целой задаче. цельный жизненный цикл печатного бланка. Что знать до примера: переменные, вызов функций и возврат, исключения и обработка отказа, файлы и каталоги.
<?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=<положительное число>.
<?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 ManualResource identifier of the postscript file as returned by ps_new . |
float $x | Координата X в пунктах PostScript; начало системы координат по умолчанию находится слева снизу. Точная формулировка PHP Manualx-coordinate of the lower left corner of the rectangle. |
float $y | Координата Y в пунктах PostScript; значение растёт снизу вверх до преобразования системы координат. Точная формулировка PHP Manualy-coordinate of the lower left corner of the rectangle. |
float $width | Размер/шаг в единицах текущей операции; для геометрии PostScript обычно используются пункты. Точная формулировка PHP ManualThe width of the image. |
float $height | Размер/шаг в единицах текущей операции; для геометрии PostScript обычно используются пункты. Точная формулировка PHP ManualThe height of the image. |
Возврат. Тип bool. Официальный текст: Return Values Returns true on success.
Где увидеть в целой задаче. цельный жизненный цикл печатного бланка. Что знать до примера: переменные, вызов функций и возврат, исключения и обработка отказа, файлы и каталоги.
<?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=<положительное число>.
<?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_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 ManualResource identifier of the postscript file as returned by ps_new . |
Возврат. Тип bool. Официальный текст: Return Values Returns true on success.
Где увидеть в целой задаче. цельный жизненный цикл печатного бланка. Что знать до примера: переменные, вызов функций и возврат, исключения и обработка отказа, файлы и каталоги.
<?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=<положительное число>.
<?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 ManualResource identifier of the postscript file as returned by ps_new . |
float $rot | Угол в градусах; знак и направление задаются системой координат PostScript. Точная формулировка PHP ManualAngle of rotation in degree. |
Возврат. Тип bool. Официальный текст: Return Values Returns true on success.
Где увидеть в целой задаче. цельный жизненный цикл печатного бланка. Что знать до примера: переменные, вызов функций и возврат, исключения и обработка отказа, файлы и каталоги.
<?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=<положительное число>.
<?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 ManualResource identifier of the postscript file as returned by ps_new . |
Возврат. Тип bool. Официальный текст: Return Values Returns true on success.
Где увидеть в целой задаче. цельный жизненный цикл печатного бланка. Что знать до примера: переменные, вызов функций и возврат, исключения и обработка отказа, файлы и каталоги.
<?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=<положительное число>.
<?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 ManualResource identifier of the postscript file as returned by ps_new . |
float $x | Координата X в пунктах PostScript; начало системы координат по умолчанию находится слева снизу. Точная формулировка PHP ManualScaling factor in horizontal direction. |
float $y | Координата Y в пунктах PostScript; значение растёт снизу вверх до преобразования системы координат. Точная формулировка PHP ManualScaling factor in vertical direction. |
Возврат. Тип bool. Официальный текст: Return Values Returns true on success.
Где увидеть в целой задаче. цельный жизненный цикл печатного бланка. Что знать до примера: переменные, вызов функций и возврат, исключения и обработка отказа, файлы и каталоги.
<?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=<положительное число>.
<?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 ManualResource identifier of the postscript file as returned by ps_new . |
float $red | Компонента цвета или длина штриха по смыслу функции; допустимый диапазон проверяйте до вызова. Точная формулировка PHP ManualThe red component of the border color. |
float $green | Компонента цвета или длина штриха по смыслу функции; допустимый диапазон проверяйте до вызова. Точная формулировка PHP ManualThe green component of the border color. |
float $blue | Компонента цвета или длина штриха по смыслу функции; допустимый диапазон проверяйте до вызова. Точная формулировка PHP ManualThe blue component of the border color. |
Возврат. Тип bool. Официальный текст: Return Values Returns true on success.
Где увидеть в целой задаче. цельный жизненный цикл печатного бланка. Что знать до примера: переменные, вызов функций и возврат, исключения и обработка отказа, файлы и каталоги.
<?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=<положительное число>.
<?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 ManualResource identifier of the postscript file as returned by ps_new . |
float $black | Компонента цвета или длина штриха по смыслу функции; допустимый диапазон проверяйте до вызова. Точная формулировка PHP ManualThe length of the dash. |
float $white | Компонента цвета или длина штриха по смыслу функции; допустимый диапазон проверяйте до вызова. Точная формулировка PHP ManualThe length of the gap between dashes. |
Возврат. Тип bool. Официальный текст: Return Values Returns true on success.
Где увидеть в целой задаче. цельный жизненный цикл печатного бланка. Что знать до примера: переменные, вызов функций и возврат, исключения и обработка отказа, файлы и каталоги.
<?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=<положительное число>.
<?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 ManualResource identifier of the postscript file as returned by ps_new . |
string $style | Именованный стиль/константа именно той функции, куда он передаётся. Точная формулировка PHP Manualstyle can be solid or dashed . |
float $width | Размер/шаг в единицах текущей операции; для геометрии PostScript обычно используются пункты. Точная формулировка PHP ManualThe line width of the border. |
Возврат. Тип bool. Официальный текст: Return Values Returns true on success.
Где увидеть в целой задаче. цельный жизненный цикл печатного бланка. Что знать до примера: переменные, вызов функций и возврат, исключения и обработка отказа, файлы и каталоги.
<?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=<положительное число>.
<?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 ManualResource identifier of the postscript file as returned by ps_new . |
string $key | Ключ метаданных PostScript, например Title, Creator или Author. Точная формулировка PHP ManualThe 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 ManualThe 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.
Где увидеть в целой задаче. цельный жизненный цикл печатного бланка. Что знать до примера: переменные, вызов функций и возврат, исключения и обработка отказа, файлы и каталоги.
<?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=<положительное число>.
<?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 ManualResource identifier of the postscript file as returned by ps_new . |
string $name | Имя параметра, макроса, цвета или другого объекта по договору выбранной функции. Точная формулировка PHP ManualFor a list of possible names see ps_get_parameter . |
string $value | Новое значение по смыслу текущей операции. Точная формулировка PHP ManualThe value of the parameter. |
Возврат. Тип bool. Официальный текст: Return Values Returns true on success.
Где увидеть в целой задаче. цельный жизненный цикл печатного бланка. Что знать до примера: переменные, вызов функций и возврат, исключения и обработка отказа, файлы и каталоги.
<?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=<положительное число>.
<?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 ManualResource identifier of the postscript file as returned by ps_new . |
float $x | Координата X в пунктах PostScript; начало системы координат по умолчанию находится слева снизу. Точная формулировка PHP Manualx-coordinate of the new text position. |
float $y | Координата Y в пунктах PostScript; значение растёт снизу вверх до преобразования системы координат. Точная формулировка PHP Manualy-coordinate of the new text position. |
Возврат. Тип bool. Официальный текст: Return Values Returns true on success.
Где увидеть в целой задаче. цельный жизненный цикл печатного бланка. Что знать до примера: переменные, вызов функций и возврат, исключения и обработка отказа, файлы и каталоги.
<?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=<положительное число>.
<?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 ManualResource identifier of the postscript file as returned by ps_new . |
string $name | Имя параметра, макроса, цвета или другого объекта по договору выбранной функции. Точная формулировка PHP ManualThe 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 ManualThe value of the parameter. |
Возврат. Тип bool. Официальный текст: Return Values Returns true on success.
Где увидеть в целой задаче. цельный жизненный цикл печатного бланка. Что знать до примера: переменные, вызов функций и возврат, исключения и обработка отказа, файлы и каталоги.
<?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=<положительное число>.
<?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 ManualResource identifier of the postscript file as returned by ps_new . |
string $type | Тип операции: формат изображения, тип цвета или другой документированный вариант. Точная формулировка PHP ManualThe parameter type can be both , fill , or fillstroke . |
string $colorspace | Параметр $colorspace типа string именно для операции ps_setcolor. Точная формулировка PHP ManualThe 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 ManualDepending 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 ManualDepending on the colorspace this is either the green component (rgb), the magenta component (cmyk). |
float $c3 | Компонента цвета или длина штриха по смыслу функции; допустимый диапазон проверяйте до вызова. Точная формулировка PHP ManualDepending on the colorspace this is either the blue component (rgb), the yellow component (cmyk). |
float $c4 | Компонента цвета или длина штриха по смыслу функции; допустимый диапазон проверяйте до вызова. Точная формулировка PHP ManualThis must only be set in cmyk colorspace and specifies the black component. |
Возврат. Тип bool. Официальный текст: Return Values Returns true on success.
Где увидеть в целой задаче. цельный жизненный цикл печатного бланка. Что знать до примера: переменные, вызов функций и возврат, исключения и обработка отказа, файлы и каталоги.
<?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=<положительное число>.
<?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 ManualResource identifier of the postscript file as returned by ps_new . |
float $on | Длины видимых и пустых частей штриховой линии; официальный ps_setpolydash пример передаёт массив, несмотря на ошибочный float в старой XML-сигнатуре. Точная формулировка PHP ManualThe length of the dash. |
float $off | Длины видимых и пустых частей штриховой линии; официальный ps_setpolydash пример передаёт массив, несмотря на ошибочный float в старой XML-сигнатуре. Точная формулировка PHP ManualThe length of the gap between dashes. |
Возврат. Тип bool. Официальный текст: Return Values Returns true on success.
Где увидеть в целой задаче. цельный жизненный цикл печатного бланка. Что знать до примера: переменные, вызов функций и возврат, исключения и обработка отказа, файлы и каталоги.
<?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=<положительное число>.
<?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 ManualResource identifier of the postscript file as returned by ps_new . |
float $value | Новое значение по смыслу текущей операции. Точная формулировка PHP ManualThe value must be between 0.2 and 1. |
Возврат. Тип bool. Официальный текст: Return Values Returns true on success.
Где увидеть в целой задаче. цельный жизненный цикл печатного бланка. Что знать до примера: переменные, вызов функций и возврат, исключения и обработка отказа, файлы и каталоги.
<?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=<положительное число>.
<?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 ManualResource identifier of the postscript file as returned by ps_new . |
int $fontid | Положительный идентификатор шрифта, ранее возвращённый ps_findfont(). Точная формулировка PHP ManualThe font identifier as returned by ps_findfont . |
float $size | Размер/шаг в единицах текущей операции; для геометрии PostScript обычно используются пункты. Точная формулировка PHP ManualThe size of the font. |
Возврат. Тип bool. Официальный текст: Return Values Returns true on success.
Где увидеть в целой задаче. цельный жизненный цикл печатного бланка. Что знать до примера: переменные, вызов функций и возврат, исключения и обработка отказа, файлы и каталоги.
<?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=<положительное число>.
<?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 ManualResource identifier of the postscript file as returned by ps_new . |
float $gray | Компонента цвета или длина штриха по смыслу функции; допустимый диапазон проверяйте до вызова. Точная формулировка PHP ManualThe value must be between 0 (white) and 1 (black). |
Возврат. Тип bool. Официальный текст: Return Values Returns true on success.
Где увидеть в целой задаче. цельный жизненный цикл печатного бланка. Что знать до примера: переменные, вызов функций и возврат, исключения и обработка отказа, файлы и каталоги.
<?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=<положительное число>.
<?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 ManualResource identifier of the postscript file as returned by ps_new . |
int $type | Тип операции: формат изображения, тип цвета или другой документированный вариант. Точная формулировка PHP ManualThe type of line ends. Possible values are PS_LINECAP_BUTT , PS_LINECAP_ROUND , or PS_LINECAP_SQUARED . |
Возврат. Тип bool. Официальный текст: Return Values Returns true on success.
Где увидеть в целой задаче. цельный жизненный цикл печатного бланка. Что знать до примера: переменные, вызов функций и возврат, исключения и обработка отказа, файлы и каталоги.
<?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=<положительное число>.
<?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 ManualResource identifier of the postscript file as returned by ps_new . |
int $type | Тип операции: формат изображения, тип цвета или другой документированный вариант. Точная формулировка PHP ManualThe way lines are joined. Possible values are PS_LINEJOIN_MITER , PS_LINEJOIN_ROUND , or PS_LINEJOIN_BEVEL . |
Возврат. Тип bool. Официальный текст: Return Values Returns true on success.
Где увидеть в целой задаче. цельный жизненный цикл печатного бланка. Что знать до примера: переменные, вызов функций и возврат, исключения и обработка отказа, файлы и каталоги.
<?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=<положительное число>.
<?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 ManualResource identifier of the postscript file as returned by ps_new . |
float $width | Размер/шаг в единицах текущей операции; для геометрии PostScript обычно используются пункты. Точная формулировка PHP ManualThe width of lines in points. |
Возврат. Тип bool. Официальный текст: Return Values Returns true on success.
Где увидеть в целой задаче. цельный жизненный цикл печатного бланка. Что знать до примера: переменные, вызов функций и возврат, исключения и обработка отказа, файлы и каталоги.
<?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=<положительное число>.
<?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 ManualResource identifier of the postscript file as returned by ps_new . |
float $value | Новое значение по смыслу текущей операции. Точная формулировка PHP ManualThe 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.
Где увидеть в целой задаче. цельный жизненный цикл печатного бланка. Что знать до примера: переменные, вызов функций и возврат, исключения и обработка отказа, файлы и каталоги.
<?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=<положительное число>.
<?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 ManualResource identifier of the postscript file as returned by ps_new . |
int $mode | Документированный числовой режим текущей операции; случайные числа не взаимозаменяемы. |
Возврат. Тип bool. Официальный текст: Return Values Returns true on success.
Где увидеть в целой задаче. цельный жизненный цикл печатного бланка. Что знать до примера: переменные, вызов функций и возврат, исключения и обработка отказа, файлы и каталоги.
<?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=<положительное число>.
<?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 ManualResource identifier of the postscript file as returned by ps_new . |
float $arr | Длины видимых и пустых частей штриховой линии; официальный ps_setpolydash пример передаёт массив, несмотря на ошибочный float в старой XML-сигнатуре. Точная формулировка PHP Manualarr is a list of length elements alternately for the black and white portion. |
Возврат. Тип bool. Официальный текст: Return Values Returns true on success.
Где увидеть в целой задаче. цельный жизненный цикл печатного бланка. Что знать до примера: переменные, вызов функций и возврат, исключения и обработка отказа, файлы и каталоги.
<?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=<положительное число>.
<?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 ManualResource identifier of the postscript file as returned by ps_new . |
string $type | Тип операции: формат изображения, тип цвета или другой документированный вариант. Точная формулировка PHP ManualThe 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 ManualIf 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].
Где увидеть в целой задаче. цельный жизненный цикл печатного бланка. Что знать до примера: переменные, вызов функций и возврат, исключения и обработка отказа, файлы и каталоги.
<?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=<положительное число>.
<?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 ManualResource identifier of the postscript file as returned by ps_new . |
int $shadingid | Положительный идентификатор градиента, ранее возвращённый ps_shading(). Точная формулировка PHP ManualThe identifier of a shading previously created with ps_shading . |
string $optlist | Строка опций pslib в синтаксисе этой библиотеки; пустая строка использует значения по умолчанию. Точная формулировка PHP ManualThis argument is not currently used. |
Возврат. Тип int|false. Официальный текст: Return Values The identifier of the pattern [return.falseforfailure].
Где увидеть в целой задаче. цельный жизненный цикл печатного бланка. Что знать до примера: переменные, вызов функций и возврат, исключения и обработка отказа, файлы и каталоги.
<?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=<положительное число>.
<?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 ManualResource identifier of the postscript file as returned by ps_new . |
int $shadingid | Положительный идентификатор градиента, ранее возвращённый ps_shading(). Точная формулировка PHP ManualThe identifier of a shading previously created with ps_shading . |
Возврат. Тип bool. Официальный текст: Return Values Returns true on success.
Где увидеть в целой задаче. цельный жизненный цикл печатного бланка. Что знать до примера: переменные, вызов функций и возврат, исключения и обработка отказа, файлы и каталоги.
<?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=<положительное число>.
<?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 ManualResource identifier of the postscript file as returned by ps_new . |
string $text | Текст, который попадёт в документ или будет измерен. Точная формулировка PHP ManualThe text to be output. |
Возврат. Тип bool. Официальный текст: Return Values Returns true on success.
Где увидеть в целой задаче. цельный жизненный цикл печатного бланка. Что знать до примера: переменные, вызов функций и возврат, исключения и обработка отказа, файлы и каталоги.
<?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=<положительное число>.
<?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 ManualResource identifier of the postscript file as returned by ps_new . |
string $text | Текст, который попадёт в документ или будет измерен. Точная формулировка PHP ManualThe text to be output into the given box. |
float $left | Координата X в пунктах PostScript; начало системы координат по умолчанию находится слева снизу. Точная формулировка PHP Manualx-coordinate of the lower left corner of the box. |
float $bottom | Координата Y в пунктах PostScript; значение растёт снизу вверх до преобразования системы координат. Точная формулировка PHP Manualy-coordinate of the lower left corner of the box. |
float $width | Размер/шаг в единицах текущей операции; для геометрии PostScript обычно используются пункты. Точная формулировка PHP ManualWidth of the box. |
float $height | Размер/шаг в единицах текущей операции; для геометрии PostScript обычно используются пункты. Точная формулировка PHP ManualHeight of the box. |
string $hmode | Режим горизонтального размещения boxed-текста, например left или justify. Точная формулировка PHP ManualThe 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.
Где увидеть в целой задаче. цельный жизненный цикл печатного бланка. Что знать до примера: переменные, вызов функций и возврат, исключения и обработка отказа, файлы и каталоги.
<?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=<положительное число>.
<?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 ManualResource identifier of the postscript file as returned by ps_new . |
string $text | Текст, который попадёт в документ или будет измерен. Точная формулировка PHP ManualThe text to be output. |
float $x | Координата X в пунктах PostScript; начало системы координат по умолчанию находится слева снизу. Точная формулировка PHP Manualx-coordinate of the lower left corner of the box surrounding the text. |
float $y | Координата Y в пунктах PostScript; значение растёт снизу вверх до преобразования системы координат. Точная формулировка PHP Manualy-coordinate of the lower left corner of the box surrounding the text. |
Возврат. Тип bool. Официальный текст: Return Values Returns true on success.
Где увидеть в целой задаче. цельный жизненный цикл печатного бланка. Что знать до примера: переменные, вызов функций и возврат, исключения и обработка отказа, файлы и каталоги.
<?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=<положительное число>.
<?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.
Где увидеть в целой задаче. цельный жизненный цикл печатного бланка. Что знать до примера: переменные, вызов функций и возврат, исключения и обработка отказа, файлы и каталоги.
<?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=<положительное число>.
<?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 ManualResource identifier of the postscript file as returned by ps_new . |
string $text | Текст, который попадёт в документ или будет измерен. Точная формулировка PHP ManualThe text to be output. |
int $len | Число байтов текста, которое функция должна обработать; не смешивайте с количеством Unicode-символов. Точная формулировка PHP ManualThe maximum number of characters to print. |
Возврат. Тип bool. Официальный текст: Return Values Returns true on success.
Где увидеть в целой задаче. цельный жизненный цикл печатного бланка. Что знать до примера: переменные, вызов функций и возврат, исключения и обработка отказа, файлы и каталоги.
<?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=<положительное число>.
<?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 ManualResource identifier of the postscript file as returned by ps_new . |
string $text | Текст, который попадёт в документ или будет измерен. Точная формулировка PHP ManualThe text for which the geometry is to be calculated. |
int $fontid = 0 | Положительный идентификатор шрифта, ранее возвращённый ps_findfont(). Точная формулировка PHP ManualThe identifier of the font to be used. If not font is specified the current font will be used. |
float $size = 0.0 | Размер/шаг в единицах текущей операции; для геометрии PostScript обычно используются пункты. Точная формулировка PHP ManualThe 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.
Где увидеть в целой задаче. цельный жизненный цикл печатного бланка. Что знать до примера: переменные, вызов функций и возврат, исключения и обработка отказа, файлы и каталоги.
<?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=<положительное число>.
<?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 ManualResource identifier of the postscript file as returned by ps_new . |
string $text | Текст, который попадёт в документ или будет измерен. Точная формулировка PHP ManualThe text for which the width is to be calculated. |
int $fontid = 0 | Положительный идентификатор шрифта, ранее возвращённый ps_findfont(). Точная формулировка PHP ManualThe identifier of the font to be used. If not font is specified the current font will be used. |
float $size = 0.0 | Размер/шаг в единицах текущей операции; для геометрии PostScript обычно используются пункты. Точная формулировка PHP ManualThe size of the font. If no size is specified the current size is used. |
Возврат. Тип float. Официальный текст: Return Values Width of a string in points.
Где увидеть в целой задаче. цельный жизненный цикл печатного бланка. Что знать до примера: переменные, вызов функций и возврат, исключения и обработка отказа, файлы и каталоги.
<?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=<положительное число>.
<?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 ManualResource identifier of the postscript file as returned by ps_new . |
Возврат. Тип bool. Официальный текст: Return Values Returns true on success.
Где увидеть в целой задаче. цельный жизненный цикл печатного бланка. Что знать до примера: переменные, вызов функций и возврат, исключения и обработка отказа, файлы и каталоги.
<?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=<положительное число>.
<?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 ManualResource identifier of the postscript file as returned by ps_new . |
int $ord | Код glyph/символа в выбранном шрифте. Точная формулировка PHP ManualThe position of the glyph in the font encoding vector. |
Возврат. Тип bool. Официальный текст: Return Values Returns true on success.
Где увидеть в целой задаче. цельный жизненный цикл печатного бланка. Что знать до примера: переменные, вызов функций и возврат, исключения и обработка отказа, файлы и каталоги.
<?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=<положительное число>.
<?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 ManualResource identifier of the postscript file as returned by ps_new . |
int $ord | Код glyph/символа в выбранном шрифте. Точная формулировка PHP ManualThe parameter ord is the position of the glyph in the font encoding vector. |
int $fontid = 0 | Положительный идентификатор шрифта, ранее возвращённый ps_findfont(). Точная формулировка PHP ManualThe 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.
Где увидеть в целой задаче. цельный жизненный цикл печатного бланка. Что знать до примера: переменные, вызов функций и возврат, исключения и обработка отказа, файлы и каталоги.
<?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=<положительное число>.
<?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 ManualResource identifier of the postscript file as returned by ps_new . |
int $ord | Код glyph/символа в выбранном шрифте. Точная формулировка PHP ManualThe position of the glyph in the font encoding vector. |
int $fontid = 0 | Положительный идентификатор шрифта, ранее возвращённый ps_findfont(). Точная формулировка PHP ManualThe identifier of the font to be used. If not font is specified the current font will be used. |
float $size = 0.0 | Размер/шаг в единицах текущей операции; для геометрии PostScript обычно используются пункты. Точная формулировка PHP ManualThe size of the font. If no size is specified the current size is used. |
Возврат. Тип float. Официальный текст: Return Values The width of a glyph in points.
Где увидеть в целой задаче. цельный жизненный цикл печатного бланка. Что знать до примера: переменные, вызов функций и возврат, исключения и обработка отказа, файлы и каталоги.
<?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=<положительное число>.
<?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 ManualResource identifier of the postscript file as returned by ps_new . |
float $x | Координата X в пунктах PostScript; начало системы координат по умолчанию находится слева снизу. Точная формулировка PHP Manualx-coordinate of the origin of the translated coordinate system. |
float $y | Координата Y в пунктах PostScript; значение растёт снизу вверх до преобразования системы координат. Точная формулировка PHP Manualy-coordinate of the origin of the translated coordinate system. |
Возврат. Тип bool. Официальный текст: Return Values Returns true on success.
Где увидеть в целой задаче. цельный жизненный цикл печатного бланка. Что знать до примера: переменные, вызов функций и возврат, исключения и обработка отказа, файлы и каталоги.
<?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=<положительное число>.
<?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.
Источники и обсуждения
Код и руководство с собой
Скачайте самостоятельные примеры с исходными данными, инструкциями и ожидаемыми результатами. Примеры HTTP и фрагменты для проекта помечены отдельно: им нужно указанное окружение.
Код не исполняется на сайте. Скачайте нужный пример и запускайте его в своём локальном окружении.
Материалы сверены 2026-10-12. Примеры и объяснения написаны для этого руководства; источники и обсуждения доступны в каждой главе.


