Документация PDFiumPas

GenerateFormAppearances Метод

Эта запись API сохраняет идентификаторы, сигнатуры, блоки кода и термины PDF в исходном виде.
Компонент: TPdf  ·  Модуль: PDFium
Перестраивает /AP (appearance stream) для каждого виджета формы на каждой странице, отрисовывая каждую страницу через FPDF_FFLDraw. Это рекомендуемый вспомогательный вызов для присваиваний FormField[i] := value — без него значения формы могут быть видны только когда поле находится в фокусе, а любая последующая операция flatten silently потеряет значения. Вызывайте его после всех присваиваний FormField[] и перед SaveAs / FlattenPage / FlattenAllPages

Синтаксис

procedure GenerateFormAppearances;

Описание

GenerateFormAppearances перестраивает запись /AP (appearance stream) для каждого виджета AcroForm на всех страницах загруженного документа. Он делает это, отрисовывая каждую страницу через движок form-fill PDFium (FPDF_FFLDraw), благодаря чему текущие значения полей встраиваются в визуальное представление виджета, хранящееся внутри PDF файла

Этот вызов является обязательным спутником присваиваний FormField[i] := value. Без него значение поля хранится в словаре данных PDF, но не имеет соответствующего appearance stream. PDF viewers обычно показывают значение только пока поле находится в input focus; другие viewers могут не показать ничего. Еще важнее то, что любой вызов FlattenPage или FlattenAllPages без предварительного generation appearances silently produces output without the filled-in values

Правильный workflow при заполнении и блокировке формы таков: присвойте все значения FormField[] → один раз вызовите GenerateFormAppearances → при необходимости вызовите FlattenPage / FlattenAllPages → вызовите SaveAs. Если нужно только сохранить заполненную форму без flattening, GenerateFormAppearances все равно рекомендуется для максимальной совместимости со сторонними PDF viewers

Процедура работает со всем документом за один вызов; отдельного варианта для страницы нет

Пример

begin
  // Assign form field values
  Pdf1.FormField[0] := 'Alice Example';
  Pdf1.FormField[1] := 'alice@example.com';
  Pdf1.FormField[2] := '2026-05-20';
  
  // Bake appearance streams so values are visible in all viewers
  Pdf1.GenerateFormAppearances;
  
  // Flatten and save a non-editable copy
  Pdf1.FlattenAllPages;
  Pdf1.SaveAs('output_filled_flat.pdf');
end;

См. также

FlattenPage, FlattenAllPages, FormField, SaveAs