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;