Docs PDFiumVCL

GenerateFormAppearances method

Cette entrée API conserve identifiants, signatures, blocs de code et termes PDF dans leur forme d’origine.
Component: TPdf  ·  Unit: PDFium
Regenerates the /AP (appearance stream) for every form widget on every page by rendering each page through FPDF_FFLDraw. This is the recommended companion call to FormField[i] := value assignments — without it, form values may be visible only when the field has focus, and any subsequent flatten operation will silently lose the values. Call after all FormField[] assignments and before SaveAs / FlattenPage / FlattenAllPages.

Syntax

procedure GenerateFormAppearances;

Description

GenerateFormAppearances rebuilds the /AP (appearance stream) entry for every AcroForm widget across all pages of the loaded document. It does this by rendering each page through the PDFium form-fill engine (FPDF_FFLDraw), which causes the current field values to be baked into the widget's visual representation stored inside the PDF file.

This call is a mandatory companion to FormField[i] := value assignments. Without it, a form field's value is stored in the PDF's data dictionary but has no corresponding appearance stream. PDF viewers typically show the value only while the field has input focus; other viewers may show nothing at all. More critically, any call to FlattenPage or FlattenAllPages without prior appearance generation will silently produce output that is missing the filled-in values.

The correct workflow when filling and locking a form is: assign all FormField[] values → call GenerateFormAppearances once → optionally call FlattenPage / FlattenAllPages → call SaveAs. If you only need to save the filled form without flattening, GenerateFormAppearances is still recommended to ensure maximum compatibility with third-party PDF viewers.

The procedure operates on the entire document in one call; there is no per-page variant.

Example

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;

See Also

FlattenPage, FlattenAllPages, FormField, SaveAs