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

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

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

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

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

FDF и PDF-формы: поля, ответы пользователя и обмен с PDF

От HTML/PDF-поля и FDF-контейнера до чтения ответа, изменения значений, вложений и безопасной выдачи файла.

FDF: что передаётся между PDF-формой и PHP

FDF — Forms Data Format: контейнер данных формы, связанной с PDF. В PDF остаются разметка и поля, а FDF переносит имена полей, значения, статус, действия и ссылку на исходный PDF. По смыслу это похоже на отправку HTML-формы, но формат формы и формат обмена здесь относятся к PDF.

Два направления работы
  1. Пользователь заполняет PDF-форму, а сервер принимает FDF и читает её поля
  2. PHP создаёт FDF, записывает значения и связывает контейнер с существующим PDF-шаблоном
  3. Клиент или отдельный PDF-инструмент применяет данные к форме; FDF сам по себе не является готовым плоским PDF

Официальный маршрут отправки использует MIME-тип application/vnd.fdf. В каталоге FDF ключ /Fields ведёт к полям, /F хранит имя связанного PDF, а /Status — статус документа. Поэтому fdf_set_file(), fdf_set_status() и функции полей изменяют разные части одного контейнера.

Официальная страница: Forms Data Format.

Все предопределённые константы FDF

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

КонстантаКак читать в коде
FDFValueИменованный режим расширения; точный смысл зависит от функции, которая принимает эту константу.
FDFStatusИменованный режим расширения; точный смысл зависит от функции, которая принимает эту константу.
FDFFileИменованный режим расширения; точный смысл зависит от функции, которая принимает эту константу.
FDFIDИменованный режим расширения; точный смысл зависит от функции, которая принимает эту константу.
FDFFfИменованный режим расширения; точный смысл зависит от функции, которая принимает эту константу.
FDFSetFfИменованный режим расширения; точный смысл зависит от функции, которая принимает эту константу.
FDFClearFfИменованный режим расширения; точный смысл зависит от функции, которая принимает эту константу.
FDFFlagsИменованный режим расширения; точный смысл зависит от функции, которая принимает эту константу.
FDFSetFИменованный режим расширения; точный смысл зависит от функции, которая принимает эту константу.
FDFClrFИменованный режим расширения; точный смысл зависит от функции, которая принимает эту константу.
FDFAPИменованный режим расширения; точный смысл зависит от функции, которая принимает эту константу.
FDFASИменованный режим расширения; точный смысл зависит от функции, которая принимает эту константу.
FDFActionИменованный режим расширения; точный смысл зависит от функции, которая принимает эту константу.
FDFAAИменованный режим расширения; точный смысл зависит от функции, которая принимает эту константу.
FDFAPRefИменованный режим расширения; точный смысл зависит от функции, которая принимает эту константу.
FDFIFИменованный режим расширения; точный смысл зависит от функции, которая принимает эту константу.
FDFEnterИменованный режим расширения; точный смысл зависит от функции, которая принимает эту константу.
FDFExitИменованный режим расширения; точный смысл зависит от функции, которая принимает эту константу.
FDFDownИменованный режим расширения; точный смысл зависит от функции, которая принимает эту константу.
FDFUpИменованный режим расширения; точный смысл зависит от функции, которая принимает эту константу.
FDFFormatИменованный режим расширения; точный смысл зависит от функции, которая принимает эту константу.
FDFValidateИменованный режим расширения; точный смысл зависит от функции, которая принимает эту константу.
FDFKeystrokeИменованный режим расширения; точный смысл зависит от функции, которая принимает эту константу.
FDFCalculateИменованный режим расширения; точный смысл зависит от функции, которая принимает эту константу.
FDFNormalAPИменованный режим расширения; точный смысл зависит от функции, которая принимает эту константу.
FDFRolloverAPИменованный режим расширения; точный смысл зависит от функции, которая принимает эту константу.
FDFDownAPИменованный режим расширения; точный смысл зависит от функции, которая принимает эту константу.

Всего в зафиксированном официальном исходнике: 27. В рабочем окружении наличие конкретного имени можно проверить через defined().

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

Официальный пример: прочитать отправленную PDF-форму

Базовый официальный сценарий открывает входящий FDF, читает поля volume, date и comment, затем условно показывает publisher и preparer, если соответствующие переключатели имеют значение On.

Исходный пример PHP Manual, сохранённый дословно
<?php
// Open fdf from input string provided by the extension
// The pdf form contained several input text fields with the names
// volume, date, comment, publisher, preparer, and two checkboxes
// show_publisher and show_preparer.
$fdf = fdf_open_string($HTTP_FDF_DATA);
$volume = fdf_get_value($fdf, "volume");
echo "The volume field has the value '<b>$volume</b>'<br />";

$date = fdf_get_value($fdf, "date");
echo "The date field has the value '<b>$date</b>'<br />";

$comment = fdf_get_value($fdf, "comment");
echo "The comment field has the value '<b>$comment</b>'<br />";

if (fdf_get_value($fdf, "show_publisher") == "On") {
  $publisher = fdf_get_value($fdf, "publisher");
  echo "The publisher field has the value '<b>$publisher</b>'<br />";
} else
  echo "Publisher shall not be shown.<br />";

if (fdf_get_value($fdf, "show_preparer") == "On") {
  $preparer = fdf_get_value($fdf, "preparer");
  echo "The preparer field has the value '<b>$preparer</b>'<br />";
} else
  echo "Preparer shall not be shown.<br />";
fdf_close($fdf);
?>

В прикладном коде к нему добавляют четыре шага: проверяют, что вход не пуст; ограничивают разрешённые имена полей; валидируют значения по схеме; закрывают ресурс при любом исходе. Полный рабочий round-trip приведён выше в маршруте этой главы.

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

Установка ext/fdf и нативной библиотеки

Расширение больше не входит в PHP и устанавливается отдельно. При сборке компилятор должен видеть fdftk.h и библиотеку FDF Toolkit; официальный текст допускает структуру SDK либо обычные каталоги DIR/include и DIR/lib.

После установки проверяют CLI и веб-SAPI отдельно: php -m, extension_loaded('fdf') и короткую страницу диагностики могут обслуживать разные конфигурации php.ini. На Windows официальная страница также упоминает fdftk.dll.

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

Требования FDF Toolkit

Официальная страница требует FDF Toolkit SDK. Для исторических версий PHP начиная с PHP 4.3.0 указан SDK не ниже 5.0. Библиотека распространялась в бинарном виде для ограниченного набора платформ, поэтому доступность расширения на современном сервере проверяют до проектирования решения.

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

Ресурс FDF и его жизненный цикл

Большинство функций принимает первым параметром открытый FDF-ресурс. Его возвращают fdf_create(), fdf_open() или fdf_open_string(). После чтения или сохранения ресурс закрывают через fdf_close().

Жизненный цикл
  1. Создать или открыть
  2. Прочитать или изменить поля
  3. Сохранить строку/файл либо отправить FDF
  4. Закрыть ресурс даже при ошибке следующего шага

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

Подготовка FDF: проверить все слои окружения

СлойПроверка
PHPЗагружено ли fdf в нужном CLI/FPM/Apache SAPI
Нативная библиотекаДоступен ли совместимый FDF Toolkit и его динамические зависимости
ШаблонЭто AcroForm с известными внутренними именами полей, а не несовместимая XFA-форма
ФайлыPHP может читать PDF/FDF и писать во временный каталог
РезультатFDF повторно открывается, а итоговый PDF проверяется независимым просмотрщиком/процессором

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

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

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

ОперацияОфициальное назначение
fdf_add_doc_javascriptAdds javascript code to the FDF document
fdf_add_templateAdds a template into the FDF document
fdf_closeClose an FDF document
fdf_createCreate a new FDF document
fdf_enum_valuesCall a user defined function for each document value
fdf_errnoReturn error code for last fdf operation
fdf_errorReturn error description for FDF error code
fdf_get_apGet the appearance of a field
fdf_get_attachmentExtracts uploaded file embedded in the FDF
fdf_get_encodingGet the value of the /Encoding key
fdf_get_fileGet the value of the /F key
fdf_get_flagsGets the flags of a field
fdf_get_optGets a value from the opt array of a field
fdf_get_statusGet the value of the /STATUS key
fdf_get_valueGet the value of a field
fdf_get_versionGets version number for FDF API or file
fdf_headerSets FDF-specific output headers
fdf_next_field_nameGet the next field name
fdf_openOpen a FDF document
fdf_open_stringRead a FDF document from a string
fdf_remove_itemSets target frame for form
fdf_saveSave a FDF document
fdf_save_stringReturns the FDF document as a string
fdf_set_apSet the appearance of a field
fdf_set_encodingSets FDF character encoding
fdf_set_fileSet PDF document to display FDF data in
fdf_set_flagsSets a flag of a field
fdf_set_javascript_actionSets an javascript action of a field
fdf_set_on_import_javascriptAdds javascript code to be executed when Acrobat opens the FDF
fdf_set_optSets an option of a field
fdf_set_statusSet the value of the /STATUS key
fdf_set_submit_form_actionSets a submit form action of a field
fdf_set_target_frameSet target frame for form display
fdf_set_valueSet the value of a field
fdf_set_versionSets version number for a FDF file

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

Что именно хранит FDF и почему это ещё не готовый PDF

PDF-шаблон хранит внешний вид и имена полей. FDF хранит значения, статусы, действия и ссылки, относящиеся к форме. Поэтому заполненный FDF сам по себе не становится плоским PDF: просмотрщик или отдельный инструмент должен применить данные к совместимой форме.

Путь данных заказа
  1. HTML-форма или база дают order_id, email и город
  2. PHP сопоставляет эти значения с точными именами полей PDF
  3. FDF хранит пары имя → значение и ссылку на шаблон
  4. Совместимый PDF-процессор открывает форму с этими значениями

Первый рабочий маршрут: массив PHP → FDF → контрольное чтение

Создать FDF заказа, сохранить его и прочитать значения обратноПример для указанного окружения
<?php
declare(strict_types=1);

if (!extension_loaded('fdf')) {
    throw new RuntimeException('Нужно расширение FDF и совместимый FDF Toolkit');
}

$fields = [
    'order_id' => '42',
    'customer_email' => 'buyer@example.test',
    'delivery_city' => 'Kolomna',
];

$fdf = fdf_create();
if ($fdf === false) {
    throw new RuntimeException('Не удалось создать FDF-документ');
}

foreach ($fields as $name => $value) {
    if (!fdf_set_value($fdf, $name, $value)) {
        fdf_close($fdf);
        throw new RuntimeException("Не записано поле {$name}");
    }
}

$bytes = fdf_save_string($fdf);
fdf_close($fdf);
if (!is_string($bytes) || $bytes === '') {
    throw new RuntimeException('Расширение не вернуло FDF-данные');
}

$copy = fdf_open_string($bytes);
if ($copy === false) {
    throw new RuntimeException('Сохранённые данные не открылись повторно');
}

echo 'order_id=', fdf_get_value($copy, 'order_id'), PHP_EOL;
echo 'customer_email=', fdf_get_value($copy, 'customer_email'), PHP_EOL;
echo 'artifact=fdf bytes>0', PHP_EOL;
fdf_close($copy);

Проверяется полный круг: обычный массив приложения → поля FDF → строка документа → повторное чтение. На стенде без FDF этот код прошёл только синтаксическую проверку; опубликованный runtime-результат появится лишь после запуска с FDF Toolkit.
Что должно получиться в совместимом окружении: order_id=42
customer_email=buyer@example.test
artifact=fdf bytes>0

В приложении массив обычно появляется после безопасной формы, записи из базы или ответа API. FDF не заменяет эту проверку: email, идентификатор заказа и допустимые варианты списка проверяются до fdf_set_value().

Входящий FDF: неизвестные поля, схема и граница доверия

Перебрать неизвестные заранее поля входящего FDFПример для указанного окружения
<?php
declare(strict_types=1);

if (!extension_loaded('fdf')) {
    throw new RuntimeException('Нужно расширение FDF и совместимый FDF Toolkit');
}

$fixture = fdf_create();
if ($fixture === false) {
    throw new RuntimeException('Не создан учебный FDF');
}
foreach ([
    'order_id' => '42',
    'customer_email' => 'buyer@example.test',
    'delivery_city' => 'Kolomna',
] as $name => $value) {
    if (!fdf_set_value($fixture, $name, $value)) {
        fdf_close($fixture);
        throw new RuntimeException("Не записано учебное поле {$name}");
    }
}
$input = fdf_save_string($fixture);
fdf_close($fixture);
if (!is_string($input) || $input === '') {
    throw new RuntimeException('Учебный FDF не сериализован');
}

$fdf = fdf_open_string($input);
if ($fdf === false) {
    throw new RuntimeException('Получена строка, но это не корректный FDF');
}

$values = [];
$field = fdf_next_field_name($fdf);
while (is_string($field) && $field !== '') {
    $values[$field] = fdf_get_value($fdf, $field);
    $field = fdf_next_field_name($fdf, $field);
}
fdf_close($fdf);

ksort($values);
foreach ($values as $name => $value) {
    printf("%s=%s\n", $name, is_array($value) ? json_encode($value) : (string) $value);
}

Такой перебор нужен при интеграции, где набор полей задаёт PDF-шаблон. Имена считаются внешними данными: перед записью в заказ их сопоставляют с разрешённой схемой, а неизвестные поля не превращают автоматически в SQL-столбцы или свойства объекта.
Что должно получиться в совместимом окружении: customer_email=buyer@example.test
delivery_city=Kolomna
order_id=42

СимптомЧто проверить до переписывания кода
function undefinedЗагружено ли ext/fdf именно в том SAPI, который обслуживает запрос; одного FDF Toolkit недостаточно.
Значение есть, но поле пустоеТип формы, точное внутреннее имя поля и необходимость обновить appearance.
FDF открывается, итогового PDF нетFDF хранит данные; для слияния/flatten нужен отдельный совместимый процессор.
Работает локально, не работает на хостингеРазрешена ли нативная библиотека и внешний инструмент; на shared hosting это часто архитектурное ограничение.
Проблема из практикиКак она закрыта в руководстве
На shared hosting нет ext/fdf или FDF Toolkit, а создание FDF ошибочно принимают за слияние и flatten готового PDF.Глава разделяет контейнер данных FDF и визуальный PDF, проверяет расширение и предлагает отдельный PDF-процессор как честную альтернативу.
Значение записано, но не видно: форма может быть XFA, внутреннее имя поля отличается или appearance не обновлён.Перед кодом объясняются AcroForm/XFA, точные имена полей и граница между данными и внешним видом формы.

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

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

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

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

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

fdf_add_doc_javascriptДобавить в FDF сценарий уровня документа, который Acrobat подключит при импорте данных формы.

PHP 4 >= 4.3.0, PHP 5 < 5.3.0, PECL fdf SVN · fdf; FDF Toolkit

fdf_add_doc_javascript(resource $fdf_document, string $script_name, string $script_code): bool

Добавить в FDF сценарий уровня документа, который Acrobat подключит при импорте данных формы.

Официальная сигнатура. fdf_add_doc_javascript(resource $fdf_document, string $script_name, string $script_code): bool.

Доступность. Точная строка официального versions.xml: PHP 4 >= 4.3.0, PHP 5 < 5.3.0, PECL fdf SVN.

ПараметрЧто приходит и зачем
resource $fdf_documentОткрытый FDF-ресурс. Его получают через fdf_create(), fdf_open() или fdf_open_string().
Точная формулировка PHP Manual

The FDF document handle, returned by fdf_create , fdf_open or fdf_open_string .

string $script_nameУникальное имя document-level JavaScript внутри PDF/FDF.
Точная формулировка PHP Manual

The script name.

string $script_codeТело document-level JavaScript; официальный мануал рекомендует \r для переводов строк.
Точная формулировка PHP Manual

The script code. It is strongly suggested to use \r for linebreaks within the script code.

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

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

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

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

$fdf = fdf_create();
if ($fdf === false) { throw new RuntimeException('FDF не создан'); }

$result = fdf_add_doc_javascript($fdf, 'validateOrder', 'app.alert(\"Проверьте заказ\")');
if ($result !== true) { throw new RuntimeException('Операция FDF отклонена'); }
var_dump($result);
fdf_close($fdf);

fdf_add_doc_javascript показана в контексте минимального вызова; официальный тип возврата — bool. Код проходит синтаксическую проверку; фактический FDF-результат требует ext/fdf, FDF Toolkit и указанные fixtures. Перед вызовом показано только необходимое состояние ресурса.
Что должно получиться в совместимом окружении: bool(true)

Рабочий сценарий: fdf_add_doc_javascriptПример для указанного окружения
<?php
declare(strict_types=1);

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

$fdf = fdf_create();
if ($fdf === false) { throw new RuntimeException('FDF не создан'); }

$result = fdf_add_doc_javascript($fdf, 'warnOnImport', 'app.alert(\"Проверьте адрес доставки\")');
if ($result !== true) { throw new RuntimeException('Операция FDF отклонена'); }
var_dump($result);
$snapshot = fdf_save_string($fdf);
if (!is_string($snapshot) || !str_starts_with($snapshot, '%FDF-')) { throw new RuntimeException('FDF-снимок не создан'); }
echo 'snapshot-bytes=', strlen($snapshot), PHP_EOL;
fdf_close($fdf);

fdf_add_doc_javascript показана в контексте интеграции заказа; официальный тип возврата — bool. Код проходит синтаксическую проверку; фактический FDF-результат требует ext/fdf, FDF Toolkit и указанные fixtures. Второй вариант меняет данные и проверяет реальный тип/артефакт, а не печатает заранее подготовленную строку.
Что должно получиться в совместимом окружении: bool(true) Изменённый документ сериализован и проверен по FDF-сигнатуре.

Отказ и граница проверки. успех подтверждает только строгое true. После изменения сериализуйте FDF и прочитайте затронутое поле обратно: успешный вызов ещё не доказывает видимость в конкретном PDF.

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

Purpose: Adds javascript code to the FDF document

Description Adds a script to the FDF, which Acrobat then adds to the doc-level scripts of a document, once the FDF is imported into it.

Return: Return Values Returns true on success.

fdf_add_templateДобавить шаблон в данных PDF-формы.

PHP 4, PHP 5 < 5.3.0, PECL fdf SVN · fdf; FDF Toolkit

fdf_add_template(resource $fdf_document, int $newpage, string $filename, string $template, int $rename): bool

Добавить шаблон в данных PDF-формы.

Официальная сигнатура. fdf_add_template(resource $fdf_document, int $newpage, string $filename, string $template, int $rename): bool.

Доступность. Точная строка официального versions.xml: PHP 4, PHP 5 < 5.3.0, PECL fdf SVN.

ПараметрЧто приходит и зачем
resource $fdf_documentОткрытый FDF-ресурс. Его получают через fdf_create(), fdf_open() или fdf_open_string().
int $newpageНомер новой страницы, куда FDF добавляет шаблон.
string $filenameПуть к локальному файлу. Для пользовательского ввода заранее ограничивают разрешённый каталог.
string $templateВнутреннее имя шаблона PDF, а не путь к файлу.
int $renameФлаг переименования полей шаблона при добавлении, чтобы избежать конфликтов имён.

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

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

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

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

$fdf = fdf_create();
if ($fdf === false) { throw new RuntimeException('FDF не создан'); }

$templatePath = __DIR__ . '/fixtures/invoice.pdf';
if (!is_file($templatePath)) { throw new RuntimeException('Нужен PDF-шаблон fixture'); }

$result = fdf_add_template($fdf, 1, $templatePath, 'Invoice', 1);
if ($result !== true) { throw new RuntimeException('Операция FDF отклонена'); }
var_dump($result);
fdf_close($fdf);

fdf_add_template показана в контексте минимального вызова; официальный тип возврата — bool. Код проходит синтаксическую проверку; фактический FDF-результат требует ext/fdf, FDF Toolkit и указанные fixtures. Перед вызовом показано только необходимое состояние ресурса.
Что должно получиться в совместимом окружении: bool(true)

Рабочий сценарий: fdf_add_templateПример для указанного окружения
<?php
declare(strict_types=1);

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

$fdf = fdf_create();
if ($fdf === false) { throw new RuntimeException('FDF не создан'); }

$templatePath = __DIR__ . '/fixtures/delivery.pdf';
if (!is_file($templatePath)) { throw new RuntimeException('Нужен PDF-шаблон fixture'); }

$result = fdf_add_template($fdf, 2, $templatePath, 'Delivery', 0);
if ($result !== true) { throw new RuntimeException('Операция FDF отклонена'); }
var_dump($result);
$snapshot = fdf_save_string($fdf);
if (!is_string($snapshot) || !str_starts_with($snapshot, '%FDF-')) { throw new RuntimeException('FDF-снимок не создан'); }
echo 'snapshot-bytes=', strlen($snapshot), PHP_EOL;
fdf_close($fdf);

fdf_add_template показана в контексте интеграции заказа; официальный тип возврата — bool. Код проходит синтаксическую проверку; фактический FDF-результат требует ext/fdf, FDF Toolkit и указанные fixtures. Второй вариант меняет данные и проверяет реальный тип/артефакт, а не печатает заранее подготовленную строку.
Что должно получиться в совместимом окружении: bool(true) Изменённый документ сериализован и проверен по FDF-сигнатуре.

Отказ и граница проверки. успех подтверждает только строгое true. После изменения сериализуйте FDF и прочитайте затронутое поле обратно: успешный вызов ещё не доказывает видимость в конкретном PDF.

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

Purpose: Adds a template into the FDF document

Description

Return:

fdf_closeЗакрыть в данных PDF-формы.

PHP 4, PHP 5 < 5.3.0, PECL fdf SVN · fdf; FDF Toolkit

fdf_close(resource $fdf_document): void

Закрыть в данных PDF-формы.

Официальная сигнатура. fdf_close(resource $fdf_document): void.

Доступность. Точная строка официального versions.xml: PHP 4, PHP 5 < 5.3.0, PECL fdf SVN.

ПараметрЧто приходит и зачем
resource $fdf_documentОткрытый FDF-ресурс. Его получают через fdf_create(), fdf_open() или fdf_open_string().
Точная формулировка PHP Manual

The FDF document handle, returned by fdf_create , fdf_open or fdf_open_string .

Возврат. Тип void. Официальный текст: Return Values Nothing is returned.

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

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

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

$fdf = fdf_create();
if ($fdf === false) { throw new RuntimeException('FDF не создан'); }

fdf_close($fdf);
echo 'Операция завершена без возвращаемого значения', PHP_EOL;

fdf_close показана в контексте минимального вызова; официальный тип возврата — void. Код проходит синтаксическую проверку; фактический FDF-результат требует ext/fdf, FDF Toolkit и указанные fixtures. Перед вызовом показано только необходимое состояние ресурса.
Что должно получиться в совместимом окружении: Операция завершена без возвращаемого значения

Рабочий сценарий: fdf_closeПример для указанного окружения
<?php
declare(strict_types=1);

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

$fdf = fdf_create();
if ($fdf === false) { throw new RuntimeException('FDF не создан'); }

fdf_set_value($fdf, 'order_id', '73');
// Закрытие выполняется после последней операции с документом.
fdf_close($fdf);
echo 'Операция завершена без возвращаемого значения', PHP_EOL;

fdf_close показана в контексте интеграции заказа; официальный тип возврата — void. Код проходит синтаксическую проверку; фактический FDF-результат требует ext/fdf, FDF Toolkit и указанные fixtures. Второй вариант меняет данные и проверяет реальный тип/артефакт, а не печатает заранее подготовленную строку.
Что должно получиться в совместимом окружении: Операция завершена без возвращаемого значения

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

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

Purpose: Close an FDF document

Description Closes the FDF document.

Return: Return Values Nothing is returned.

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

fdf_createСоздать в данных PDF-формы.

PHP 4, PHP 5 < 5.3.0, PECL fdf SVN · fdf; FDF Toolkit

fdf_create(): resource

Создать в данных PDF-формы.

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

Доступность. Точная строка официального versions.xml: PHP 4, PHP 5 < 5.3.0, PECL fdf SVN.

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

Возврат. Тип resource. Официальный текст: Return Values Returns a FDF document handle, or false on error.

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

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

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

$result = fdf_create();
if ($result === false) { throw new RuntimeException('Ресурс не получен'); }
echo 'Получен открытый FDF-ресурс', PHP_EOL;
fdf_close($result);

fdf_create показана в контексте минимального вызова; официальный тип возврата — resource. Код проходит синтаксическую проверку; фактический FDF-результат требует ext/fdf, FDF Toolkit и указанные fixtures. Перед вызовом показано только необходимое состояние ресурса.
Что должно получиться в совместимом окружении: Получен открытый FDF-ресурс

Рабочий сценарий: fdf_createПример для указанного окружения
<?php
declare(strict_types=1);

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

$result = fdf_create();
if ($result === false) { throw new RuntimeException('Ресурс не получен'); }
echo 'Получен открытый FDF-ресурс', PHP_EOL;
fdf_set_value($result, 'order_id', '73');
$bytes = fdf_save_string($result);
echo 'bytes=', strlen($bytes), PHP_EOL;
fdf_close($result);

fdf_create показана в контексте интеграции заказа; официальный тип возврата — resource. Код проходит синтаксическую проверку; фактический FDF-результат требует ext/fdf, FDF Toolkit и указанные fixtures. Второй вариант меняет данные и проверяет реальный тип/артефакт, а не печатает заранее подготовленную строку.
Что должно получиться в совместимом окружении: Получен открытый FDF-ресурс bytes=<положительное число>

Отказ и граница проверки. сначала проверяется заявленный тип результата. После изменения сериализуйте FDF и прочитайте затронутое поле обратно: успешный вызов ещё не доказывает видимость в конкретном PDF.

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

Purpose: Create a new FDF document

Description Creates a new FDF document. This function is needed if one would like to populate input fields in a PDF document with data.

Return: Return Values Returns a FDF document handle, or false on error.

Связанные операции: fdf_close, fdf_save, fdf_open.

fdf_enum_valuesПеребрать values в данных PDF-формы.

PHP 4 >= 4.3.0, PHP 5 < 5.3.0, PECL fdf SVN · fdf; FDF Toolkit

fdf_enum_values(resource $fdf_document, callable $function, mixed $userdata = ?): bool

Перебрать values в данных PDF-формы.

Официальная сигнатура. fdf_enum_values(resource $fdf_document, callable $function, mixed $userdata = ?): bool.

Доступность. Точная строка официального versions.xml: PHP 4 >= 4.3.0, PHP 5 < 5.3.0, PECL fdf SVN.

ПараметрЧто приходит и зачем
resource $fdf_documentОткрытый FDF-ресурс. Его получают через fdf_create(), fdf_open() или fdf_open_string().
callable $functionCallback, который расширение вызовет для каждого значения FDF.
mixed $userdata = значение по умолчаниюПроизвольный контекст, который FDF передаст callback без изменения.

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

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

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

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

$fdf = fdf_create();
if ($fdf === false) { throw new RuntimeException('FDF не создан'); }

fdf_set_value($fdf, 'customer_email', 'buyer@example.test');
fdf_set_value($fdf, 'delivery_city', 'Kolomna');

$visitor = static function (string $field, mixed $value, mixed $context): void {
    printf("%s=%s source=%s\n", $field, (string) $value, $context['source']);
};

$result = fdf_enum_values($fdf, $visitor, ['source' => 'minimal']);
if ($result !== true) { throw new RuntimeException('Операция FDF отклонена'); }
var_dump($result);
fdf_close($fdf);

fdf_enum_values показана в контексте минимального вызова; официальный тип возврата — bool. Код проходит синтаксическую проверку; фактический FDF-результат требует ext/fdf, FDF Toolkit и указанные fixtures. Перед вызовом показано только необходимое состояние ресурса.
Что должно получиться в совместимом окружении: bool(true)

Рабочий сценарий: fdf_enum_valuesПример для указанного окружения
<?php
declare(strict_types=1);

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

$fdf = fdf_create();
if ($fdf === false) { throw new RuntimeException('FDF не создан'); }

fdf_set_value($fdf, 'customer_email', 'warehouse@example.test');
fdf_set_value($fdf, 'delivery_city', 'Tula');

$visitor = static function (string $field, mixed $value, mixed $context): void {
    printf("%s=%s source=%s\n", $field, (string) $value, $context['source']);
};

$result = fdf_enum_values($fdf, $visitor, ['source' => 'incoming-order']);
if ($result !== true) { throw new RuntimeException('Операция FDF отклонена'); }
var_dump($result);
$snapshot = fdf_save_string($fdf);
if (!is_string($snapshot) || !str_starts_with($snapshot, '%FDF-')) { throw new RuntimeException('FDF-снимок не создан'); }
echo 'snapshot-bytes=', strlen($snapshot), PHP_EOL;
fdf_close($fdf);

fdf_enum_values показана в контексте интеграции заказа; официальный тип возврата — bool. Код проходит синтаксическую проверку; фактический FDF-результат требует ext/fdf, FDF Toolkit и указанные fixtures. Второй вариант меняет данные и проверяет реальный тип/артефакт, а не печатает заранее подготовленную строку.
Что должно получиться в совместимом окружении: bool(true) Изменённый документ сериализован и проверен по FDF-сигнатуре.

Отказ и граница проверки. успех подтверждает только строгое true. После изменения сериализуйте FDF и прочитайте затронутое поле обратно: успешный вызов ещё не доказывает видимость в конкретном PDF.

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

Purpose: Call a user defined function for each document value

Description

Return:

fdf_errnoПолучить код последней ошибки в данных PDF-формы.

PHP 4 >= 4.3.0, PHP 5 < 5.3.0, PECL fdf SVN · fdf; FDF Toolkit

fdf_errno(): int

Получить код последней ошибки в данных PDF-формы.

Официальная сигнатура. fdf_errno(): int.

Доступность. Точная строка официального versions.xml: PHP 4 >= 4.3.0, PHP 5 < 5.3.0, PECL fdf SVN.

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

Возврат. Тип int. Официальный текст: Return Values Returns the error code as an integer, or zero if there was no errors.

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

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

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

$result = fdf_errno();
echo $result, PHP_EOL;

fdf_errno показана в контексте минимального вызова; официальный тип возврата — int. Код проходит синтаксическую проверку; фактический FDF-результат требует ext/fdf, FDF Toolkit и указанные fixtures. Перед вызовом показано только необходимое состояние ресурса.
Что должно получиться в совместимом окружении: Целое значение по договору функции; для fdf_errno() 0 означает отсутствие ошибки.

Рабочий сценарий: fdf_errnoПример для указанного окружения
<?php
declare(strict_types=1);

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

$result = fdf_errno();
echo $result, PHP_EOL;
echo fdf_error($result), PHP_EOL;

fdf_errno показана в контексте интеграции заказа; официальный тип возврата — int. Код проходит синтаксическую проверку; фактический FDF-результат требует ext/fdf, FDF Toolkit и указанные fixtures. Второй вариант меняет данные и проверяет реальный тип/артефакт, а не печатает заранее подготовленную строку.
Что должно получиться в совместимом окружении: Целое значение по договору функции; для fdf_errno() 0 означает отсутствие ошибки.

Отказ и граница проверки. сначала проверяется заявленный тип результата. После изменения сериализуйте FDF и прочитайте затронутое поле обратно: успешный вызов ещё не доказывает видимость в конкретном PDF.

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

Purpose: Return error code for last fdf operation

Description Gets the error code set by the last FDF function call. A textual description of the error may be obtained using fdf_error .

Return: Return Values Returns the error code as an integer, or zero if there was no errors.

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

fdf_errorПолучить текст ошибки в данных PDF-формы.

PHP 4 >= 4.3.0, PHP 5 < 5.3.0, PECL fdf SVN · fdf; FDF Toolkit

fdf_error(int $error_code = -1): string

Получить текст ошибки в данных PDF-формы.

Официальная сигнатура. fdf_error(int $error_code = -1): string.

Доступность. Точная строка официального versions.xml: PHP 4 >= 4.3.0, PHP 5 < 5.3.0, PECL fdf SVN.

ПараметрЧто приходит и зачем
int $error_code = -1Код FDF-ошибки; -1 просит сообщение последней ошибки.
Точная формулировка PHP Manual

An error code obtained with fdf_errno . If not provided, this function uses the internal error code set by the last operation.

Возврат. Тип string. Официальный текст: Return Values Returns the error message as a string, or the string no error if nothing went wrong.

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

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

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

$fdf = fdf_create();
if ($fdf === false) { throw new RuntimeException('FDF не создан'); }

$result = fdf_error(fdf_errno());
echo $result, PHP_EOL;
fdf_close($fdf);

fdf_error показана в контексте минимального вызова; официальный тип возврата — string. Код проходит синтаксическую проверку; фактический FDF-результат требует ext/fdf, FDF Toolkit и указанные fixtures. Перед вызовом показано только необходимое состояние ресурса.
Что должно получиться в совместимом окружении: Строка по договору функции; пустая строка может быть допустимым значением только там, где это прямо указано.

Рабочий сценарий: fdf_errorПример для указанного окружения
<?php
declare(strict_types=1);

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

$fdf = fdf_create();
if ($fdf === false) { throw new RuntimeException('FDF не создан'); }

$result = fdf_error(17);
echo $result, PHP_EOL;
fdf_close($fdf);

fdf_error показана в контексте интеграции заказа; официальный тип возврата — string. Код проходит синтаксическую проверку; фактический FDF-результат требует ext/fdf, FDF Toolkit и указанные fixtures. Второй вариант меняет данные и проверяет реальный тип/артефакт, а не печатает заранее подготовленную строку.
Что должно получиться в совместимом окружении: Строка по договору функции; пустая строка может быть допустимым значением только там, где это прямо указано.

Отказ и граница проверки. сначала проверяется заявленный тип результата. После изменения сериализуйте FDF и прочитайте затронутое поле обратно: успешный вызов ещё не доказывает видимость в конкретном PDF.

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

Purpose: Return error description for FDF error code

Description Gets a textual description for the FDF error code given in error_code .

Return: Return Values Returns the error message as a string, or the string no error if nothing went wrong.

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

fdf_get_apПолучить внешний вид поля в данных PDF-формы.

PHP 4 >= 4.3.0, PHP 5 < 5.3.0, PECL fdf SVN · fdf; FDF Toolkit

fdf_get_ap(resource $fdf_document, string $field, int $face, string $filename): bool

Получить внешний вид поля в данных PDF-формы.

Официальная сигнатура. fdf_get_ap(resource $fdf_document, string $field, int $face, string $filename): bool.

Доступность. Точная строка официального versions.xml: PHP 4 >= 4.3.0, PHP 5 < 5.3.0, PECL fdf SVN.

ПараметрЧто приходит и зачем
resource $fdf_documentОткрытый FDF-ресурс. Его получают через fdf_create(), fdf_open() или fdf_open_string().
Точная формулировка PHP Manual

The FDF document handle, returned by fdf_create , fdf_open or fdf_open_string .

string $fieldТочное имя поля из PDF-формы.
int $faceВариант внешнего вида поля (например, обычное/нажатое состояние), заданный константой FDF.
Точная формулировка PHP Manual

The possible values are FDFNormalAP , FDFRolloverAP and FDFDownAP .

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

The appearance will be stored in this parameter.

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

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

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

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

$fixturePath = __DIR__ . '/fixtures/appearances.fdf';
if (!is_file($fixturePath)) { throw new RuntimeException('Нужен учебный FDF fixture'); }
$fdf = fdf_open($fixturePath);
if ($fdf === false) { throw new RuntimeException('Учебный FDF не открыт'); }

fdf_set_value($fdf, 'customer_email', 'buyer@example.test');
fdf_set_value($fdf, 'delivery_city', 'Kolomna');

$outputDir = __DIR__ . '/exports';
if (!is_dir($outputDir) && !mkdir($outputDir, 0775, true) && !is_dir($outputDir)) {
    throw new RuntimeException('Не создан каталог exports');
}

$result = fdf_get_ap($fdf, 'customer_signature', FDFNormalAP, __DIR__ . '/exports/customer-email.ap');
if ($result !== true) { throw new RuntimeException('Операция FDF отклонена'); }
var_dump($result);
fdf_close($fdf);

fdf_get_ap показана в контексте минимального вызова; официальный тип возврата — bool. Код проходит синтаксическую проверку; фактический FDF-результат требует ext/fdf, FDF Toolkit и указанные fixtures. Перед вызовом показано только необходимое состояние ресурса.
Что должно получиться в совместимом окружении: bool(true)

Рабочий сценарий: fdf_get_apПример для указанного окружения
<?php
declare(strict_types=1);

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

$fixturePath = __DIR__ . '/fixtures/appearances.fdf';
if (!is_file($fixturePath)) { throw new RuntimeException('Нужен FDF с appearance-потоком'); }
$outputDir = __DIR__ . '/quarantine';
if (!is_dir($outputDir) && !mkdir($outputDir, 0775, true) && !is_dir($outputDir)) {
    throw new RuntimeException('Не создан карантинный каталог');
}
$fdf = fdf_open($fixturePath);
if ($fdf === false) { throw new RuntimeException('FDF fixture не открыт'); }
$appearancePath = $outputDir . '/delivery-signature.ap';
$result = fdf_get_ap($fdf, 'delivery_signature', FDFNormalAP, $appearancePath);
fdf_close($fdf);
if ($result !== true || !is_file($appearancePath) || filesize($appearancePath) === 0) {
    throw new RuntimeException('Appearance не извлечён');
}
echo 'appearance-bytes=', filesize($appearancePath), PHP_EOL;
echo 'sha256=', hash_file('sha256', $appearancePath), PHP_EOL;

fdf_get_ap: Appearance извлекается в отдельный карантинный файл и проверяется по размеру и хешу до дальнейшей обработки. Runtime требует ext/fdf и FDF Toolkit; локально выполнен только PHP lint.
Что должно получиться в совместимом окружении: appearance-bytes=<положительное число> sha256=<64 hex-символа>

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

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

Purpose: Get the appearance of a field

Description Gets the appearance of a field (i.e. the value of the /AP key) and stores it in a file.

Return: Return Values Returns true on success.

fdf_get_attachmentПолучить вложение в данных PDF-формы.

PHP 4 >= 4.3.0, PHP 5 < 5.3.0, PECL fdf SVN · fdf; FDF Toolkit

fdf_get_attachment(resource $fdf_document, string $fieldname, string $savepath): array

Получить вложение в данных PDF-формы.

Официальная сигнатура. fdf_get_attachment(resource $fdf_document, string $fieldname, string $savepath): array.

Доступность. Точная строка официального versions.xml: PHP 4 >= 4.3.0, PHP 5 < 5.3.0, PECL fdf SVN.

ПараметрЧто приходит и зачем
resource $fdf_documentОткрытый FDF-ресурс. Его получают через fdf_create(), fdf_open() или fdf_open_string().
Точная формулировка PHP Manual

The FDF document handle, returned by fdf_create , fdf_open or fdf_open_string .

string $fieldnameТочное имя поля из PDF-формы.
string $savepathРазрешённый каталог для извлечённого вложения; создайте его и исключите выход за его границы.
Точная формулировка PHP Manual

May be the name of a plain file or an existing directory in which the file is to be created under its original name. Any existing file under the same name will be overwritten. There seems to be no other way to find out the original filename but to store the file using a directory as savepath and check for the basename it was stored under.

Возврат. Тип array. Официальный текст: Return Values The returned array contains the following fields: path - path where the file got stored size - size of the stored file in bytes type - mimetype if given in the FDF

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

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

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

$fixturePath = __DIR__ . '/fixtures/attachments.fdf';
if (!is_file($fixturePath)) { throw new RuntimeException('Нужен учебный FDF fixture'); }
$fdf = fdf_open($fixturePath);
if ($fdf === false) { throw new RuntimeException('Учебный FDF не открыт'); }

fdf_set_value($fdf, 'customer_email', 'buyer@example.test');
fdf_set_value($fdf, 'delivery_city', 'Kolomna');

$attachmentDir = __DIR__ . '/exports';
if (!is_dir($attachmentDir) && !mkdir($attachmentDir, 0775, true) && !is_dir($attachmentDir)) {
    throw new RuntimeException('Не создан каталог для вложения');
}

$result = fdf_get_attachment($fdf, 'invoice_attachment', $attachmentDir);
if (!is_array($result)) { throw new RuntimeException('Вложение не извлечено'); }
printf("path=%s size=%d type=%s\n", $result['path'], $result['size'], $result['type'] ?? 'unknown');
fdf_close($fdf);

fdf_get_attachment показана в контексте минимального вызова; официальный тип возврата — array. Код проходит синтаксическую проверку; фактический FDF-результат требует ext/fdf, FDF Toolkit и указанные fixtures. Перед вызовом показано только необходимое состояние ресурса.
Что должно получиться в совместимом окружении: path=<путь сохранённого вложения> size=<байты> type=<MIME или unknown>

Рабочий сценарий: fdf_get_attachmentПример для указанного окружения
<?php
declare(strict_types=1);

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

$fixturePath = __DIR__ . '/fixtures/attachments.fdf';
if (!is_file($fixturePath)) { throw new RuntimeException('Нужен учебный FDF fixture'); }
$fdf = fdf_open($fixturePath);
if ($fdf === false) { throw new RuntimeException('Учебный FDF не открыт'); }

fdf_set_value($fdf, 'customer_email', 'warehouse@example.test');
fdf_set_value($fdf, 'delivery_city', 'Tula');

$attachmentDir = __DIR__ . '/quarantine';
if (!is_dir($attachmentDir) && !mkdir($attachmentDir, 0775, true) && !is_dir($attachmentDir)) {
    throw new RuntimeException('Не создан каталог для вложения');
}

$result = fdf_get_attachment($fdf, 'signed_contract', $attachmentDir);
if (!is_array($result)) { throw new RuntimeException('Вложение не извлечено'); }
printf("path=%s size=%d type=%s\n", $result['path'], $result['size'], $result['type'] ?? 'unknown');
if (!isset($result['path']) || !is_file($result['path'])) { throw new RuntimeException('Файл вложения не найден'); }
echo 'sha256=', hash_file('sha256', $result['path']), PHP_EOL;
fdf_close($fdf);

fdf_get_attachment показана в контексте интеграции заказа; официальный тип возврата — array. Код проходит синтаксическую проверку; фактический FDF-результат требует ext/fdf, FDF Toolkit и указанные fixtures. Второй вариант меняет данные и проверяет реальный тип/артефакт, а не печатает заранее подготовленную строку.
Что должно получиться в совместимом окружении: path=<путь сохранённого вложения> size=<байты> type=<MIME или unknown> Извлечённый файл существует и получает контрольную сумму.

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

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

Purpose: Extracts uploaded file embedded in the FDF

Description Extracts a file uploaded by means of the "file selection" field fieldname and stores it under savepath .

Return: Return Values The returned array contains the following fields: path - path where the file got stored size - size of the stored file in bytes type - mimetype if given in the FDF

fdf_get_encodingПолучить кодировку в данных PDF-формы.

PHP 4 >= 4.3.0, PHP 5 < 5.3.0, PECL fdf SVN · fdf; FDF Toolkit

fdf_get_encoding(resource $fdf_document): string

Получить кодировку в данных PDF-формы.

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

Доступность. Точная строка официального versions.xml: PHP 4 >= 4.3.0, PHP 5 < 5.3.0, PECL fdf SVN.

ПараметрЧто приходит и зачем
resource $fdf_documentОткрытый FDF-ресурс. Его получают через fdf_create(), fdf_open() или fdf_open_string().
Точная формулировка PHP Manual

The FDF document handle, returned by fdf_create , fdf_open or fdf_open_string .

Возврат. Тип string. Официальный текст: Return Values Returns the encoding as a string. An empty string is returned if the default PDFDocEncoding/Unicode scheme is used.

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

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

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

$fdf = fdf_create();
if ($fdf === false) { throw new RuntimeException('FDF не создан'); }

fdf_set_value($fdf, 'customer_email', 'buyer@example.test');
fdf_set_value($fdf, 'delivery_city', 'Kolomna');

fdf_set_encoding($fdf, 'Unicode');
$result = fdf_get_encoding($fdf);
echo $result, PHP_EOL;
fdf_close($fdf);

fdf_get_encoding показана в контексте минимального вызова; официальный тип возврата — string. Код проходит синтаксическую проверку; фактический FDF-результат требует ext/fdf, FDF Toolkit и указанные fixtures. Перед вызовом показано только необходимое состояние ресурса.
Что должно получиться в совместимом окружении: Строка по договору функции; пустая строка может быть допустимым значением только там, где это прямо указано.

Рабочий сценарий: fdf_get_encodingПример для указанного окружения
<?php
declare(strict_types=1);

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

$fdf = fdf_create();
if ($fdf === false) { throw new RuntimeException('FDF не создан'); }

fdf_set_value($fdf, 'customer_email', 'warehouse@example.test');
fdf_set_value($fdf, 'delivery_city', 'Tula');

fdf_set_encoding($fdf, 'Shift-JIS');
$result = fdf_get_encoding($fdf);
echo $result, PHP_EOL;
if (!is_string($result) || $result === '') { throw new RuntimeException('Ожидалась непустая строка'); }
echo 'validated=', $result, PHP_EOL;
fdf_close($fdf);

fdf_get_encoding показана в контексте интеграции заказа; официальный тип возврата — string. Код проходит синтаксическую проверку; фактический FDF-результат требует ext/fdf, FDF Toolkit и указанные fixtures. Второй вариант меняет данные и проверяет реальный тип/артефакт, а не печатает заранее подготовленную строку.
Что должно получиться в совместимом окружении: Строка по договору функции; пустая строка может быть допустимым значением только там, где это прямо указано. Полученная строка проверена перед дальнейшим использованием.

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

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

Purpose: Get the value of the /Encoding key

Description Gets the value of the /Encoding key.

Return: Return Values Returns the encoding as a string. An empty string is returned if the default PDFDocEncoding/Unicode scheme is used.

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

fdf_get_fileПолучить связанный файл в данных PDF-формы.

PHP 4, PHP 5 < 5.3.0, PECL fdf SVN · fdf; FDF Toolkit

fdf_get_file(resource $fdf_document): string

Получить связанный файл в данных PDF-формы.

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

Доступность. Точная строка официального versions.xml: PHP 4, PHP 5 < 5.3.0, PECL fdf SVN.

ПараметрЧто приходит и зачем
resource $fdf_documentОткрытый FDF-ресурс. Его получают через fdf_create(), fdf_open() или fdf_open_string().
Точная формулировка PHP Manual

The FDF document handle, returned by fdf_create , fdf_open or fdf_open_string .

Возврат. Тип string. Официальный текст: Return Values Returns the key value, as a string.

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

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

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

$fdf = fdf_create();
if ($fdf === false) { throw new RuntimeException('FDF не создан'); }

fdf_set_value($fdf, 'customer_email', 'buyer@example.test');
fdf_set_value($fdf, 'delivery_city', 'Kolomna');

fdf_set_file($fdf, 'invoice.pdf');
$result = fdf_get_file($fdf);
echo $result, PHP_EOL;
fdf_close($fdf);

fdf_get_file показана в контексте минимального вызова; официальный тип возврата — string. Код проходит синтаксическую проверку; фактический FDF-результат требует ext/fdf, FDF Toolkit и указанные fixtures. Перед вызовом показано только необходимое состояние ресурса.
Что должно получиться в совместимом окружении: Строка по договору функции; пустая строка может быть допустимым значением только там, где это прямо указано.

Рабочий сценарий: fdf_get_fileПример для указанного окружения
<?php
declare(strict_types=1);

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

$fdf = fdf_create();
if ($fdf === false) { throw new RuntimeException('FDF не создан'); }

fdf_set_value($fdf, 'customer_email', 'warehouse@example.test');
fdf_set_value($fdf, 'delivery_city', 'Tula');

fdf_set_file($fdf, 'delivery.pdf');
$result = fdf_get_file($fdf);
echo $result, PHP_EOL;
if (!is_string($result) || $result === '') { throw new RuntimeException('Ожидалась непустая строка'); }
echo 'validated=', $result, PHP_EOL;
fdf_close($fdf);

fdf_get_file показана в контексте интеграции заказа; официальный тип возврата — string. Код проходит синтаксическую проверку; фактический FDF-результат требует ext/fdf, FDF Toolkit и указанные fixtures. Второй вариант меняет данные и проверяет реальный тип/артефакт, а не печатает заранее подготовленную строку.
Что должно получиться в совместимом окружении: Строка по договору функции; пустая строка может быть допустимым значением только там, где это прямо указано. Полученная строка проверена перед дальнейшим использованием.

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

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

Purpose: Get the value of the /F key

Description Gets the value of the /F key.

Return: Return Values Returns the key value, as a string.

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

fdf_get_flagsПолучить флаги поля в данных PDF-формы.

PHP 4 >= 4.3.0, PHP 5 < 5.3.0, PECL fdf SVN · fdf; FDF Toolkit

fdf_get_flags(resource $fdf_document, string $fieldname, int $whichflags): int

Получить флаги поля в данных PDF-формы.

Официальная сигнатура. fdf_get_flags(resource $fdf_document, string $fieldname, int $whichflags): int.

Доступность. Точная строка официального versions.xml: PHP 4 >= 4.3.0, PHP 5 < 5.3.0, PECL fdf SVN.

ПараметрЧто приходит и зачем
resource $fdf_documentОткрытый FDF-ресурс. Его получают через fdf_create(), fdf_open() или fdf_open_string().
string $fieldnameТочное имя поля из PDF-формы.
int $whichflagsНабор флагов FDF, который нужно прочитать.

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

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

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

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

$fdf = fdf_create();
if ($fdf === false) { throw new RuntimeException('FDF не создан'); }

fdf_set_value($fdf, 'customer_email', 'buyer@example.test');
fdf_set_value($fdf, 'delivery_city', 'Kolomna');

fdf_set_flags($fdf, 'delivery_city', FDFSetFf, 2);
$result = fdf_get_flags($fdf, 'customer_email', FDFSetFf);
echo $result, PHP_EOL;
fdf_close($fdf);

fdf_get_flags показана в контексте минимального вызова; официальный тип возврата — int. Код проходит синтаксическую проверку; фактический FDF-результат требует ext/fdf, FDF Toolkit и указанные fixtures. Перед вызовом показано только необходимое состояние ресурса.
Что должно получиться в совместимом окружении: Целое значение по договору функции; для fdf_errno() 0 означает отсутствие ошибки.

Рабочий сценарий: fdf_get_flagsПример для указанного окружения
<?php
declare(strict_types=1);

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

$fdf = fdf_create();
if ($fdf === false) { throw new RuntimeException('FDF не создан'); }
fdf_set_value($fdf, 'order_id', '73');
if (!fdf_set_flags($fdf, 'order_id', FDFSetFf, 2)) { fdf_close($fdf); throw new RuntimeException('Тестовый флаг не задан'); }
$result = fdf_get_flags($fdf, 'order_id', FDFSetFf);
fdf_close($fdf);
if ($result !== 2) { throw new RuntimeException('Ожидался тот же набор FDFSetFf'); }
echo 'order_id-set-flags=', $result, PHP_EOL;

fdf_get_flags: Пример сначала задаёт известный набор FDFSetFf, затем читает ту же группу флагов того же поля и сравнивает точное значение. Runtime требует ext/fdf и FDF Toolkit; локально выполнен только PHP lint.
Что должно получиться в совместимом окружении: order_id-set-flags=2

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

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

Purpose: Gets the flags of a field

Description

Return:

fdf_get_optПолучить элемент списка в данных PDF-формы.

PHP 4 >= 4.3.0, PHP 5 < 5.3.0, PECLv · fdf; FDF Toolkit

fdf_get_opt(resource $fdf_document, string $fieldname, int $element = -1): mixed

Получить элемент списка в данных PDF-формы.

Официальная сигнатура. fdf_get_opt(resource $fdf_document, string $fieldname, int $element = -1): mixed.

Доступность. Точная строка официального versions.xml: PHP 4 >= 4.3.0, PHP 5 < 5.3.0, PECLv.

ПараметрЧто приходит и зачем
resource $fdf_documentОткрытый FDF-ресурс. Его получают через fdf_create(), fdf_open() или fdf_open_string().
string $fieldnameТочное имя поля из PDF-формы.
int $element = -1Индекс элемента списка вариантов поля; отсчёт и допустимое значение сверяйте с функцией.

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

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

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

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

$fdf = fdf_create();
if ($fdf === false) { throw new RuntimeException('FDF не создан'); }

fdf_set_value($fdf, 'customer_email', 'buyer@example.test');
fdf_set_value($fdf, 'delivery_city', 'Kolomna');

fdf_set_opt($fdf, 'delivery_city', 0, 'Коломна', 'kolomna');
$result = fdf_get_opt($fdf, 'delivery_city', 0);
var_export($result);
echo PHP_EOL;
fdf_close($fdf);

fdf_get_opt показана в контексте минимального вызова; официальный тип возврата — mixed. Код проходит синтаксическую проверку; фактический FDF-результат требует ext/fdf, FDF Toolkit и указанные fixtures. Перед вызовом показано только необходимое состояние ресурса.
Что должно получиться в совместимом окружении: Фактическое значение выбранного поля или элемента списка.

Рабочий сценарий: fdf_get_optПример для указанного окружения
<?php
declare(strict_types=1);

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

$fdf = fdf_create();
if ($fdf === false) { throw new RuntimeException('FDF не создан'); }

fdf_set_value($fdf, 'customer_email', 'warehouse@example.test');
fdf_set_value($fdf, 'delivery_city', 'Tula');

fdf_set_opt($fdf, 'delivery_method', 1, 'Курьер', 'courier');
$result = fdf_get_opt($fdf, 'delivery_method', 1);
var_export($result);
echo PHP_EOL;
if (!is_scalar($result) && $result !== null) { throw new RuntimeException('Неожиданный тип варианта поля'); }
echo 'selected-option=', (string) $result, PHP_EOL;
fdf_close($fdf);

fdf_get_opt показана в контексте интеграции заказа; официальный тип возврата — mixed. Код проходит синтаксическую проверку; фактический FDF-результат требует ext/fdf, FDF Toolkit и указанные fixtures. Второй вариант меняет данные и проверяет реальный тип/артефакт, а не печатает заранее подготовленную строку.
Что должно получиться в совместимом окружении: Фактическое значение выбранного поля или элемента списка. Выбранный вариант нормализован для прикладной модели формы.

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

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

Purpose: Gets a value from the opt array of a field

Description

Return:

fdf_get_statusПолучить статус в данных PDF-формы.

PHP 4, PHP 5 < 5.3.0, PECL fdf SVN · fdf; FDF Toolkit

fdf_get_status(resource $fdf_document): string

Получить статус в данных PDF-формы.

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

Доступность. Точная строка официального versions.xml: PHP 4, PHP 5 < 5.3.0, PECL fdf SVN.

ПараметрЧто приходит и зачем
resource $fdf_documentОткрытый FDF-ресурс. Его получают через fdf_create(), fdf_open() или fdf_open_string().
Точная формулировка PHP Manual

The FDF document handle, returned by fdf_create , fdf_open or fdf_open_string .

Возврат. Тип string. Официальный текст: Return Values Returns the key value, as a string.

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

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

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

$fdf = fdf_create();
if ($fdf === false) { throw new RuntimeException('FDF не создан'); }

fdf_set_value($fdf, 'customer_email', 'buyer@example.test');
fdf_set_value($fdf, 'delivery_city', 'Kolomna');

fdf_set_status($fdf, 'Черновик');
$result = fdf_get_status($fdf);
echo $result, PHP_EOL;
fdf_close($fdf);

fdf_get_status показана в контексте минимального вызова; официальный тип возврата — string. Код проходит синтаксическую проверку; фактический FDF-результат требует ext/fdf, FDF Toolkit и указанные fixtures. Перед вызовом показано только необходимое состояние ресурса.
Что должно получиться в совместимом окружении: Строка по договору функции; пустая строка может быть допустимым значением только там, где это прямо указано.

Рабочий сценарий: fdf_get_statusПример для указанного окружения
<?php
declare(strict_types=1);

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

$fdf = fdf_create();
if ($fdf === false) { throw new RuntimeException('FDF не создан'); }

fdf_set_value($fdf, 'customer_email', 'warehouse@example.test');
fdf_set_value($fdf, 'delivery_city', 'Tula');

fdf_set_status($fdf, 'Проверено оператором');
$result = fdf_get_status($fdf);
echo $result, PHP_EOL;
if (!is_string($result) || $result === '') { throw new RuntimeException('Ожидалась непустая строка'); }
echo 'validated=', $result, PHP_EOL;
fdf_close($fdf);

fdf_get_status показана в контексте интеграции заказа; официальный тип возврата — string. Код проходит синтаксическую проверку; фактический FDF-результат требует ext/fdf, FDF Toolkit и указанные fixtures. Второй вариант меняет данные и проверяет реальный тип/артефакт, а не печатает заранее подготовленную строку.
Что должно получиться в совместимом окружении: Строка по договору функции; пустая строка может быть допустимым значением только там, где это прямо указано. Полученная строка проверена перед дальнейшим использованием.

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

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

Purpose: Get the value of the /STATUS key

Description Gets the value of the /STATUS key.

Return: Return Values Returns the key value, as a string.

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

fdf_get_valueПолучить значение поля в данных PDF-формы.

PHP 4, PHP 5 < 5.3.0, PECL fdf SVN · fdf; FDF Toolkit

fdf_get_value(resource $fdf_document, string $fieldname, int $which = -1): mixed

Получить значение поля в данных PDF-формы.

Официальная сигнатура. fdf_get_value(resource $fdf_document, string $fieldname, int $which = -1): mixed.

Доступность. Точная строка официального versions.xml: PHP 4, PHP 5 < 5.3.0, PECL fdf SVN.

ПараметрЧто приходит и зачем
resource $fdf_documentОткрытый FDF-ресурс. Его получают через fdf_create(), fdf_open() или fdf_open_string().
Точная формулировка PHP Manual

The FDF document handle, returned by fdf_create , fdf_open or fdf_open_string .

string $fieldnameТочное имя поля из PDF-формы.
Точная формулировка PHP Manual

Name of the FDF field, as a string.

int $which = -1Выбор значения/варианта поля; -1 обычно означает основной вариант.
Точная формулировка PHP Manual

Elements of an array field can be retrieved by passing this optional parameter, starting at zero. For non-array fields, this parameter will be ignored.

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

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

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

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

$fdf = fdf_create();
if ($fdf === false) { throw new RuntimeException('FDF не создан'); }

fdf_set_value($fdf, 'customer_email', 'buyer@example.test');
fdf_set_value($fdf, 'delivery_city', 'Kolomna');

$result = fdf_get_value($fdf, 'customer_email', -1);
var_export($result);
echo PHP_EOL;
fdf_close($fdf);

fdf_get_value показана в контексте минимального вызова; официальный тип возврата — mixed. Код проходит синтаксическую проверку; фактический FDF-результат требует ext/fdf, FDF Toolkit и указанные fixtures. Перед вызовом показано только необходимое состояние ресурса.
Что должно получиться в совместимом окружении: Фактическое значение выбранного поля или элемента списка.

Рабочий сценарий: fdf_get_valueПример для указанного окружения
<?php
declare(strict_types=1);

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

$fdf = fdf_create();
if ($fdf === false) { throw new RuntimeException('FDF не создан'); }
fdf_set_value($fdf, 'customer_email', ' BUYER@EXAMPLE.TEST ');
$result = fdf_get_value($fdf, 'customer_email');
fdf_close($fdf);
if (!is_string($result)) { throw new RuntimeException('Email должен быть строкой'); }
$email = filter_var(strtolower(trim($result)), FILTER_VALIDATE_EMAIL);
if ($email === false) { throw new RuntimeException('В PDF-форме некорректный email'); }
echo 'normalized-email=', $email, PHP_EOL;

fdf_get_value: Значение из PDF-формы нормализуется и валидируется перед передачей в модель заказа; это отдельная задача, а не замена имени поля в минимальном чтении. Runtime требует ext/fdf и FDF Toolkit; локально выполнен только PHP lint.
Что должно получиться в совместимом окружении: normalized-email=buyer@example.test

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

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

Purpose: Get the value of a field

Description Gets the value for the requested field.

Return: Return Values Returns the field value.

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

fdf_get_versionПолучить версию формата в данных PDF-формы.

PHP 4 >= 4.3.0, PHP 5 < 5.3.0, PECL fdf SVN · fdf; FDF Toolkit

fdf_get_version(resource $fdf_document = ?): string

Получить версию формата в данных PDF-формы.

Официальная сигнатура. fdf_get_version(resource $fdf_document = ?): string.

Доступность. Точная строка официального versions.xml: PHP 4 >= 4.3.0, PHP 5 < 5.3.0, PECL fdf SVN.

ПараметрЧто приходит и зачем
resource $fdf_document = значение по умолчаниюОткрытый FDF-ресурс. Его получают через fdf_create(), fdf_open() или fdf_open_string().
Точная формулировка PHP Manual

The FDF document handle, returned by fdf_create , fdf_open or fdf_open_string .

Возврат. Тип string. Официальный текст: Return Values Returns the version as a string. For the current FDF toolkit 5.0 the API version number is 5.0 and the document version number is either 1.2 , 1.3 or 1.4 .

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

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

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

$fdf = fdf_create();
if ($fdf === false) { throw new RuntimeException('FDF не создан'); }

fdf_set_value($fdf, 'customer_email', 'buyer@example.test');
fdf_set_value($fdf, 'delivery_city', 'Kolomna');

fdf_set_version($fdf, '1.3');
$result = fdf_get_version($fdf);
echo $result, PHP_EOL;
fdf_close($fdf);

fdf_get_version показана в контексте минимального вызова; официальный тип возврата — string. Код проходит синтаксическую проверку; фактический FDF-результат требует ext/fdf, FDF Toolkit и указанные fixtures. Перед вызовом показано только необходимое состояние ресурса.
Что должно получиться в совместимом окружении: Строка по договору функции; пустая строка может быть допустимым значением только там, где это прямо указано.

Рабочий сценарий: fdf_get_versionПример для указанного окружения
<?php
declare(strict_types=1);

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

$fdf = fdf_create();
if ($fdf === false) { throw new RuntimeException('FDF не создан'); }

fdf_set_value($fdf, 'customer_email', 'warehouse@example.test');
fdf_set_value($fdf, 'delivery_city', 'Tula');

fdf_set_version($fdf, '1.4');
$result = fdf_get_version($fdf);
echo $result, PHP_EOL;
if (!is_string($result) || $result === '') { throw new RuntimeException('Ожидалась непустая строка'); }
echo 'validated=', $result, PHP_EOL;
fdf_close($fdf);

fdf_get_version показана в контексте интеграции заказа; официальный тип возврата — string. Код проходит синтаксическую проверку; фактический FDF-результат требует ext/fdf, FDF Toolkit и указанные fixtures. Второй вариант меняет данные и проверяет реальный тип/артефакт, а не печатает заранее подготовленную строку.
Что должно получиться в совместимом окружении: Строка по договору функции; пустая строка может быть допустимым значением только там, где это прямо указано. Полученная строка проверена перед дальнейшим использованием.

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

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

Purpose: Gets version number for FDF API or file

Description Return the FDF version for the given document, or the toolkit API version number if no parameter is given.

Return: Return Values Returns the version as a string. For the current FDF toolkit 5.0 the API version number is 5.0 and the document version number is either 1.2 , 1.3 or 1.4 .

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

fdf_headerОтправить FDF-заголовок в данных PDF-формы.

PHP 4 >= 4.3.0, PHP 5 < 5.3.0, PECL fdf SVNf · fdf; FDF Toolkit

fdf_header(): void

Отправить FDF-заголовок в данных PDF-формы.

Официальная сигнатура. fdf_header(): void.

Доступность. Точная строка официального versions.xml: PHP 4 >= 4.3.0, PHP 5 < 5.3.0, PECL fdf SVNf.

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

Возврат. Тип void. Официальный текст: Return Values Nothing is returned.

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

Только FDF Content-Type: fdf_headerПример для указанного окружения
<?php
declare(strict_types=1);

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

if (headers_sent($source, $line)) { throw new RuntimeException("Заголовки уже отправлены: {$source}:{$line}"); }
fdf_header();
// Функция не создаёт тело ответа: сериализованные FDF-байты отправляются отдельно.

fdf_header не возвращает и не генерирует FDF-документ — она только выставляет заголовок до начала вывода.
Что должно получиться в совместимом окружении: Установлен HTTP Content-Type application/vnd.fdf; тело ответа этим вызовом не создаётся.

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

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

$fdf = fdf_create();
if ($fdf === false) { throw new RuntimeException('FDF не создан'); }
fdf_set_value($fdf, 'order_id', '73');
fdf_set_value($fdf, 'customer_email', 'buyer@example.test');
$bytes = fdf_save_string($fdf);
fdf_close($fdf);
if (!is_string($bytes) || !str_starts_with($bytes, '%FDF-')) { throw new RuntimeException('FDF-ответ не сериализован'); }
if (headers_sent($source, $line)) { throw new RuntimeException("Заголовки уже отправлены: {$source}:{$line}"); }
fdf_header();
header('Content-Disposition: attachment; filename=order-73.fdf');
header('Content-Length: ' . strlen($bytes));
echo $bytes;

fdf_header устанавливает только FDF Content-Type. Пример отдельно создаёт настоящие FDF-байты и отправляет их без диагностического текста; локально выполнен только PHP lint.
Что должно получиться в совместимом окружении: HTTP Content-Type application/vnd.fdf; тело начинается с %FDF- и содержит сериализованный документ.

Отказ и граница проверки. успех не имеет возвращаемого значения, поэтому проверяется последующий эффект. Проверьте право записи или состояние HTTP-заголовков, затем FDF-сигнатуру, ненулевой размер и повторное открытие.

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

Purpose: Sets FDF-specific output headers

Description This is a convenience function to set appropriate HTTP headers for FDF output. It sets the Content-type: to application/vnd.fdf .

Return: Return Values Nothing is returned.

fdf_next_field_nameПоследовательно получить имена полей, когда их набор заранее неизвестен интеграции.

PHP 4, PHP 5 < 5.3.0, PECL fdf SVN · fdf; FDF Toolkit

fdf_next_field_name(resource $fdf_document, string $fieldname = ?): string

Последовательно получить имена полей, когда их набор заранее неизвестен интеграции.

Официальная сигнатура. fdf_next_field_name(resource $fdf_document, string $fieldname = ?): string.

Доступность. Точная строка официального versions.xml: PHP 4, PHP 5 < 5.3.0, PECL fdf SVN.

ПараметрЧто приходит и зачем
resource $fdf_documentОткрытый FDF-ресурс. Его получают через fdf_create(), fdf_open() или fdf_open_string().
Точная формулировка PHP Manual

The FDF document handle, returned by fdf_create , fdf_open or fdf_open_string .

string $fieldname = значение по умолчаниюТочное имя поля из PDF-формы.
Точная формулировка PHP Manual

Name of the FDF field, as a string. If not given, the first field will be assumed.

Возврат. Тип string. Официальный текст: Return Values Returns the field name as a string.

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

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

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

$fdf = fdf_create();
if ($fdf === false) { throw new RuntimeException('FDF не создан'); }

fdf_set_value($fdf, 'customer_email', 'buyer@example.test');
fdf_set_value($fdf, 'delivery_city', 'Kolomna');

$result = fdf_next_field_name($fdf, 'customer_email');
echo $result, PHP_EOL;
fdf_close($fdf);

fdf_next_field_name показана в контексте минимального вызова; официальный тип возврата — string. Код проходит синтаксическую проверку; фактический FDF-результат требует ext/fdf, FDF Toolkit и указанные fixtures. Перед вызовом показано только необходимое состояние ресурса.
Что должно получиться в совместимом окружении: Строка по договору функции; пустая строка может быть допустимым значением только там, где это прямо указано.

Рабочий сценарий: fdf_next_field_nameПример для указанного окружения
<?php
declare(strict_types=1);

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

$fdf = fdf_create();
if ($fdf === false) { throw new RuntimeException('FDF не создан'); }

fdf_set_value($fdf, 'customer_email', 'warehouse@example.test');
fdf_set_value($fdf, 'delivery_city', 'Tula');

$result = fdf_next_field_name($fdf, 'delivery_city');
echo $result, PHP_EOL;
$next = fdf_next_field_name($fdf, $result);
echo 'next-field=', $next === '' ? '<конец>' : $next, PHP_EOL;
fdf_close($fdf);

fdf_next_field_name показана в контексте интеграции заказа; официальный тип возврата — string. Код проходит синтаксическую проверку; фактический FDF-результат требует ext/fdf, FDF Toolkit и указанные fixtures. Второй вариант меняет данные и проверяет реальный тип/артефакт, а не печатает заранее подготовленную строку.
Что должно получиться в совместимом окружении: Строка по договору функции; пустая строка может быть допустимым значением только там, где это прямо указано. Второй вызов показывает переход к следующему имени либо конец списка.

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

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

Purpose: Get the next field name

Description Gets the name of the field after the given field. This name can be used with several functions.

Return: Return Values Returns the field name as a string.

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

fdf_openОткрыть в данных PDF-формы.

PHP 4, PHP 5 < 5.3.0, PECL fdf SVN · fdf; FDF Toolkit

fdf_open(string $filename): resource

Открыть в данных PDF-формы.

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

Доступность. Точная строка официального versions.xml: PHP 4, PHP 5 < 5.3.0, PECL fdf SVN.

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

Path to the FDF file. This file must contain the data as returned from a PDF form or created using fdf_create and fdf_save .

Возврат. Тип resource. Официальный текст: Return Values Returns a FDF document handle, or false on error.

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

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

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

$path = __DIR__ . '/fixtures/order.fdf';
if (!is_file($path)) { throw new RuntimeException('Нужен учебный FDF-файл'); }

$result = fdf_open(__DIR__ . '/fixtures/order.fdf');
if ($result === false) { throw new RuntimeException('Ресурс не получен'); }
echo 'Получен открытый FDF-ресурс', PHP_EOL;
fdf_close($result);

fdf_open показана в контексте минимального вызова; официальный тип возврата — resource. Код проходит синтаксическую проверку; фактический FDF-результат требует ext/fdf, FDF Toolkit и указанные fixtures. Перед вызовом показано только необходимое состояние ресурса.
Что должно получиться в совместимом окружении: Получен открытый FDF-ресурс

Рабочий сценарий: fdf_openПример для указанного окружения
<?php
declare(strict_types=1);

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

$path = __DIR__ . '/fixtures/incoming-delivery.fdf';
if (!is_file($path)) { throw new RuntimeException('Нужен учебный FDF-файл'); }

$result = fdf_open(__DIR__ . '/fixtures/incoming-delivery.fdf');
if ($result === false) { throw new RuntimeException('Ресурс не получен'); }
echo 'Получен открытый FDF-ресурс', PHP_EOL;
$version = fdf_get_version($result);
echo 'opened-version=', $version !== '' ? $version : '<не указана>', PHP_EOL;
fdf_close($result);

fdf_open показана в контексте интеграции заказа; официальный тип возврата — resource. Код проходит синтаксическую проверку; фактический FDF-результат требует ext/fdf, FDF Toolkit и указанные fixtures. Второй вариант меняет данные и проверяет реальный тип/артефакт, а не печатает заранее подготовленную строку.
Что должно получиться в совместимом окружении: Получен открытый FDF-ресурс Открытый документ дополнительно прочитан через fdf_get_version().

Отказ и граница проверки. сначала проверяется заявленный тип результата. Проверьте существование/непустоту входа, совместимость FDF Toolkit и закройте только успешно открытый ресурс.

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

Purpose: Open a FDF document

Description Opens a file with form data. You can also use fdf_open_string to process the results of a PDF form POST request.

Return: Return Values Returns a FDF document handle, or false on error.

Связанные операции: fdf_open_string, fdf_close, fdf_create, fdf_save.

fdf_open_stringОткрыть string в данных PDF-формы.

PHP 4 >= 4.3.0, PHP 5 < 5.3.0, PECL fdf SVN · fdf; FDF Toolkit

fdf_open_string(string $fdf_data): resource

Открыть string в данных PDF-формы.

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

Доступность. Точная строка официального versions.xml: PHP 4 >= 4.3.0, PHP 5 < 5.3.0, PECL fdf SVN.

ПараметрЧто приходит и зачем
string $fdf_dataПолные байты FDF-документа, а не произвольная строка или PDF.
Точная формулировка PHP Manual

The data as returned from a PDF form or created using fdf_create and fdf_save_string .

Возврат. Тип resource. Официальный текст: Return Values Returns a FDF document handle, or false on error.

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

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

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

$fdfData = file_get_contents(__DIR__ . '/fixtures/order.fdf');
if (!is_string($fdfData) || $fdfData === '') { throw new RuntimeException('FDF не прочитан'); }

$result = fdf_open_string($fdfData);
if ($result === false) { throw new RuntimeException('Ресурс не получен'); }
echo 'Получен открытый FDF-ресурс', PHP_EOL;
fdf_close($result);

fdf_open_string показана в контексте минимального вызова; официальный тип возврата — resource. Код проходит синтаксическую проверку; фактический FDF-результат требует ext/fdf, FDF Toolkit и указанные fixtures. Перед вызовом показано только необходимое состояние ресурса.
Что должно получиться в совместимом окружении: Получен открытый FDF-ресурс

Рабочий сценарий: fdf_open_stringПример для указанного окружения
<?php
declare(strict_types=1);

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

$fdfData = file_get_contents(__DIR__ . '/fixtures/incoming-delivery.fdf');
if (!is_string($fdfData) || $fdfData === '') { throw new RuntimeException('FDF не прочитан'); }

$result = fdf_open_string($fdfData);
if ($result === false) { throw new RuntimeException('Ресурс не получен'); }
echo 'Получен открытый FDF-ресурс', PHP_EOL;
$version = fdf_get_version($result);
echo 'opened-version=', $version !== '' ? $version : '<не указана>', PHP_EOL;
fdf_close($result);

fdf_open_string показана в контексте интеграции заказа; официальный тип возврата — resource. Код проходит синтаксическую проверку; фактический FDF-результат требует ext/fdf, FDF Toolkit и указанные fixtures. Второй вариант меняет данные и проверяет реальный тип/артефакт, а не печатает заранее подготовленную строку.
Что должно получиться в совместимом окружении: Получен открытый FDF-ресурс Открытый документ дополнительно прочитан через fdf_get_version().

Отказ и граница проверки. сначала проверяется заявленный тип результата. Проверьте существование/непустоту входа, совместимость FDF Toolkit и закройте только успешно открытый ресурс.

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

Purpose: Read a FDF document from a string

Description Reads form data from a string. You can use fdf_open_string together with $HTTP_FDF_DATA to process FDF form input from a remote client.

Return: Return Values Returns a FDF document handle, or false on error.

Связанные операции: fdf_open, fdf_close, fdf_create, fdf_save_string.

fdf_remove_itemУдалить выбранный элемент словаря конкретного поля FDF перед сохранением или передачей формы.

PHP 4 >= 4.3.0, PHP 5 < 5.3.0, PECL fdf SVN · fdf; FDF Toolkit

fdf_remove_item(resource $fdf_document, string $fieldname, int $item): bool

Удалить выбранный элемент словаря конкретного поля FDF перед сохранением или передачей формы.

Официальная сигнатура. fdf_remove_item(resource $fdf_document, string $fieldname, int $item): bool.

Доступность. Точная строка официального versions.xml: PHP 4 >= 4.3.0, PHP 5 < 5.3.0, PECL fdf SVN.

ПараметрЧто приходит и зачем
resource $fdf_documentОткрытый FDF-ресурс. Его получают через fdf_create(), fdf_open() или fdf_open_string().
string $fieldnameТочное имя поля из PDF-формы.
int $itemЧисловой ключ/тип элемента FDF, который нужно удалить.

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

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

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

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

$fdf = fdf_create();
if ($fdf === false) { throw new RuntimeException('FDF не создан'); }

fdf_set_value($fdf, 'customer_email', 'buyer@example.test');
fdf_set_value($fdf, 'delivery_city', 'Kolomna');

$result = fdf_remove_item($fdf, 'customer_email', FDFValue);
if ($result !== true) { throw new RuntimeException('Операция FDF отклонена'); }
var_dump($result);
fdf_close($fdf);

fdf_remove_item показана в контексте минимального вызова; официальный тип возврата — bool. Код проходит синтаксическую проверку; фактический FDF-результат требует ext/fdf, FDF Toolkit и указанные fixtures. Перед вызовом показано только необходимое состояние ресурса.
Что должно получиться в совместимом окружении: bool(true)

Рабочий сценарий: fdf_remove_itemПример для указанного окружения
<?php
declare(strict_types=1);

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

$fdf = fdf_create();
if ($fdf === false) { throw new RuntimeException('FDF не создан'); }

fdf_set_value($fdf, 'customer_email', 'warehouse@example.test');
fdf_set_value($fdf, 'delivery_city', 'Tula');

$result = fdf_remove_item($fdf, 'delivery_city', FDFValue);
if ($result !== true) { throw new RuntimeException('Операция FDF отклонена'); }
var_dump($result);
$afterRemoval = fdf_get_value($fdf, 'delivery_city');
if ($afterRemoval !== false && $afterRemoval !== null && $afterRemoval !== '') { throw new RuntimeException('Значение осталось после удаления'); }
$snapshot = fdf_save_string($fdf);
if (!is_string($snapshot) || !str_starts_with($snapshot, '%FDF-')) { throw new RuntimeException('FDF после удаления не сериализован'); }
echo 'item=removed snapshot-bytes=', strlen($snapshot), PHP_EOL;
fdf_close($fdf);

fdf_remove_item показана в контексте интеграции заказа; официальный тип возврата — bool. Код проходит синтаксическую проверку; фактический FDF-результат требует ext/fdf, FDF Toolkit и указанные fixtures. Второй вариант меняет данные и проверяет реальный тип/артефакт, а не печатает заранее подготовленную строку.
Что должно получиться в совместимом окружении: bool(true) Удаление подтверждено чтением поля и сериализацией изменённого FDF.

Отказ и граница проверки. успех подтверждает только строгое true. После изменения сериализуйте FDF и прочитайте затронутое поле обратно: успешный вызов ещё не доказывает видимость в конкретном PDF.

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

Purpose: Sets target frame for form

Description

Return:

fdf_saveСохранить в данных PDF-формы.

PHP 4, PHP 5 < 5.3.0, PECL fdf SVN · fdf; FDF Toolkit

fdf_save(resource $fdf_document, string $filename = ?): bool

Сохранить в данных PDF-формы.

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

Доступность. Точная строка официального versions.xml: PHP 4, PHP 5 < 5.3.0, PECL fdf SVN.

ПараметрЧто приходит и зачем
resource $fdf_documentОткрытый FDF-ресурс. Его получают через fdf_create(), fdf_open() или fdf_open_string().
Точная формулировка PHP Manual

The FDF document handle, returned by fdf_create , fdf_open or fdf_open_string .

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

If provided, the resulting FDF will be written in this parameter. Otherwise, this function will write the FDF to the default PHP output stream.

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

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

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

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

$fdf = fdf_create();
if ($fdf === false) { throw new RuntimeException('FDF не создан'); }

$outputDir = __DIR__ . '/exports';
if (!is_dir($outputDir) && !mkdir($outputDir, 0775, true) && !is_dir($outputDir)) {
    throw new RuntimeException('Не создан каталог exports');
}

$result = fdf_save($fdf, __DIR__ . '/exports/order-42.fdf');
if ($result !== true) { throw new RuntimeException('Операция FDF отклонена'); }
var_dump($result);
fdf_close($fdf);

fdf_save показана в контексте минимального вызова; официальный тип возврата — bool. Код проходит синтаксическую проверку; фактический FDF-результат требует ext/fdf, FDF Toolkit и указанные fixtures. Перед вызовом показано только необходимое состояние ресурса.
Что должно получиться в совместимом окружении: bool(true)

Рабочий сценарий: fdf_saveПример для указанного окружения
<?php
declare(strict_types=1);

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

$fdf = fdf_create();
if ($fdf === false) { throw new RuntimeException('FDF не создан'); }

$outputDir = __DIR__ . '/exports';
if (!is_dir($outputDir) && !mkdir($outputDir, 0775, true) && !is_dir($outputDir)) {
    throw new RuntimeException('Не создан каталог exports');
}

$result = fdf_save($fdf, __DIR__ . '/exports/delivery-73.fdf');
if ($result !== true) { throw new RuntimeException('Операция FDF отклонена'); }
var_dump($result);
$savedPath = __DIR__ . '/exports/delivery-73.fdf';
if (!is_file($savedPath) || filesize($savedPath) === 0) { throw new RuntimeException('FDF-файл не появился'); }
echo 'saved-bytes=', filesize($savedPath), PHP_EOL;
fdf_close($fdf);

fdf_save показана в контексте интеграции заказа; официальный тип возврата — bool. Код проходит синтаксическую проверку; фактический FDF-результат требует ext/fdf, FDF Toolkit и указанные fixtures. Второй вариант меняет данные и проверяет реальный тип/артефакт, а не печатает заранее подготовленную строку.
Что должно получиться в совместимом окружении: bool(true) После сохранения проверены существование и ненулевой размер файла.

Отказ и граница проверки. успех подтверждает только строгое true. Проверьте право записи или состояние HTTP-заголовков, затем FDF-сигнатуру, ненулевой размер и повторное открытие.

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

Purpose: Save a FDF document

Description Saves a FDF document.

Return: Return Values Returns true on success.

Связанные операции: fdf_close, fdf_create, fdf_save_string.

fdf_save_stringСохранить string в данных PDF-формы.

PHP 4 >= 4.3.0, PHP 5 < 5.3.0, PECL fdf SVN · fdf; FDF Toolkit

fdf_save_string(resource $fdf_document): string

Сохранить string в данных PDF-формы.

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

Доступность. Точная строка официального versions.xml: PHP 4 >= 4.3.0, PHP 5 < 5.3.0, PECL fdf SVN.

ПараметрЧто приходит и зачем
resource $fdf_documentОткрытый FDF-ресурс. Его получают через fdf_create(), fdf_open() или fdf_open_string().
Точная формулировка PHP Manual

The FDF document handle, returned by fdf_create , fdf_open or fdf_open_string .

Возврат. Тип string. Официальный текст: Return Values Returns the document as a string, or false on error.

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

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

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

$fdf = fdf_create();
if ($fdf === false) { throw new RuntimeException('FDF не создан'); }

fdf_set_value($fdf, 'order_id', '42');
$result = fdf_save_string($fdf);
echo $result, PHP_EOL;
fdf_close($fdf);

fdf_save_string показана в контексте минимального вызова; официальный тип возврата — string. Код проходит синтаксическую проверку; фактический FDF-результат требует ext/fdf, FDF Toolkit и указанные fixtures. Перед вызовом показано только необходимое состояние ресурса.
Что должно получиться в совместимом окружении: Строка по договору функции; пустая строка может быть допустимым значением только там, где это прямо указано.

Рабочий сценарий: fdf_save_stringПример для указанного окружения
<?php
declare(strict_types=1);

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

$fdf = fdf_create();
if ($fdf === false) { throw new RuntimeException('FDF не создан'); }

fdf_set_value($fdf, 'order_id', '73');
$result = fdf_save_string($fdf);
echo $result, PHP_EOL;
if (!str_starts_with($result, '%FDF-')) { throw new RuntimeException('Нет FDF-сигнатуры'); }
echo 'fdf-bytes=', strlen($result), PHP_EOL;
fdf_close($fdf);

fdf_save_string показана в контексте интеграции заказа; официальный тип возврата — string. Код проходит синтаксическую проверку; фактический FDF-результат требует ext/fdf, FDF Toolkit и указанные fixtures. Второй вариант меняет данные и проверяет реальный тип/артефакт, а не печатает заранее подготовленную строку.
Что должно получиться в совместимом окружении: Строка по договору функции; пустая строка может быть допустимым значением только там, где это прямо указано. Бинарная строка проверена по сигнатуре и размеру.

Отказ и граница проверки. сначала проверяется заявленный тип результата. Проверьте право записи или состояние HTTP-заголовков, затем FDF-сигнатуру, ненулевой размер и повторное открытие.

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

Purpose: Returns the FDF document as a string

Description Returns the FDF document as a string.

Return: Return Values Returns the document as a string, or false on error.

Связанные операции: fdf_open_string, fdf_close, fdf_create, fdf_save.

fdf_set_apНастроить внешний вид поля в данных PDF-формы.

PHP 4, PHP 5 < 5.3.0, PECL fdf SVN · fdf; FDF Toolkit

fdf_set_ap(resource $fdf_document, string $field_name, int $face, string $filename, int $page_number): bool

Настроить внешний вид поля в данных PDF-формы.

Официальная сигнатура. fdf_set_ap(resource $fdf_document, string $field_name, int $face, string $filename, int $page_number): bool.

Доступность. Точная строка официального versions.xml: PHP 4, PHP 5 < 5.3.0, PECL fdf SVN.

ПараметрЧто приходит и зачем
resource $fdf_documentОткрытый FDF-ресурс. Его получают через fdf_create(), fdf_open() или fdf_open_string().
Точная формулировка PHP Manual

The FDF document handle, returned by fdf_create , fdf_open or fdf_open_string .

string $field_nameТочное имя поля из PDF-формы.
int $faceВариант внешнего вида поля (например, обычное/нажатое состояние), заданный константой FDF.
Точная формулировка PHP Manual

The possible values are FDFNormalAP , FDFRolloverAP and FDFDownAP .

string $filenameПуть к локальному файлу. Для пользовательского ввода заранее ограничивают разрешённый каталог.
int $page_numberНомер страницы PDF-шаблона, используемой как внешний вид поля.

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

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

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

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

$fdf = fdf_create();
if ($fdf === false) { throw new RuntimeException('FDF не создан'); }

$appearancePath = __DIR__ . '/fixtures/customer-email.ap';
if (!is_file($appearancePath)) { throw new RuntimeException('Нужен appearance fixture'); }

$result = fdf_set_ap($fdf, 'customer_signature', FDFNormalAP, $appearancePath, 1);
if ($result !== true) { throw new RuntimeException('Операция FDF отклонена'); }
var_dump($result);
fdf_close($fdf);

fdf_set_ap показана в контексте минимального вызова; официальный тип возврата — bool. Код проходит синтаксическую проверку; фактический FDF-результат требует ext/fdf, FDF Toolkit и указанные fixtures. Перед вызовом показано только необходимое состояние ресурса.
Что должно получиться в совместимом окружении: bool(true)

Рабочий сценарий: fdf_set_apПример для указанного окружения
<?php
declare(strict_types=1);

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

$appearancePath = __DIR__ . '/fixtures/delivery-signature.ap';
if (!is_file($appearancePath) || filesize($appearancePath) === 0) { throw new RuntimeException('Нужен непустой appearance fixture'); }
$fdf = fdf_create();
if ($fdf === false) { throw new RuntimeException('FDF не создан'); }
fdf_set_value($fdf, 'delivery_signature', 'Подпись получателя');
$result = fdf_set_ap($fdf, 'delivery_signature', FDFNormalAP, $appearancePath, 1);
if ($result !== true) { fdf_close($fdf); throw new RuntimeException('Appearance не назначен'); }
$bytes = fdf_save_string($fdf);
fdf_close($fdf);
if (!is_string($bytes) || !str_starts_with($bytes, '%FDF-')) { throw new RuntimeException('FDF не сериализован'); }
echo 'appearance-source-sha256=', hash_file('sha256', $appearancePath), PHP_EOL;
echo 'fdf-bytes=', strlen($bytes), PHP_EOL;

fdf_set_ap: Внешний appearance проверяется как fixture, назначается конкретному полю и странице, а изменённый FDF сериализуется. Runtime требует ext/fdf и FDF Toolkit; локально выполнен только PHP lint.
Что должно получиться в совместимом окружении: appearance-source-sha256=<64 hex-символа> fdf-bytes=<положительное число>

Отказ и граница проверки. успех подтверждает только строгое true. После изменения сериализуйте FDF и прочитайте затронутое поле обратно: успешный вызов ещё не доказывает видимость в конкретном PDF.

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

Purpose: Set the appearance of a field

Description Sets the appearance of a field (i.e. the value of the /AP key).

Return: Return Values Returns true on success.

fdf_set_encodingНастроить кодировку в данных PDF-формы.

PHP 4 >= 4.0.7, PHP 5 < 5.3.0, PECL fdf SVN · fdf; FDF Toolkit

fdf_set_encoding(resource $fdf_document, string $encoding): bool

Настроить кодировку в данных PDF-формы.

Официальная сигнатура. fdf_set_encoding(resource $fdf_document, string $encoding): bool.

Доступность. Точная строка официального versions.xml: PHP 4 >= 4.0.7, PHP 5 < 5.3.0, PECL fdf SVN.

ПараметрЧто приходит и зачем
resource $fdf_documentОткрытый FDF-ресурс. Его получают через fdf_create(), fdf_open() или fdf_open_string().
Точная формулировка PHP Manual

The FDF document handle, returned by fdf_create , fdf_open or fdf_open_string .

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

The encoding name. The following values are supported: " Shift-JIS ", " UHC ", " GBK " and " BigFive ". An empty string resets the encoding to the default PDFDocEncoding/Unicode scheme.

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

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

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

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

$fdf = fdf_create();
if ($fdf === false) { throw new RuntimeException('FDF не создан'); }

$result = fdf_set_encoding($fdf, 'Unicode');
if ($result !== true) { throw new RuntimeException('Операция FDF отклонена'); }
var_dump($result);
fdf_close($fdf);

fdf_set_encoding показана в контексте минимального вызова; официальный тип возврата — bool. Код проходит синтаксическую проверку; фактический FDF-результат требует ext/fdf, FDF Toolkit и указанные fixtures. Перед вызовом показано только необходимое состояние ресурса.
Что должно получиться в совместимом окружении: bool(true)

Рабочий сценарий: fdf_set_encodingПример для указанного окружения
<?php
declare(strict_types=1);

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

$fdf = fdf_create();
if ($fdf === false) { throw new RuntimeException('FDF не создан'); }

$result = fdf_set_encoding($fdf, 'Shift-JIS');
if ($result !== true) { throw new RuntimeException('Операция FDF отклонена'); }
var_dump($result);
$roundTrip = fdf_get_encoding($fdf);
if ($roundTrip === false || $roundTrip === null || $roundTrip === '') { throw new RuntimeException('Записанное значение не прочиталось обратно'); }
echo 'round-trip=', is_scalar($roundTrip) ? (string) $roundTrip : get_debug_type($roundTrip), PHP_EOL;
fdf_close($fdf);

fdf_set_encoding показана в контексте интеграции заказа; официальный тип возврата — bool. Код проходит синтаксическую проверку; фактический FDF-результат требует ext/fdf, FDF Toolkit и указанные fixtures. Второй вариант меняет данные и проверяет реальный тип/артефакт, а не печатает заранее подготовленную строку.
Что должно получиться в совместимом окружении: bool(true) Записанное значение прочитано обратно из того же FDF-ресурса.

Отказ и граница проверки. успех подтверждает только строгое true. После изменения сериализуйте FDF и прочитайте затронутое поле обратно: успешный вызов ещё не доказывает видимость в конкретном PDF.

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

Purpose: Sets FDF character encoding

Description Sets the character encoding for the FDF document.

Return: Return Values Returns true on success.

fdf_set_fileНастроить связанный файл в данных PDF-формы.

PHP 4, PHP 5 < 5.3.0, PECL fdf SVN · fdf; FDF Toolkit

fdf_set_file(resource $fdf_document, string $url, string $target_frame = ?): bool

Настроить связанный файл в данных PDF-формы.

Официальная сигнатура. fdf_set_file(resource $fdf_document, string $url, string $target_frame = ?): bool.

Доступность. Точная строка официального versions.xml: PHP 4, PHP 5 < 5.3.0, PECL fdf SVN.

ПараметрЧто приходит и зачем
resource $fdf_documentОткрытый FDF-ресурс. Его получают через fdf_create(), fdf_open() или fdf_open_string().
Точная формулировка PHP Manual

The FDF document handle, returned by fdf_create , fdf_open or fdf_open_string .

string $urlАдрес связанного PDF или веб-ссылки. Для внешнего ввода разрешайте только ожидаемые схемы/хосты.
Точная формулировка PHP Manual

Should be given as an absolute URL.

string $target_frame = значение по умолчаниюНеобязательный целевой фрейм при открытии связанного PDF.
Точная формулировка PHP Manual

Use this parameter to specify the frame in which the document will be displayed. You can also set the default value for this parameter using fdf_set_target_frame .

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

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

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

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

$fdf = fdf_create();
if ($fdf === false) { throw new RuntimeException('FDF не создан'); }

$result = fdf_set_file($fdf, 'invoice.pdf', '_self');
if ($result !== true) { throw new RuntimeException('Операция FDF отклонена'); }
var_dump($result);
fdf_close($fdf);

fdf_set_file показана в контексте минимального вызова; официальный тип возврата — bool. Код проходит синтаксическую проверку; фактический FDF-результат требует ext/fdf, FDF Toolkit и указанные fixtures. Перед вызовом показано только необходимое состояние ресурса.
Что должно получиться в совместимом окружении: bool(true)

Рабочий сценарий: fdf_set_fileПример для указанного окружения
<?php
declare(strict_types=1);

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

$fdf = fdf_create();
if ($fdf === false) { throw new RuntimeException('FDF не создан'); }

$result = fdf_set_file($fdf, 'delivery.pdf', '_blank');
if ($result !== true) { throw new RuntimeException('Операция FDF отклонена'); }
var_dump($result);
$roundTrip = fdf_get_file($fdf);
if ($roundTrip === false || $roundTrip === null || $roundTrip === '') { throw new RuntimeException('Записанное значение не прочиталось обратно'); }
echo 'round-trip=', is_scalar($roundTrip) ? (string) $roundTrip : get_debug_type($roundTrip), PHP_EOL;
fdf_close($fdf);

fdf_set_file показана в контексте интеграции заказа; официальный тип возврата — bool. Код проходит синтаксическую проверку; фактический FDF-результат требует ext/fdf, FDF Toolkit и указанные fixtures. Второй вариант меняет данные и проверяет реальный тип/артефакт, а не печатает заранее подготовленную строку.
Что должно получиться в совместимом окружении: bool(true) Записанное значение прочитано обратно из того же FDF-ресурса.

Отказ и граница проверки. успех подтверждает только строгое true. После изменения сериализуйте FDF и прочитайте затронутое поле обратно: успешный вызов ещё не доказывает видимость в конкретном PDF.

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

Purpose: Set PDF document to display FDF data in

Description Selects a different PDF document to display the form results in than the form it originated from.

Return: Return Values Returns true on success.

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

fdf_set_flagsНастроить флаги поля в данных PDF-формы.

PHP 4 >= 4.0.2, PHP 5 < 5.3.0, PECL fdf SVN · fdf; FDF Toolkit

fdf_set_flags(resource $fdf_document, string $fieldname, int $whichFlags, int $newFlags): bool

Настроить флаги поля в данных PDF-формы.

Официальная сигнатура. fdf_set_flags(resource $fdf_document, string $fieldname, int $whichFlags, int $newFlags): bool.

Доступность. Точная строка официального versions.xml: PHP 4 >= 4.0.2, PHP 5 < 5.3.0, PECL fdf SVN.

ПараметрЧто приходит и зачем
resource $fdf_documentОткрытый FDF-ресурс. Его получают через fdf_create(), fdf_open() или fdf_open_string().
Точная формулировка PHP Manual

The FDF document handle, returned by fdf_create , fdf_open or fdf_open_string .

string $fieldnameТочное имя поля из PDF-формы.
Точная формулировка PHP Manual

Name of the FDF field, as a string.

int $whichFlagsНабор флагов FDF, который нужно изменить.
int $newFlagsНовая битовая маска флагов поля после выбора набора whichFlags.

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

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

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

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

$fdf = fdf_create();
if ($fdf === false) { throw new RuntimeException('FDF не создан'); }

$result = fdf_set_flags($fdf, 'customer_email', FDFSetFf, 1);
if ($result !== true) { throw new RuntimeException('Операция FDF отклонена'); }
var_dump($result);
fdf_close($fdf);

fdf_set_flags показана в контексте минимального вызова; официальный тип возврата — bool. Код проходит синтаксическую проверку; фактический FDF-результат требует ext/fdf, FDF Toolkit и указанные fixtures. Перед вызовом показано только необходимое состояние ресурса.
Что должно получиться в совместимом окружении: bool(true)

Рабочий сценарий: fdf_set_flagsПример для указанного окружения
<?php
declare(strict_types=1);

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

$fdf = fdf_create();
if ($fdf === false) { throw new RuntimeException('FDF не создан'); }
fdf_set_value($fdf, 'order_id', '73');
$result = fdf_set_flags($fdf, 'order_id', FDFSetFf, 2);
if ($result !== true) { fdf_close($fdf); throw new RuntimeException('Флаг поля не задан'); }
$storedFlags = fdf_get_flags($fdf, 'order_id', FDFSetFf);
if ($storedFlags !== 2) { fdf_close($fdf); throw new RuntimeException('Флаг не прочитался обратно'); }
$bytes = fdf_save_string($fdf);
fdf_close($fdf);
if (!is_string($bytes) || !str_starts_with($bytes, '%FDF-')) { throw new RuntimeException('FDF не сериализован'); }
echo 'set-flags=', $storedFlags, ' fdf-bytes=', strlen($bytes), PHP_EOL;

fdf_set_flags: Записанный набор флагов читается обратно из того же поля и только затем документ сериализуется. Runtime требует ext/fdf и FDF Toolkit; локально выполнен только PHP lint.
Что должно получиться в совместимом окружении: set-flags=2 fdf-bytes=<положительное число>

Отказ и граница проверки. успех подтверждает только строгое true. После изменения сериализуйте FDF и прочитайте затронутое поле обратно: успешный вызов ещё не доказывает видимость в конкретном PDF.

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

Purpose: Sets a flag of a field

Description Sets certain flags of the given field.

Return: Return Values Returns true on success.

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

fdf_set_javascript_actionНастроить javascript action в данных PDF-формы.

PHP 4 >= 4.0.2, PHP 5 < 5.3.0, PECL fdf SVN · fdf; FDF Toolkit

fdf_set_javascript_action(resource $fdf_document, string $fieldname, int $trigger, string $script): bool

Настроить javascript action в данных PDF-формы.

Официальная сигнатура. fdf_set_javascript_action(resource $fdf_document, string $fieldname, int $trigger, string $script): bool.

Доступность. Точная строка официального versions.xml: PHP 4 >= 4.0.2, PHP 5 < 5.3.0, PECL fdf SVN.

ПараметрЧто приходит и зачем
resource $fdf_documentОткрытый FDF-ресурс. Его получают через fdf_create(), fdf_open() или fdf_open_string().
Точная формулировка PHP Manual

The FDF document handle, returned by fdf_create , fdf_open or fdf_open_string .

string $fieldnameТочное имя поля из PDF-формы.
Точная формулировка PHP Manual

Name of the FDF field, as a string.

int $triggerСобытие FDF/PDF, заданное подходящей константой FDFEnter/FDFExit и т. п.
string $scriptJavaScript PDF/FDF. Он выполняется на стороне совместимого просмотрщика, а не в PHP.

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

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

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

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

$fdf = fdf_create();
if ($fdf === false) { throw new RuntimeException('FDF не создан'); }

$result = fdf_set_javascript_action($fdf, 'submit_order', FDFEnter, 'app.alert(\"Готово\")');
if ($result !== true) { throw new RuntimeException('Операция FDF отклонена'); }
var_dump($result);
fdf_close($fdf);

fdf_set_javascript_action показана в контексте минимального вызова; официальный тип возврата — bool. Код проходит синтаксическую проверку; фактический FDF-результат требует ext/fdf, FDF Toolkit и указанные fixtures. Перед вызовом показано только необходимое состояние ресурса.
Что должно получиться в совместимом окружении: bool(true)

Рабочий сценарий: fdf_set_javascript_actionПример для указанного окружения
<?php
declare(strict_types=1);

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

$fdf = fdf_create();
if ($fdf === false) { throw new RuntimeException('FDF не создан'); }
fdf_set_value($fdf, 'delivery_city', '');
$script = 'if (event.value === "") { app.alert("Укажите город"); }';
$result = fdf_set_javascript_action($fdf, 'delivery_city', FDFExit, $script);
if ($result !== true) { fdf_close($fdf); throw new RuntimeException('JavaScript-action не задан'); }
$bytes = fdf_save_string($fdf);
fdf_close($fdf);
if (!is_string($bytes) || !str_starts_with($bytes, '%FDF-')) { throw new RuntimeException('FDF не сериализован'); }
echo 'trigger=FDFExit script-bytes=', strlen($script), PHP_EOL;
echo 'fdf-bytes=', strlen($bytes), PHP_EOL;

fdf_set_javascript_action: Поле проверяется при выходе из него; действие сохраняется в реальный FDF-снимок, а не подтверждается одним bool(true). Runtime требует ext/fdf и FDF Toolkit; локально выполнен только PHP lint.
Что должно получиться в совместимом окружении: trigger=FDFExit script-bytes=<положительное число> fdf-bytes=<положительное число>

Отказ и граница проверки. успех подтверждает только строгое true. После изменения сериализуйте FDF и прочитайте затронутое поле обратно: успешный вызов ещё не доказывает видимость в конкретном PDF.

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

Purpose: Sets an javascript action of a field

Description Sets a javascript action for the given field.

Return: Return Values Returns true on success.

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

fdf_set_on_import_javascriptНастроить on import javascript в данных PDF-формы.

PHP 4 >= 4.3.0, PHP 5 < 5.3.0, PECL fdf SVN · fdf; FDF Toolkit

fdf_set_on_import_javascript(resource $fdf_document, string $script, bool $before_data_import): bool

Настроить on import javascript в данных PDF-формы.

Официальная сигнатура. fdf_set_on_import_javascript(resource $fdf_document, string $script, bool $before_data_import): bool.

Доступность. Точная строка официального versions.xml: PHP 4 >= 4.3.0, PHP 5 < 5.3.0, PECL fdf SVN.

ПараметрЧто приходит и зачем
resource $fdf_documentОткрытый FDF-ресурс. Его получают через fdf_create(), fdf_open() или fdf_open_string().
string $scriptJavaScript PDF/FDF. Он выполняется на стороне совместимого просмотрщика, а не в PHP.
bool $before_data_importЕсли true, JavaScript выполняется до импорта полей; false — после него.

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

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

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

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

$fdf = fdf_create();
if ($fdf === false) { throw new RuntimeException('FDF не создан'); }

$result = fdf_set_on_import_javascript($fdf, 'app.alert(\"Готово\")', true);
if ($result !== true) { throw new RuntimeException('Операция FDF отклонена'); }
var_dump($result);
fdf_close($fdf);

fdf_set_on_import_javascript показана в контексте минимального вызова; официальный тип возврата — bool. Код проходит синтаксическую проверку; фактический FDF-результат требует ext/fdf, FDF Toolkit и указанные fixtures. Перед вызовом показано только необходимое состояние ресурса.
Что должно получиться в совместимом окружении: bool(true)

Рабочий сценарий: fdf_set_on_import_javascriptПример для указанного окружения
<?php
declare(strict_types=1);

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

$fdf = fdf_create();
if ($fdf === false) { throw new RuntimeException('FDF не создан'); }
fdf_set_value($fdf, 'order_id', '73');
$script = 'this.getField("order_id").readonly = true;';
$result = fdf_set_on_import_javascript($fdf, $script, true);
if ($result !== true) { fdf_close($fdf); throw new RuntimeException('Import-script не задан'); }
$bytes = fdf_save_string($fdf);
fdf_close($fdf);
if (!is_string($bytes) || !str_starts_with($bytes, '%FDF-')) { throw new RuntimeException('FDF не сериализован'); }
$directory = __DIR__ . '/exports';
if (!is_dir($directory) && !mkdir($directory, 0775, true) && !is_dir($directory)) { throw new RuntimeException('Не создан каталог exports'); }
$path = $directory . '/locked-order-73.fdf';
if (file_put_contents($path, $bytes, LOCK_EX) === false) { throw new RuntimeException('FDF не сохранён'); }
echo basename($path), ' bytes=', filesize($path), PHP_EOL;

fdf_set_on_import_javascript: Скрипт выполняется до импорта данных и блокирует идентификатор заказа; итоговый FDF сохраняется как проверяемый артефакт. Runtime требует ext/fdf и FDF Toolkit; локально выполнен только PHP lint.
Что должно получиться в совместимом окружении: locked-order-73.fdf bytes=<положительное число>

Отказ и граница проверки. успех подтверждает только строгое true. После изменения сериализуйте FDF и прочитайте затронутое поле обратно: успешный вызов ещё не доказывает видимость в конкретном PDF.

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

Purpose: Adds javascript code to be executed when Acrobat opens the FDF

Description

Return:

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

fdf_set_optНастроить элемент списка в данных PDF-формы.

PHP 4 >= 4.0.2, PHP 5 < 5.3.0, PECL fdf SVN · fdf; FDF Toolkit

fdf_set_opt(resource $fdf_document, string $fieldname, int $element, string $str1, string $str2): bool

Настроить элемент списка в данных PDF-формы.

Официальная сигнатура. fdf_set_opt(resource $fdf_document, string $fieldname, int $element, string $str1, string $str2): bool.

Доступность. Точная строка официального versions.xml: PHP 4 >= 4.0.2, PHP 5 < 5.3.0, PECL fdf SVN.

ПараметрЧто приходит и зачем
resource $fdf_documentОткрытый FDF-ресурс. Его получают через fdf_create(), fdf_open() или fdf_open_string().
Точная формулировка PHP Manual

The FDF document handle, returned by fdf_create , fdf_open or fdf_open_string .

string $fieldnameТочное имя поля из PDF-формы.
Точная формулировка PHP Manual

Name of the FDF field, as a string.

int $elementИндекс элемента списка вариантов поля; отсчёт и допустимое значение сверяйте с функцией.
string $str1Отображаемая либо первая строка варианта списка FDF.
string $str2Экспортируемое либо второе значение варианта списка FDF.

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

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

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

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

$fdf = fdf_create();
if ($fdf === false) { throw new RuntimeException('FDF не создан'); }

$result = fdf_set_opt($fdf, 'delivery_city', 0, 'Самовывоз', 'pickup');
if ($result !== true) { throw new RuntimeException('Операция FDF отклонена'); }
var_dump($result);
fdf_close($fdf);

fdf_set_opt показана в контексте минимального вызова; официальный тип возврата — bool. Код проходит синтаксическую проверку; фактический FDF-результат требует ext/fdf, FDF Toolkit и указанные fixtures. Перед вызовом показано только необходимое состояние ресурса.
Что должно получиться в совместимом окружении: bool(true)

Рабочий сценарий: fdf_set_optПример для указанного окружения
<?php
declare(strict_types=1);

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

$fdf = fdf_create();
if ($fdf === false) { throw new RuntimeException('FDF не создан'); }

$result = fdf_set_opt($fdf, 'delivery_method', 1, 'Курьер', 'courier');
if ($result !== true) { throw new RuntimeException('Операция FDF отклонена'); }
var_dump($result);
$roundTrip = fdf_get_opt($fdf, 'delivery_method', 1);
if ($roundTrip === false || $roundTrip === null || $roundTrip === '') { throw new RuntimeException('Записанное значение не прочиталось обратно'); }
echo 'round-trip=', is_scalar($roundTrip) ? (string) $roundTrip : get_debug_type($roundTrip), PHP_EOL;
fdf_close($fdf);

fdf_set_opt показана в контексте интеграции заказа; официальный тип возврата — bool. Код проходит синтаксическую проверку; фактический FDF-результат требует ext/fdf, FDF Toolkit и указанные fixtures. Второй вариант меняет данные и проверяет реальный тип/артефакт, а не печатает заранее подготовленную строку.
Что должно получиться в совместимом окружении: bool(true) Записанное значение прочитано обратно из того же FDF-ресурса.

Отказ и граница проверки. успех подтверждает только строгое true. После изменения сериализуйте FDF и прочитайте затронутое поле обратно: успешный вызов ещё не доказывает видимость в конкретном PDF.

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

Purpose: Sets an option of a field

Description Sets options of the given field.

Return: Return Values Returns true on success.

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

fdf_set_statusНастроить статус в данных PDF-формы.

PHP 4, PHP 5 < 5.3.0, PECL fdf SVN · fdf; FDF Toolkit

fdf_set_status(resource $fdf_document, string $status): bool

Настроить статус в данных PDF-формы.

Официальная сигнатура. fdf_set_status(resource $fdf_document, string $status): bool.

Доступность. Точная строка официального versions.xml: PHP 4, PHP 5 < 5.3.0, PECL fdf SVN.

ПараметрЧто приходит и зачем
resource $fdf_documentОткрытый FDF-ресурс. Его получают через fdf_create(), fdf_open() или fdf_open_string().
Точная формулировка PHP Manual

The FDF document handle, returned by fdf_create , fdf_open or fdf_open_string .

string $statusЧитаемый статус FDF-документа, который увидит получатель формы.

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

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

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

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

$fdf = fdf_create();
if ($fdf === false) { throw new RuntimeException('FDF не создан'); }

$result = fdf_set_status($fdf, 'Черновик');
if ($result !== true) { throw new RuntimeException('Операция FDF отклонена'); }
var_dump($result);
fdf_close($fdf);

fdf_set_status показана в контексте минимального вызова; официальный тип возврата — bool. Код проходит синтаксическую проверку; фактический FDF-результат требует ext/fdf, FDF Toolkit и указанные fixtures. Перед вызовом показано только необходимое состояние ресурса.
Что должно получиться в совместимом окружении: bool(true)

Рабочий сценарий: fdf_set_statusПример для указанного окружения
<?php
declare(strict_types=1);

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

$fdf = fdf_create();
if ($fdf === false) { throw new RuntimeException('FDF не создан'); }

$result = fdf_set_status($fdf, 'Проверено оператором');
if ($result !== true) { throw new RuntimeException('Операция FDF отклонена'); }
var_dump($result);
$roundTrip = fdf_get_status($fdf);
if ($roundTrip === false || $roundTrip === null || $roundTrip === '') { throw new RuntimeException('Записанное значение не прочиталось обратно'); }
echo 'round-trip=', is_scalar($roundTrip) ? (string) $roundTrip : get_debug_type($roundTrip), PHP_EOL;
fdf_close($fdf);

fdf_set_status показана в контексте интеграции заказа; официальный тип возврата — bool. Код проходит синтаксическую проверку; фактический FDF-результат требует ext/fdf, FDF Toolkit и указанные fixtures. Второй вариант меняет данные и проверяет реальный тип/артефакт, а не печатает заранее подготовленную строку.
Что должно получиться в совместимом окружении: bool(true) Записанное значение прочитано обратно из того же FDF-ресурса.

Отказ и граница проверки. успех подтверждает только строгое true. После изменения сериализуйте FDF и прочитайте затронутое поле обратно: успешный вызов ещё не доказывает видимость в конкретном PDF.

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

Purpose: Set the value of the /STATUS key

Description Sets the value of the /STATUS key. When a client receives a FDF with a status set it will present the value in an alert box.

Return: Return Values Returns true on success.

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

fdf_set_submit_form_actionНастроить submit form action в данных PDF-формы.

PHP 4 >= 4.0.2, PHP 5 < 5.3.0, PECL fdf SVN · fdf; FDF Toolkit

fdf_set_submit_form_action(resource $fdf_document, string $fieldname, int $trigger, string $script, int $flags): bool

Настроить submit form action в данных PDF-формы.

Официальная сигнатура. fdf_set_submit_form_action(resource $fdf_document, string $fieldname, int $trigger, string $script, int $flags): bool.

Доступность. Точная строка официального versions.xml: PHP 4 >= 4.0.2, PHP 5 < 5.3.0, PECL fdf SVN.

ПараметрЧто приходит и зачем
resource $fdf_documentОткрытый FDF-ресурс. Его получают через fdf_create(), fdf_open() или fdf_open_string().
Точная формулировка PHP Manual

The FDF document handle, returned by fdf_create , fdf_open or fdf_open_string .

string $fieldnameТочное имя поля из PDF-формы.
Точная формулировка PHP Manual

Name of the FDF field, as a string.

int $triggerСобытие FDF/PDF, заданное подходящей константой FDFEnter/FDFExit и т. п.
string $scriptJavaScript PDF/FDF. Он выполняется на стороне совместимого просмотрщика, а не в PHP.
int $flagsБитовая маска поведения текущей операции; сочетайте только документированные флаги.

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

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

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

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

$fdf = fdf_create();
if ($fdf === false) { throw new RuntimeException('FDF не создан'); }

$result = fdf_set_submit_form_action($fdf, 'submit_order', FDFEnter, 'app.alert(\"Готово\")', 0);
if ($result !== true) { throw new RuntimeException('Операция FDF отклонена'); }
var_dump($result);
fdf_close($fdf);

fdf_set_submit_form_action показана в контексте минимального вызова; официальный тип возврата — bool. Код проходит синтаксическую проверку; фактический FDF-результат требует ext/fdf, FDF Toolkit и указанные fixtures. Перед вызовом показано только необходимое состояние ресурса.
Что должно получиться в совместимом окружении: bool(true)

Рабочий сценарий: fdf_set_submit_form_actionПример для указанного окружения
<?php
declare(strict_types=1);

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

$fdf = fdf_create();
if ($fdf === false) { throw new RuntimeException('FDF не создан'); }
fdf_set_value($fdf, 'confirm_delivery', 'Отправить подтверждение');
$endpoint = 'https://example.test/fdf/delivery/73';
$result = fdf_set_submit_form_action($fdf, 'confirm_delivery', FDFEnter, $endpoint, 0);
if ($result !== true) { fdf_close($fdf); throw new RuntimeException('Submit-action не задан'); }
$bytes = fdf_save_string($fdf);
fdf_close($fdf);
if (!is_string($bytes) || !str_starts_with($bytes, '%FDF-')) { throw new RuntimeException('FDF не сериализован'); }
echo 'submit-host=', parse_url($endpoint, PHP_URL_HOST), PHP_EOL;
echo 'fdf-bytes=', strlen($bytes), PHP_EOL;

fdf_set_submit_form_action: Кнопке подтверждения назначается HTTPS endpoint, после чего изменённый документ сериализуется и проверяется по FDF-сигнатуре. Runtime требует ext/fdf и FDF Toolkit; локально выполнен только PHP lint.
Что должно получиться в совместимом окружении: submit-host=example.test fdf-bytes=<положительное число>

Отказ и граница проверки. успех подтверждает только строгое true. После изменения сериализуйте FDF и прочитайте затронутое поле обратно: успешный вызов ещё не доказывает видимость в конкретном PDF.

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

Purpose: Sets a submit form action of a field

Description Sets a submit form action for the given field.

Return: Return Values Returns true on success.

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

fdf_set_target_frameНастроить target frame в данных PDF-формы.

PHP 4 >= 4.3.0, PHP 5 < 5.3.0, PECL fdf SVN · fdf; FDF Toolkit

fdf_set_target_frame(resource $fdf_document, string $frame_name): bool

Настроить target frame в данных PDF-формы.

Официальная сигнатура. fdf_set_target_frame(resource $fdf_document, string $frame_name): bool.

Доступность. Точная строка официального versions.xml: PHP 4 >= 4.3.0, PHP 5 < 5.3.0, PECL fdf SVN.

ПараметрЧто приходит и зачем
resource $fdf_documentОткрытый FDF-ресурс. Его получают через fdf_create(), fdf_open() или fdf_open_string().
Точная формулировка PHP Manual

The FDF document handle, returned by fdf_create , fdf_open or fdf_open_string .

string $frame_nameИмя целевого фрейма PDF-просмотрщика; не влияет на HTTP-фреймы сервера.
Точная формулировка PHP Manual

The frame name, as a string.

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

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

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

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

$fdf = fdf_create();
if ($fdf === false) { throw new RuntimeException('FDF не создан'); }

$result = fdf_set_target_frame($fdf, '_self');
if ($result !== true) { throw new RuntimeException('Операция FDF отклонена'); }
var_dump($result);
fdf_close($fdf);

fdf_set_target_frame показана в контексте минимального вызова; официальный тип возврата — bool. Код проходит синтаксическую проверку; фактический FDF-результат требует ext/fdf, FDF Toolkit и указанные fixtures. Перед вызовом показано только необходимое состояние ресурса.
Что должно получиться в совместимом окружении: bool(true)

Рабочий сценарий: fdf_set_target_frameПример для указанного окружения
<?php
declare(strict_types=1);

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

$fdf = fdf_create();
if ($fdf === false) { throw new RuntimeException('FDF не создан'); }

$result = fdf_set_target_frame($fdf, 'result-frame');
if ($result !== true) { throw new RuntimeException('Операция FDF отклонена'); }
var_dump($result);
$snapshot = fdf_save_string($fdf);
if (!is_string($snapshot) || !str_starts_with($snapshot, '%FDF-')) { throw new RuntimeException('FDF-снимок не создан'); }
echo 'snapshot-bytes=', strlen($snapshot), PHP_EOL;
fdf_close($fdf);

fdf_set_target_frame показана в контексте интеграции заказа; официальный тип возврата — bool. Код проходит синтаксическую проверку; фактический FDF-результат требует ext/fdf, FDF Toolkit и указанные fixtures. Второй вариант меняет данные и проверяет реальный тип/артефакт, а не печатает заранее подготовленную строку.
Что должно получиться в совместимом окружении: bool(true) Изменённый документ сериализован и проверен по FDF-сигнатуре.

Отказ и граница проверки. успех подтверждает только строгое true. После изменения сериализуйте FDF и прочитайте затронутое поле обратно: успешный вызов ещё не доказывает видимость в конкретном PDF.

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

Purpose: Set target frame for form display

Description Sets the target frame to display a result PDF defined with fdf_save_file in.

Return: Return Values Returns true on success.

fdf_set_valueНастроить значение поля в данных PDF-формы.

PHP 4, PHP 5 < 5.3.0, PECL fdf SVN · fdf; FDF Toolkit

fdf_set_value(resource $fdf_document, string $fieldname, mixed $value, int $isName = ?): bool

Настроить значение поля в данных PDF-формы.

Официальная сигнатура. fdf_set_value(resource $fdf_document, string $fieldname, mixed $value, int $isName = ?): bool.

Доступность. Точная строка официального versions.xml: PHP 4, PHP 5 < 5.3.0, PECL fdf SVN.

ПараметрЧто приходит и зачем
resource $fdf_documentОткрытый FDF-ресурс. Его получают через fdf_create(), fdf_open() или fdf_open_string().
Точная формулировка PHP Manual

The FDF document handle, returned by fdf_create , fdf_open or fdf_open_string .

string $fieldnameТочное имя поля из PDF-формы.
Точная формулировка PHP Manual

Name of the FDF field, as a string.

mixed $valueНовое значение по смыслу текущей операции.
Точная формулировка PHP Manual

This parameter will be stored as a string unless it is an array. In this case all array elements will be stored as a value array.

int $isName = значение по умолчаниюНенулевое значение помечает FDF-значение как PDF Name, а не обычную строку.
Точная формулировка PHP Manual

In older versions of the FDF toolkit last parameter determined if the field value was to be converted to a PDF Name (= 1) or set to a PDF String (= 0). The value is no longer used in the current toolkit version 5.0. For compatibility reasons it is still supported as an optional parameter, but ignored internally.

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

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

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

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

$fdf = fdf_create();
if ($fdf === false) { throw new RuntimeException('FDF не создан'); }

$result = fdf_set_value($fdf, 'customer_email', 'buyer@example.test', 0);
if ($result !== true) { throw new RuntimeException('Операция FDF отклонена'); }
var_dump($result);
fdf_close($fdf);

fdf_set_value показана в контексте минимального вызова; официальный тип возврата — bool. Код проходит синтаксическую проверку; фактический FDF-результат требует ext/fdf, FDF Toolkit и указанные fixtures. Перед вызовом показано только необходимое состояние ресурса.
Что должно получиться в совместимом окружении: bool(true)

Рабочий сценарий: fdf_set_valueПример для указанного окружения
<?php
declare(strict_types=1);

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

$fdf = fdf_create();
if ($fdf === false) { throw new RuntimeException('FDF не создан'); }

$result = fdf_set_value($fdf, 'delivery_city', 'Коломна', 1);
if ($result !== true) { throw new RuntimeException('Операция FDF отклонена'); }
var_dump($result);
$roundTrip = fdf_get_value($fdf, 'delivery_city');
if ($roundTrip === false || $roundTrip === null || $roundTrip === '') { throw new RuntimeException('Записанное значение не прочиталось обратно'); }
echo 'round-trip=', is_scalar($roundTrip) ? (string) $roundTrip : get_debug_type($roundTrip), PHP_EOL;
fdf_close($fdf);

fdf_set_value показана в контексте интеграции заказа; официальный тип возврата — bool. Код проходит синтаксическую проверку; фактический FDF-результат требует ext/fdf, FDF Toolkit и указанные fixtures. Второй вариант меняет данные и проверяет реальный тип/артефакт, а не печатает заранее подготовленную строку.
Что должно получиться в совместимом окружении: bool(true) Записанное значение прочитано обратно из того же FDF-ресурса.

Отказ и граница проверки. успех подтверждает только строгое true. После изменения сериализуйте FDF и прочитайте затронутое поле обратно: успешный вызов ещё не доказывает видимость в конкретном PDF.

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

Purpose: Set the value of a field

Description Sets the value for the given field.

Return: Return Values Returns true on success.

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

fdf_set_versionНастроить версию формата в данных PDF-формы.

PHP 4 >= 4.3.0, PHP 5 < 5.3.0, PECL fdf SVN · fdf; FDF Toolkit

fdf_set_version(resource $fdf_document, string $version): bool

Настроить версию формата в данных PDF-формы.

Официальная сигнатура. fdf_set_version(resource $fdf_document, string $version): bool.

Доступность. Точная строка официального versions.xml: PHP 4 >= 4.3.0, PHP 5 < 5.3.0, PECL fdf SVN.

ПараметрЧто приходит и зачем
resource $fdf_documentОткрытый FDF-ресурс. Его получают через fdf_create(), fdf_open() или fdf_open_string().
Точная формулировка PHP Manual

The FDF document handle, returned by fdf_create , fdf_open or fdf_open_string .

string $versionВерсия FDF-документа, поддерживаемая установленным FDF Toolkit.
Точная формулировка PHP Manual

The version number. For the current FDF toolkit 5.0, this may be either 1.2 , 1.3 or 1.4 .

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

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

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

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

$fdf = fdf_create();
if ($fdf === false) { throw new RuntimeException('FDF не создан'); }

$result = fdf_set_version($fdf, '1.3');
if ($result !== true) { throw new RuntimeException('Операция FDF отклонена'); }
var_dump($result);
fdf_close($fdf);

fdf_set_version показана в контексте минимального вызова; официальный тип возврата — bool. Код проходит синтаксическую проверку; фактический FDF-результат требует ext/fdf, FDF Toolkit и указанные fixtures. Перед вызовом показано только необходимое состояние ресурса.
Что должно получиться в совместимом окружении: bool(true)

Рабочий сценарий: fdf_set_versionПример для указанного окружения
<?php
declare(strict_types=1);

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

$fdf = fdf_create();
if ($fdf === false) { throw new RuntimeException('FDF не создан'); }

$result = fdf_set_version($fdf, '1.4');
if ($result !== true) { throw new RuntimeException('Операция FDF отклонена'); }
var_dump($result);
$roundTrip = fdf_get_version($fdf);
if ($roundTrip === false || $roundTrip === null || $roundTrip === '') { throw new RuntimeException('Записанное значение не прочиталось обратно'); }
echo 'round-trip=', is_scalar($roundTrip) ? (string) $roundTrip : get_debug_type($roundTrip), PHP_EOL;
fdf_close($fdf);

fdf_set_version показана в контексте интеграции заказа; официальный тип возврата — bool. Код проходит синтаксическую проверку; фактический FDF-результат требует ext/fdf, FDF Toolkit и указанные fixtures. Второй вариант меняет данные и проверяет реальный тип/артефакт, а не печатает заранее подготовленную строку.
Что должно получиться в совместимом окружении: bool(true) Записанное значение прочитано обратно из того же FDF-ресурса.

Отказ и граница проверки. успех подтверждает только строгое true. После изменения сериализуйте FDF и прочитайте затронутое поле обратно: успешный вызов ещё не доказывает видимость в конкретном PDF.

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

Purpose: Sets version number for a FDF file

Description Sets the FDF version for the given document. Some features supported by this extension are only available in newer FDF versions.

Return: Return Values Returns true on success.

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

Источники и обсуждения

Код и руководство с собой

Скачайте самостоятельные примеры с исходными данными, инструкциями и ожидаемыми результатами. Примеры HTTP и фрагменты для проекта помечены отдельно: им нужно указанное окружение.

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

Материалы сверены 2026-10-12. Примеры и объяснения написаны для этого руководства; источники и обсуждения доступны в каждой главе.